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中的yield使用方法
Feb 11 Python
在Python中操作列表之List.pop()方法的使用
May 21 Python
wxPython的安装与使用教程
Aug 31 Python
Django框架基础模板标签与filter使用方法详解
Jul 23 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
python输出带颜色字体实例方法
Sep 01 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
Nov 06 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
python opencv 实现对图像边缘扩充
Jan 19 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
搭建pypi私有仓库实现过程详解
Nov 25 Python
Python3+Django get/post请求实现教程详解
Feb 16 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
微信小程序 传值取值的几种方法总结
2017/01/16 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
angularjs中的$eval方法详解
2017/04/24 Javascript
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
python类参数self使用示例
2014/02/17 Python
python输入多行字符串的方法总结
2019/07/02 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
职业生涯规划书基本格式
2014/01/06 职场文书
应届毕业生简历自我评价
2014/01/31 职场文书
党员活动日总结
2014/05/05 职场文书
婚姻出轨保证书
2015/05/08 职场文书
送给客户微信问候语!
2019/07/04 职场文书
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python