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获取Linux系统下的本机IP地址代码分享
Nov 07 Python
python显示生日是星期几的方法
May 27 Python
Python 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
Python实现的多项式拟合功能示例【基于matplotlib】
May 15 Python
Python实现的简单排列组合算法示例
Jul 04 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
Python 用三行代码提取PDF表格数据
Oct 13 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
python内置模块collections知识点总结
Dec 19 Python
python 类之间的参数传递方式
Dec 20 Python
Python urllib.request对象案例解析
May 11 Python
Python celery原理及运行流程解析
Jun 13 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数字转汉字代码(算法)
2011/10/08 PHP
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
Yii使用DbTarget实现日志功能的示例代码
2020/07/21 PHP
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
jQuery查看选中对象HTML代码的方法
2016/06/17 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
js验证账户名是否重复
2020/05/26 Javascript
Python实现代码统计工具(终极篇)
2016/07/04 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
Python流程控制常用工具详解
2020/02/24 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
金士达面试非笔试
2012/03/14 面试题
培训演讲稿范文
2014/01/12 职场文书
2014年社区国庆节活动方案
2014/09/16 职场文书
政协工作总结2015
2015/05/20 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
小学生读书笔记
2015/07/01 职场文书
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js