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 相关文章推荐
linux系统使用python获取内存使用信息脚本分享
Jan 15 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
Python基于Tkinter的HelloWorld入门实例
Jun 17 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
解决pycharm界面不能显示中文的问题
May 23 Python
Windows下python3.6.4安装教程
Jul 31 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
Python 3.8 新功能全解
Jul 25 Python
Python 画出来六维图
Jul 26 Python
python 上下文管理器及自定义原理解析
Nov 19 Python
python中提高pip install速度
Feb 14 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 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 curl实现抓取302跳转后页面的示例
2014/07/04 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
js函数排序的实例代码
2013/07/01 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
Python爬取国外天气预报网站的方法
2015/07/10 Python
详解如何使用Python编写vim插件
2017/11/28 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
2020/12/13 Python
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
解释下面关于J2EE的名词
2013/11/15 面试题
经典洗发水广告词
2014/03/13 职场文书
情况说明书格式范文
2014/05/06 职场文书
公司节能减排方案
2014/05/16 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL