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 difflib模块示例讲解
Sep 13 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
Python企业编码生成系统之系统主要函数设计详解
Jul 26 Python
PyTorch中topk函数的用法详解
Jan 02 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
Python单链表原理与实现方法详解
Feb 22 Python
Python使用requests模块爬取百度翻译
Aug 25 Python
Numpy数组的广播机制的实现
Nov 03 Python
Django基于Models定制Admin后台实现过程解析
Nov 11 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
Feb 07 Python
利用For循环遍历Python字典的三种方法实例
Mar 25 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 smarty的预保留变量总结
2008/12/04 PHP
php格式输出文件var_export函数实例
2014/11/15 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
Python logging模块handlers用法详解
2020/08/14 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
软件测试笔试题
2012/10/25 面试题
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
客服专员岗位职责
2015/02/10 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS