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正常时间和unix时间戳相互转换的方法
Apr 23 Python
查看Python安装路径以及安装包路径小技巧
Apr 28 Python
python实现在windows下操作word的方法
Apr 28 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
python将list转为matrix的方法
Dec 12 Python
详解python多线程之间的同步(一)
Apr 03 Python
Django获取该数据的上一条和下一条方法
Aug 12 Python
OpenCV哈里斯(Harris)角点检测的实现
Jan 15 Python
PyQt5通过信号实现MVC的示例
Feb 06 Python
Python实现自动玩连连看的脚本分享
Apr 04 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
Apr 11 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 iconv() : Detected an illegal character in input string
2010/12/05 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
PHP链表操作简单示例
2016/10/15 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
PHP7 windows支持
2021/03/09 PHP
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
YUI的Tab切换实现代码
2010/04/11 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
Python 命令行非阻塞输入的小例子
2013/09/27 Python
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
python获得图片base64编码示例
2014/01/16 Python
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
独特的python循环语句
2016/11/20 Python
Python利用openpyxl库遍历Sheet的实例
2018/05/03 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
Python发送邮件实现基础解析
2020/08/14 Python
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
JAVA程序员面试题
2012/10/03 面试题
管理提升方案
2014/06/04 职场文书
招商银行收入证明
2015/06/17 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python