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操作Mysql实例代码教程在线版(查询手册)
Feb 18 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
python循环定时中断执行某一段程序的实例
Jun 29 Python
Python Pandas 箱线图的实现
Jul 23 Python
python plt可视化——打印特殊符号和制作图例代码
Apr 17 Python
TensorFlow固化模型的实现操作
May 26 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
Keras loss函数剖析
Jul 06 Python
python 爬虫如何实现百度翻译
Nov 16 Python
Python自然语言处理之切分算法详解
Apr 25 Python
浅谈哪个Python库才最适合做数据可视化
Jun 28 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接收shell返回的结果中文乱码问题
2014/01/23 PHP
功能强大的php分页函数
2016/07/20 PHP
PHP实现Huffman编码/解码的示例代码
2018/04/20 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
发现的以前不知道的函数
2006/09/19 Javascript
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
详解python中docx库的安装过程
2019/11/08 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
HTML5标签小集
2011/08/02 HTML / CSS
给医务人员表扬信
2014/01/12 职场文书
房地产广告词大全
2014/03/19 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL