python实现图片压缩代码实例


Posted in Python onAugust 12, 2019

前言

项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩

一:导入包

from PIL import Image
import os

二:获取图片文件的大小

def get_size(file):
  # 获取文件大小:KB
  size = os.path.getsize(file)
  return size / 1024

三:拼接输出文件地址

def get_outfile(infile, outfile):
  if outfile:
    return outfile
  dir, suffix = os.path.splitext(infile)
  outfile = '{}-out{}'.format(dir, suffix)
  return outfile

四:压缩文件到指定大小,我期望的是150KB,step和quality可以修改到最合适的数值

def compress_image(infile, outfile='', mb=150, step=10, quality=80):
  """不改变图片尺寸压缩到指定大小
  :param infile: 压缩源文件
  :param outfile: 压缩文件保存地址
  :param mb: 压缩目标,KB
  :param step: 每次调整的压缩比率
  :param quality: 初始压缩比率
  :return: 压缩文件地址,压缩文件大小
  """
  o_size = get_size(infile)
  if o_size <= mb:
    return infile
  outfile = get_outfile(infile, outfile)
  while o_size > mb:
    im = Image.open(infile)
    im.save(outfile, quality=quality)
    if quality - step < 0:
      break
    quality -= step
    o_size = get_size(outfile)
  return outfile, get_size(outfile)

五:修改图片尺寸,如果同时有修改尺寸和大小的需要,可以先修改尺寸,再压缩大小

def resize_image(infile, outfile='', x_s=1376):
  """修改图片尺寸
  :param infile: 图片源文件
  :param outfile: 重设尺寸文件保存地址
  :param x_s: 设置的宽度
  :return:
  """
  im = Image.open(infile)
  x, y = im.size
  y_s = int(y * x_s / x)
  out = im.resize((x_s, y_s), Image.ANTIALIAS)
  outfile = get_outfile(infile, outfile)
  out.save(outfile)
if __name__ == '__main__':
  compress_image(r'D:\learn\space.jpg')
  resize_image(r'D:\learn\space.jpg')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
Python爬取APP下载链接的实现方法
Sep 30 Python
TensorFLow用Saver保存和恢复变量
Mar 10 Python
PyCharm安装第三方库如Requests的图文教程
May 18 Python
Python类装饰器实现方法详解
Dec 21 Python
python解析含有重复key的json方法
Jan 22 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
TensorFlow 显存使用机制详解
Feb 03 Python
Pytest mark使用实例及原理解析
Feb 22 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
Pygame Draw绘图函数的具体使用
Nov 17 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 #Python
一行Python代码过滤标点符号等特殊字符
Aug 12 #Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 #Python
Django认证系统实现的web页面实现代码
Aug 12 #Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 #Python
django-filter和普通查询的例子
Aug 12 #Python
利用python实现汉字转拼音的2种方法
Aug 12 #Python
You might like
PHP生成UTF8文件的方法
2010/05/15 PHP
php常用字符串处理函数实例分析
2014/11/22 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
深入认识javascript中的eval函数
2009/11/02 Javascript
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
2012/11/07 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
javascript常用的方法分享
2015/07/01 Javascript
继续学习javascript闭包
2015/12/03 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
JavaScript  cookie 跨域访问之广告推广
2016/04/20 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
js实现数字滚动特效
2019/12/16 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
python之PyMongo使用总结
2017/05/26 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
Python进行统计建模
2020/08/10 Python
岗位竞聘演讲稿
2014/01/10 职场文书
酒店拾金不昧表扬信
2014/01/18 职场文书
酒店销售经理岗位职责
2014/01/31 职场文书
班主任经验交流会主持词
2014/04/01 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
起诉书范文
2015/05/20 职场文书
小学思想品德教学反思
2016/02/24 职场文书