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实现ftp客户端示例分享
Feb 17 Python
Python不规范的日期字符串处理类
Jun 10 Python
python通过openpyxl生成Excel文件的方法
May 12 Python
Python设计模式之简单工厂模式实例详解
Jan 22 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 Python
基于python实现学生信息管理系统
Nov 22 Python
python numpy数组复制使用实例解析
Jan 10 Python
多个python文件调用logging模块报错误
Feb 12 Python
Windows下Anaconda和PyCharm的安装与使用详解
Apr 23 Python
详解python对象之间的交互
Sep 29 Python
Django URL参数Template反向解析
Nov 24 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
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
javascript GUID生成器实现代码
2009/10/31 Javascript
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
python通过线程实现定时器timer的方法
2015/03/16 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
新媒传信软件测试面试题
2013/02/24 面试题
项目施工员岗位职责
2014/03/09 职场文书
雏鹰争章活动总结
2014/05/09 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
团组织推优材料
2014/12/29 职场文书
基于Redis的List实现特价商品列表功能
2021/08/30 Redis