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 相关文章推荐
详解Golang 与python中的字符串反转
Jul 21 Python
python简单商城购物车实例代码
Mar 15 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
python读取xlsx的方法
Dec 25 Python
flask session组件的使用示例
Dec 25 Python
Python设计模式之建造者模式实例详解
Jan 17 Python
Python实现制度转换(货币,温度,长度)
Jul 14 Python
Python字符串中添加、插入特定字符的方法
Sep 10 Python
python 求定积分和不定积分示例
Nov 20 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
Python制作一个随机抽奖小工具的实现
Jul 07 Python
Python机器学习应用之工业蒸汽数据分析篇详解
Jan 18 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 变量的定义方法
2010/01/26 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
纯php生成随机密码
2015/10/30 PHP
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
H5实现仿flash效果的实现代码
2017/09/29 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
python操作gmail实例
2015/01/14 Python
Python中的变量和作用域详解
2016/07/13 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
abstract是什么意思
2012/02/12 面试题
《海底世界》教学反思
2014/04/16 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
中层干部考核评语
2015/01/04 职场文书
消防安全培训工作总结
2015/10/23 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
Python实现制作销售数据可视化看板详解
2021/11/27 Python
golang操作rocketmq的示例代码
2022/04/06 Golang
python APScheduler执行定时任务介绍
2022/04/19 Python