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获取文件后缀名及批量更新目录下文件后缀名的方法
Nov 11 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
查看Django和flask版本的方法
May 14 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
python 使用值来排序一个字典的方法
Nov 16 Python
python使用writerows写csv文件产生多余空行的处理方法
Aug 01 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
Apr 22 Python
Django实现随机图形验证码的示例
Oct 15 Python
用python删除文件夹中的重复图片(图片去重)
May 12 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 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验证码函数代码(简单实用)
2013/09/29 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
js 控制页面跳转的5种方法
2013/09/09 Javascript
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
python求斐波那契数列示例分享
2014/02/14 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
Django CBV类的用法详解
2019/07/26 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
Django更新models数据库结构步骤
2020/04/01 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
Python urllib.request对象案例解析
2020/05/11 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
营业员实习自我鉴定
2013/12/07 职场文书
学生打架检讨书大全
2014/01/23 职场文书
商场活动策划方案
2014/01/24 职场文书
英语系毕业生求职信
2014/07/13 职场文书
政协调研汇报材料
2014/08/15 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
务虚会发言材料
2014/12/25 职场文书
美丽的大脚观后感
2015/06/03 职场文书
追悼会答谢词范文
2015/09/29 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书