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中操作字符串之startswith()方法的使用
May 20 Python
Linux下用Python脚本监控目录变化代码分享
May 21 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
Python subprocess模块功能与常见用法实例详解
Jun 28 Python
python实现彩票系统
Jun 28 Python
python实现诗歌游戏(类继承)
Feb 26 Python
对Django外键关系的描述
Jul 26 Python
python函数修饰符@的使用方法解析
Sep 02 Python
Python logging日志模块 配置文件方式
Jul 12 Python
想学画画?python满足你!
Dec 24 Python
python 实现IP子网计算
Feb 18 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
Feb 20 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 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
js查错流程归纳
2012/05/04 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
Python算法之栈(stack)的实现
2014/08/18 Python
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
python基础 range的用法解析
2019/08/23 Python
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
会计辞职信范文
2014/01/15 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
黄山导游词
2015/01/31 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
《检阅》教学反思
2016/02/22 职场文书
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python