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 相关文章推荐
Pyhton中防止SQL注入的方法
Feb 05 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
django实现用户登陆功能详解
Dec 11 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 Python
Python continue语句实例用法
Feb 06 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 Python
Python新手学习标准库模块命名
May 29 Python
如何利用python web框架做文件流下载的实现示例
Jun 02 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 万年历实现代码
2012/10/18 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
Array对象方法参考
2006/10/03 Javascript
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
详解Python中的type和object
2018/08/15 Python
通过实例了解Python异常处理机制底层实现
2020/07/23 Python
Html5移动端适配IphoneX等机型的方法
2019/06/25 HTML / CSS
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
日语系毕业生推荐信
2013/11/11 职场文书
工厂仓管员岗位职责
2014/01/01 职场文书
销售口号大全
2014/06/11 职场文书
校园元旦活动总结
2014/07/09 职场文书
升学宴答谢词
2015/01/05 职场文书
雷峰塔导游词
2015/02/09 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
八一建军节主持词
2015/07/01 职场文书
网吧管理制度范本
2015/08/05 职场文书
Python中with上下文管理协议的作用及用法
2022/03/18 Python