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中根据字符串调用函数的实现方法
Jun 12 Python
python分析作业提交情况
Nov 22 Python
Python数据拟合与广义线性回归算法学习
Dec 22 Python
解读python如何实现决策树算法
Oct 11 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
python tkinter窗口最大化的实现
Jul 15 Python
python 求10个数的平均数实例
Dec 16 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 Python
python之pygame模块实现飞机大战完整代码
Nov 29 Python
python statsmodel的使用
Dec 21 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水印
2007/03/16 PHP
php无限极分类实现方法分析
2019/07/04 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
js+SVG实现动态时钟效果
2018/07/14 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
python实现简单的TCP代理服务器
2014/10/08 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
python线程池threadpool使用篇
2018/04/27 Python
python中append实例用法总结
2019/07/30 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python 私有化操作实例分析
2019/11/21 Python
python 实现dict转json并保存文件
2019/12/05 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
柯基袜:Corgi Socks
2017/01/26 全球购物
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
暑期社会实践学生的自我评价
2014/01/09 职场文书
节约用水标语
2014/06/11 职场文书
铁路安全反思材料
2014/12/24 职场文书
特此通知格式
2015/04/27 职场文书
薪资证明范本
2015/06/19 职场文书
2016公司年会主持词
2015/07/01 职场文书
2015党建工作简报
2015/07/21 职场文书
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python