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 相关文章推荐
ptyhon实现sitemap生成示例
Mar 30 Python
python快速查找算法应用实例
Sep 26 Python
Python标准库urllib2的一些使用细节总结
Mar 16 Python
在Gnumeric下使用Python脚本操作表格的教程
Apr 14 Python
python统计日志ip访问数的方法
Jul 06 Python
Python中取整的几种方法小结
Jan 06 Python
python使用生成器实现可迭代对象
Mar 20 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
PHP统计代码行数的小代码
Sep 19 Python
Python爬取数据并实现可视化代码解析
Aug 12 Python
Python批量获取并保存手机号归属地和运营商的示例
Oct 09 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
Oct 16 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
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
jQuery 使用手册(七)
2009/09/23 Javascript
javascript 数组学习资料收集
2010/04/11 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
python3编写C/S网络程序实例教程
2014/08/25 Python
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
师范应届生教师求职信
2013/11/05 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
超市工作总结范文2014
2014/12/19 职场文书