文章目录

  • 1. 背景:
  • 2.寻找解决办法
    • 2.1可行性分析
  • 3.问题分解
    • 3.1将gif文件分解
      • 3.1.1示例代码
      • 3.1.2 效果图
  • 4.代码优化
  • 5.做成一个通用工具
    • 5.1创建一个虚拟环境
    • 5.2虚拟环境安装必要库
    • 5.3打包
    • 5.4把.gif文件放到compress.exe文件夹下
    • 5.5双击.exe查看打包效果
    • 5.6压缩后的图片效果

1. 背景:

最近写了一篇CSDN博客需要上传gif图,发现大小超过了5M,无法上传。

文件大小:


本想自己找个免费的压缩工具,结果下载下来的工具不是钓鱼工具就是流氓软件,还有的在线压缩工具说是免费,等你download的时候说是要付费,总之一大堆坑。

2.寻找解决办法

由于上面坑爹的经过,于是我自己试着找找python压缩gif的办法。

2.1可行性分析

根据我的理解是可行的,因为gif的文件是根据一帧帧静态图片根据时序拼接起来的,如果使用python将gif文件分解成一帧帧静态图片的话,再将静态图片对象进行压缩之后再合并,理论上是可以减小文件大小。

3.问题分解

3.1将gif文件分解

需要找到一个可以将gif文件分解成静态图像的库,了解到PIL的ImageSequence可以将gif分解成一帧帧。

3.1.1示例代码

from PIL import Image, ImageSequence
filename = "2018-0.gif"
gif = Image.open(filename)
index = 0
for frame in ImageSequence.Iterator(gif):#frame.convert('RGB')frame.save(str(index)+'.png')#passindex += 1

3.1.2 效果图

4.代码优化

代码很简单

import imageio
from PIL import Image, ImageSequencedef compressGif(filename):gif = Image.open(filename)if not gif.is_animated:return Falseimageio.mimsave('compress-'+filename, [frame.convert('RGB') for frame in ImageSequence.Iterator(gif)], duration = gif.info['duration']/2000) fileList = ["2018-0.gif","2018-1.gif","2018-2.gif","2018-3.gif","2018-4.gif"]
for filename in fileList:compressGif(filename)

5.做成一个通用工具

5.1创建一个虚拟环境

mkvirtualenv GIF

5.2虚拟环境安装必要库

pip install imageio
pip install pyinstaller 打包必备的库

5.3打包

pyinstaller -F compress.py

5.4把.gif文件放到compress.exe文件夹下

5.5双击.exe查看打包效果

5.6压缩后的图片效果

可以看到压缩之后图片依然很清晰
压缩率: 5356/1504 = 3.56
这个压缩率已经非常高了

python对gif图压缩相关推荐

  1. 【python】2行代码实现gif动图压缩(pygifsicle)

    写在前面 之前给大家分享过如何用python将多张图片合成gif动图(点击这里查看).但如果合成的动图太大怎么办,如何压缩? 依赖模块 pip install pygifsicle 示例代码 from ...

  2. Python将彩色图转换为灰度图

    Python将彩色图转换为灰度图 目录 Python将彩色图转换为灰度图 #原图 #转化程序 #处理后的图片

  3. python使用箱图法和业务规则进行异常数据处理并检查预测使用的数据特征是否有字段缺失的情况并补齐

    python使用箱图法和业务规则进行异常数据处理并检查预测使用的数据特征是否有字段缺失的情况并补齐 关于预测或者推理的时候特征补齐的情况是这样的: 你在模型训练的时候使用了多少特征,那么在模型预测和推 ...

  4. python多张图片合并拼接,python制作sprite图、雪碧图

    python多张图片合并拼接,python制作sprite图.雪碧图 整理图片集 找两个文件夹,yangying和zhaoliying,分别放上照片8张,共16张照片. 创建sprite.py # 多 ...

  5. python opencv 彩色图非局部平均去噪

    python opencv 彩色图非局部平均去噪 代码: import cv2 import numpy as np # 灰度图像去噪 def MeansDenoising(img,N,h,templ ...

  6. python opencv 灰度图非局部平均去噪

    python opencv 灰度图非局部平均去噪 代码: import cv2 import numpy as np # 灰度图像去噪 def MeansDenoising(img,h,templat ...

  7. 修改python plot折线图的坐标轴刻度

    修改python plot折线图的坐标轴刻度,这里修改为整数: 代码如下: from matplotlib import pyplot as plt import matplotlib.ticker ...

  8. unity 纹理压缩格式‘_[2018.1]Unity贴图压缩格式设置

    一.移动平台GPU 参考文档: 各种移动GPU压缩纹理的使用方法 - LuMing - 博客园​www.cnblogs.com 1.Imagination Technologies的PowerVR S ...

  9. python简单代码画曲线图教程-Python绘制折线图和散点图的详细方法介绍(代码示例)...

    本篇文章给大家带来的内容是关于Python绘制折线图和散点图的详细方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.绘制折线图和散点图要用到matplotlib ...

  10. python话雷达图-Python 详解雷达图/蛛网图

    雷达图-pyecharts 蛛网图,最早知道是在玩FIFA游戏的时候,球员的能力用蛛网图来表示与比较,那时觉得非常新鲜.后来,在实际的工作中,其实很少用到:一方面,直接提供蛛网图的工具少:另一方面,过 ...

最新文章

  1. [Scoi2015]小凸玩矩阵
  2. retinaface 训练笔记
  3. java fastjson_java操作json数据之fastjson
  4. 9、Power Map—应用拾取坐标系统确定经纬度
  5. 记一次有意思的种树比赛
  6. 【原创】自定义Appender类,输出DCMTK日志
  7. android 代码设置像素,【Android实例】用设计原则来重构1像素保活代码
  8. DDD~microsoft NLayerApp项目中的层次结构图
  9. hdu-3333-Turing Tree(树状数组)
  10. VMware-ESXi-6.7.0许可证
  11. 软考最后冲刺阶段该怎么做
  12. Python将单一数字标签进行one-hot编码
  13. 音量计算机的网红音乐,网红音乐10首抖音网红歌,抖音网红歌曲100首BGM精选
  14. springboot+cas单点登录
  15. Three.js光照贴图添加阴影(·lightMap)
  16. “好男人不包二奶”的营销策略——奢侈品“奇葩”市场缘何存在?
  17. 消息队列MQ 之 Kafka
  18. iOS Hit-Testing
  19. 经典按键java手机游戏_用诺基亚N95体验2G时代的JAVA网游,能正常运行么
  20. 汽车消费陷阱多,盛世昊通教你擦亮双眼精挑细选

热门文章

  1. java开源工作流引擎
  2. 暗时间 pdf_时间管理最全的一篇:理论+实践+电子书
  3. JLink的JTag和SWD模式引脚定义
  4. 申领电子驾照提示证件照不标准
  5. 小米8 青春版root时无法检测到手机
  6. Mugeda(木疙瘩)H5案例课—足球小游戏-岑远科-专题视频课程
  7. 市场28款主流同步整流DCDC芯片横向测评预告
  8. X4扭曲字体或图形 coreldraw_cdrx4精简版下载|coreldraw x4 sp2 精简版下载增强版 15.2.3.1614 - 系统天堂...
  9. android textview 设置字体,Android 设置TextView自动调整字体大小
  10. 华为Linux笔记本拆机,华为MateBook D怎么拆机?华为MateBook D拆机图文步骤详解