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 相关文章推荐
paramiko模块安装和使用(远程登录服务器)
Jan 27 Python
python学习 流程控制语句详解
Jun 01 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
matplotlib作图添加表格实例代码
Jan 23 Python
Python面向对象之继承代码详解
Jan 29 Python
python3实现windows下同名进程监控
Jun 21 Python
python中单下划线_的常见用法总结
Jul 10 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
python使用knn实现特征向量分类
Dec 26 Python
python剪切视频与合并视频的实现
Mar 03 Python
TensorFlow保存TensorBoard图像操作
Jun 23 Python
Python爬虫之爬取最新更新的小说网站
May 06 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 IF ELSE简化/三元一次式的使用
2011/08/22 PHP
初品cakephp 入门基础
2012/02/16 PHP
php curl选项列表(超详细)
2013/07/01 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
php 购物车完整实现代码
2014/06/05 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
JSDoc 介绍使用规范JsDoc的使用介绍
2011/02/12 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
如何在C# winform中异步调用web services
2015/09/21 面试题
请说出以下代码输出什么
2013/08/30 面试题
优秀学生党员先进事迹材料
2014/05/29 职场文书
房产授权委托书范本
2014/09/22 职场文书
解决sql server 数据库,sa用户被锁定的问题
2021/06/11 SQL Server
一文简单了解MySQL前缀索引
2022/04/03 MySQL