python实现图片压缩代码实例


Posted in Python onAugust 12, 2019

前言

项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩

一:导入包

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)

五:修改图片尺寸,如果同时有修改尺寸和大小的需要,可以先修改尺寸,再压缩大小

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类的基础入门知识
Nov 24 Python
python中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
Python中的引用和拷贝浅析
Nov 22 Python
Python中的下划线详解
Jun 24 Python
深入解析Python中的descriptor描述器的作用及用法
Jun 27 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
Nov 16 Python
pyshp创建shp点文件的方法
Dec 31 Python
Python并发爬虫常用实现方法解析
Nov 19 Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 Python
Python进行区间取值案例讲解
Aug 02 Python
使用Python通过企业微信应用给企业成员发消息
Apr 18 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 #Python
一行Python代码过滤标点符号等特殊字符
Aug 12 #Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 #Python
Django认证系统实现的web页面实现代码
Aug 12 #Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 #Python
django-filter和普通查询的例子
Aug 12 #Python
利用python实现汉字转拼音的2种方法
Aug 12 #Python
You might like
PHP 高手之路(二)
2006/10/09 PHP
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
UCenter Home二次开发指南
2009/05/28 PHP
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
List the Codec Files on a Computer
2007/06/18 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
Python 正则表达式(转义问题)
2014/12/15 Python
使用Python求解最大公约数的实现方法
2015/08/20 Python
Python对文件操作知识汇总
2016/05/15 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
Python实现E-Mail收集插件实例教程
2019/02/06 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
硕士研究生个人求职信
2013/12/04 职场文书
大学校庆策划书
2014/01/31 职场文书
投资合作协议书范本
2014/04/17 职场文书
供货协议书范本
2014/04/22 职场文书
电子商务专业求职信
2014/07/10 职场文书
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android