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实现的防DDoS脚本
Feb 08 Python
videocapture库制作python视频高速传输程序
Dec 23 Python
python生成指定长度的随机数密码
Jan 23 Python
python实现根据月份和日期得到星座的方法
Mar 27 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
python3多线程知识点总结
Sep 26 Python
基于Python批量生成指定尺寸缩略图代码实例
Nov 20 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
Django分组聚合查询实例分享
Apr 29 Python
Node.js 和 Python之间该选择哪个?
Aug 05 Python
python读写数据读写csv文件(pandas用法)
Dec 14 Python
python区块链持久化和命令行接口实现简版
May 25 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
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
PHP 字符串 小常识
2009/06/05 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
php实现每日签到功能
2018/11/29 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
一个很简单的办法实现TD的加亮效果.
2006/06/29 Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
详解python-图像处理(映射变换)
2019/03/22 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
Python如何输出警告信息
2020/07/30 Python
jupyter 添加不同内核的操作
2021/02/06 Python
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
网络教育毕业生自我鉴定
2013/10/10 职场文书
2013年学期结束动员演讲稿
2014/01/07 职场文书
法语专业求职信
2014/07/20 职场文书
销售顾问工作计划书
2014/08/15 职场文书
先进事迹演讲稿
2014/09/01 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
2016年班主任培训心得体会
2016/01/07 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript
一篇文章弄懂Python中的内建函数
2021/08/07 Python