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中处理日期和时间的基本知识点整理汇总
May 22 Python
深入学习Python中的上下文管理器与else块
Aug 27 Python
详解js文件通过python访问数据库方法
Mar 03 Python
Python实现的矩阵转置与矩阵相乘运算示例
Mar 26 Python
python编写计算器功能
Oct 25 Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 Python
python多进程下的生产者和消费者模型
May 07 Python
python属于跨平台语言码
Jun 09 Python
查看keras的默认backend实现方式
Jun 19 Python
python输入中文的实例方法
Sep 14 Python
python 实现逻辑回归
Dec 30 Python
Django Paginator分页器的使用示例
Jun 23 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脚本守护进程原理与实现方法详解
2017/07/20 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
JQuery 小练习(实例代码)
2009/08/07 Javascript
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
2014/06/10 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
JS验证图片格式和大小并预览的简单实例
2016/10/11 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
JS基于开关思想实现的数组去重功能【案例】
2019/02/18 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
js实现简易拖拽的示例
2020/10/26 Javascript
python 编码规范整理
2018/05/05 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
Python:slice与indices的用法
2019/11/25 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
Java语言程序设计测试题选择题部分
2014/04/03 面试题
生物科学专业自荐书
2014/06/20 职场文书
火锅店的活动方案
2014/08/15 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
元旦晚会开场白
2015/05/29 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
团支部书记竞选稿
2015/11/21 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript