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 布尔操作实现代码
Mar 23 Python
简洁的十分钟Python入门教程
Apr 03 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
python中退出多层循环的方法
Nov 27 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
Keras loss函数剖析
Jul 06 Python
Python使用xpath实现图片爬取
Sep 16 Python
Python中qutip用法示例详解
Oct 02 Python
python 图像增强算法实现详解
Jan 24 Python
python函数的两种嵌套方法使用
Apr 02 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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
用PHP+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
JavaScript版代码高亮
2006/06/26 Javascript
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
一张图带我们入门Python基础教程
2017/02/05 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
如何在pycharm中安装第三方包
2020/10/27 Python
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
最新党员的自我评价分享
2013/11/04 职场文书
终止劳动合同协议书
2014/04/14 职场文书
空气的环保标语
2014/06/12 职场文书
高中同学会活动方案
2014/08/14 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
普通党员四风问题对照检查材料
2014/09/27 职场文书
2015感人爱情寄语
2015/02/26 职场文书
环保证明
2015/06/23 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL