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类型强制转换long to int的代码
Feb 10 Python
python sort、sorted高级排序技巧
Nov 21 Python
python简单实现基数排序算法
May 16 Python
django站点管理详解
Dec 12 Python
Python使用matplotlib实现绘制自定义图形功能示例
Jan 18 Python
磁盘垃圾文件清理器python代码实现
Aug 24 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
使用11行Python代码盗取了室友的U盘内容
Oct 23 Python
Django中使用Celery的方法示例
Nov 29 Python
Python %r和%s区别代码实例解析
Apr 03 Python
python中常见错误及解决方法
Jun 21 Python
OpenCV-Python实现油画效果的实例
Jun 08 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下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
Jquery简单实现GridView行高亮的方法
2015/06/15 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
Python实现身份证号码解析
2015/09/01 Python
python访问抓取网页常用命令总结
2017/04/11 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
python自动化发送邮件实例讲解
2021/01/04 Python
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
蛋白质世界:Protein World
2017/11/23 全球购物
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
应届生人事助理求职信
2013/11/09 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
绿色环保演讲稿
2014/05/10 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
详解Vue router路由
2021/11/20 Vue.js