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 KMeans聚类问题分析
Feb 23 Python
python中强大的format函数实例详解
Dec 05 Python
python实现读取excel文件中所有sheet操作示例
Aug 09 Python
python元组的概念知识点
Nov 19 Python
Python连接字符串过程详解
Jan 06 Python
pytorch之添加BN的实现
Jan 06 Python
在Python中通过threshold创建mask方式
Feb 19 Python
python实现扫雷游戏
Mar 03 Python
PyQt5的QWebEngineView使用示例
Oct 20 Python
Django一小时写出账号密码管理系统
Apr 29 Python
教你使用一行Python代码玩遍童年的小游戏
Aug 23 Python
Python requests用法和django后台处理详解
Mar 19 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
牡丹941资料
2021/03/01 无线电
php 中英文语言转换类
2011/09/07 PHP
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
php字符串截取的简单方法
2013/07/04 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
详细讲解JS节点知识
2010/01/31 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
react实现菜单权限控制的方法
2017/12/11 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
跟老齐学Python之正规地说一句话
2014/09/28 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
Python之父谈Python的未来形式
2016/07/01 Python
Python random模块用法解析及简单示例
2017/12/18 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
python如何生成网页验证码
2018/07/28 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
Python中pass语句的作用是什么
2016/06/01 面试题
西式婚礼证婚词
2014/01/12 职场文书
企业人事任命书
2014/06/05 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL