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应用程序在windows下不出现cmd窗口的办法
May 29 Python
更改Python命令行交互提示符的方法
Jan 14 Python
python函数的5种参数详解
Feb 24 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
Jun 05 Python
用python生成1000个txt文件的方法
Oct 25 Python
关于Python作用域自学总结
Jun 10 Python
python并发编程多进程 模拟抢票实现过程
Aug 20 Python
Python 转换文本编码实现解析
Aug 27 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
python numpy库linspace相同间隔采样的实现
Feb 25 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 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
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
IntersectionObserver实现图片懒加载的示例
2017/09/29 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
vue添加axios,并且指定baseurl的方法
2018/09/19 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
详细介绍Ruby中的正则表达式
2015/04/10 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
Python面向对象封装操作案例详解
2019/12/31 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
利用HTML5 Canvas API绘制矩形的超级攻略
2016/03/21 HTML / CSS
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
中国高端家电购物商城:顺电
2018/03/04 全球购物
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
音乐教学反思
2014/02/02 职场文书
外语系大学生自荐信范文
2014/03/01 职场文书
钱学森观后感
2015/06/04 职场文书
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
Oracle 多表查询基本语法实例
2022/04/18 Oracle