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的Django框架中的模版继承
Jul 16 Python
Python中的迭代器与生成器高级用法解析
Jun 28 Python
Python操作MongoDB数据库的方法示例
Jan 04 Python
Python实现去除列表中重复元素的方法小结【4种方法】
Apr 27 Python
pygame实现贪吃蛇游戏(上)
Oct 29 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
May 22 Python
python接口自动化之ConfigParser配置文件的使用详解
Aug 03 Python
Python如何进行时间处理
Aug 06 Python
Python使用pycharm导入pymysql教程
Sep 16 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 Python
python中pandas.read_csv()函数的深入讲解
Mar 29 Python
Pygame Event事件模块的详细示例
Nov 17 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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
解析php中获取系统信息的方法
2013/06/25 PHP
php缓冲输出实例分析
2015/01/05 PHP
PHP内置加密函数详解
2016/11/20 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
javascript 面向对象编程基础:继承
2009/08/21 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
基于JavaScript canvas绘制贝塞尔曲线
2018/12/25 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
Django框架用户注销功能实现方法分析
2019/05/28 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
python中的global关键字的使用方法
2019/08/20 Python
python获取array中指定元素的示例
2019/11/26 Python
Python requests设置代理的方法步骤
2020/02/23 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
比利时香水网上商店:NOTINO
2018/03/28 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
《沉香救母》教学反思
2014/04/19 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
迎国庆演讲稿
2014/09/15 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
学校捐书倡议书
2015/04/27 职场文书
董存瑞观后感
2015/06/11 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang
Python3的进程和线程你了解吗
2022/03/16 Python