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之复习if语句
Oct 02 Python
整理Python最基本的操作字典的方法
Apr 24 Python
Python获取linux主机ip的简单实现方法
Apr 18 Python
python中字符串类型json操作的注意事项
May 02 Python
Python单例模式的两种实现方法
Aug 14 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
Python实现定时精度可调节的定时器
Apr 15 Python
解决python爬虫中有中文的url问题
May 11 Python
python__new__内置静态方法使用解析
Jan 07 Python
Python中Selenium模块的使用详解
Oct 09 Python
Python 3.9的到来到底是意味着什么
Oct 14 Python
如何解决.cuda()加载用时很长的问题
May 24 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/11/25 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
2014/06/04 PHP
php实现可逆加密的方法
2015/08/11 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
加速IE的Javascript document输出的方法
2010/12/02 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
新闻记者个人求职的自我评价
2013/11/28 职场文书
抄作业检讨书
2014/02/17 职场文书
党员入党表决心的话
2014/03/11 职场文书
赞美老师的演讲稿
2014/05/22 职场文书
标准单位租车协议书
2014/09/23 职场文书
银行委托书范本
2014/09/28 职场文书
家长必看:义务教育,不得以面试 评测等名义选拔学生
2019/07/09 职场文书
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技