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的Django框架结合jQuery实现AJAX购物车页面
Apr 11 Python
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
python Flask实现restful api service
Dec 04 Python
Python编程argparse入门浅析
Feb 07 Python
Python实现修改IE注册表功能示例
May 10 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
Python3实现的回文数判断及罗马数字转整数算法示例
Mar 27 Python
Python实现带下标索引的遍历操作示例
May 30 Python
Python 计算任意两向量之间的夹角方法
Jul 05 Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
Jan 24 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
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
fgetcvs在linux的问题
2012/01/15 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
2016/03/18 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
vue中监听返回键问题
2019/08/28 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
Python处理CSV与List的转换方法
2018/04/19 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
基于python判断目录或者文件代码实例
2019/11/29 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
英国高街电视:High Street TV
2018/05/22 全球购物
美国在线工具商店:Acme Tools
2018/06/26 全球购物
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
Crocs波兰官方商店:女鞋、男鞋、童鞋、洞洞鞋
2019/10/08 全球购物
药品质量检测应届生求职信
2013/11/14 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
暑期实践个人总结
2015/03/06 职场文书