python 实现图片批量压缩的示例


Posted in Python onDecember 18, 2020

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

一:导入包

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)

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

#Python学习交流群:778463939
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 实现图片批量压缩的示例的详细内容,更多关于python 图片批量压缩的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
Python判断操作系统类型代码分享
Nov 22 Python
Python常用库推荐
Dec 04 Python
Python正则表达式完全指南
May 25 Python
便捷提取python导入包的属性方法
Oct 15 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
django和flask哪个值得研究学习
Jul 31 Python
详解pycharm自动import所需的库的操作方法
Nov 30 Python
Python实现简繁体转换
Jun 07 Python
python 基于opencv实现高斯平滑
Dec 18 #Python
python爬取代理ip的示例
Dec 18 #Python
用Python 执行cmd命令
Dec 18 #Python
Django用内置方法实现简单搜索功能的方法
Dec 18 #Python
Django解决frame拒绝问题的方法
Dec 18 #Python
Django自带的用户验证系统实现
Dec 18 #Python
Django模板报TemplateDoesNotExist异常(亲测可行)
Dec 18 #Python
You might like
php框架Phpbean说明
2008/01/10 PHP
php基础学习之变量的使用
2011/06/09 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
vue 页面加载进度条组件实例
2018/02/05 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
详解python上传文件和字符到PHP服务器
2017/11/24 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
python实现飞船大战
2020/04/24 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
浅析Python requests 模块
2020/10/09 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
服务承诺口号
2014/05/22 职场文书
新学期开学标语
2014/06/30 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
二审答辩状范文
2015/05/22 职场文书
歼十出击观后感
2015/06/11 职场文书
网络研修心得体会
2016/01/08 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python