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 相关文章推荐
python3实现短网址和数字相互转换的方法
Apr 28 Python
基于python时间处理方法(详解)
Aug 14 Python
tensorflow中next_batch的具体使用
Feb 02 Python
Python实现OpenCV的安装与使用示例
Mar 30 Python
Python基础之字符串常见操作经典实例详解
Feb 26 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
使用Pycharm分段执行代码
Apr 15 Python
基于Python绘制美观动态圆环图、饼图
Jun 03 Python
python实现无边框进度条的实例代码
Dec 30 Python
浅析Python打包时包含静态文件处理方法
Jan 15 Python
详解分布式系统中如何用python实现Paxos
May 18 Python
python实现对doc、txt、xls等文档的读写操作
Apr 02 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
用PHP发电子邮件
2006/10/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
Python中的groupby分组功能的实例代码
2018/07/11 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
2019/12/25 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
办公室文员岗位职责
2015/02/04 职场文书
信仰观后感
2015/06/03 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers