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 布尔操作实现代码
Mar 23 Python
判断网页编码的方法python版
Aug 12 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
Oct 16 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
Python3实现二叉树的最大深度
Sep 30 Python
给 TensorFlow 变量进行赋值的方式
Feb 10 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
Python如何定义有默认参数的函数
Aug 10 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 Python
python+selenium小米商城红米K40手机自动抢购的示例代码
Mar 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
phpMyAdmin2.11.6安装配置方法
2008/08/24 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
js的新生代垃圾回收知识点总结
2019/08/22 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python清除字符串里非数字字符的方法
2015/07/02 Python
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
对python 命令的-u参数详解
2018/12/03 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
Python控制台实现交互式环境执行
2020/06/09 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
推广普通话演讲稿
2014/05/23 职场文书
合同审查法律意见书
2015/06/04 职场文书
SQL解决未能删除约束问题drop constraint
2022/05/30 SQL Server