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 version 2.7 required, which was not found in the registry
Aug 26 Python
python中list列表的高级函数
May 17 Python
Python中字典的setdefault()方法教程
Feb 07 Python
Python测试人员需要掌握的知识
Feb 08 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
Aug 07 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
Python Django 简单分页的实现代码解析
Aug 21 Python
pytorch实现建立自己的数据集(以mnist为例)
Jan 18 Python
java字符串格式化输出实例讲解
Jan 06 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 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
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
解析argc argv在php中的应用
2013/06/24 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
2018/09/29 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
Python中实现switch功能实例解析
2018/01/11 Python
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
python计算两个数的百分比方法
2018/06/29 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
基于python操作ES实例详解
2019/11/16 Python
Python调用.net动态库实现过程解析
2020/06/05 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
中学生个人自我评价
2014/02/06 职场文书
校园活动策划方案
2014/06/13 职场文书
医院员工辞职信范文
2015/05/12 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL