python对gif图压缩的完美解决方案

目录
  • 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')#pass
	index += 1

3.1.2 效果图

4.代码优化

代码很简单

import imageio
from PIL import Image, ImageSequence

def compressGif(filename):
    gif = Image.open(filename)
    if not gif.is_animated:
        return False
    imageio.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图压缩的完美解决方案的文章就介绍到这了,更多相关python对gif图压缩内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python实现批量压缩图片

    本文为大家分享了Python实现批量压缩图片的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- """ __author__= 'Du' __creation_time__= '2018/1/5 10:06' """ import os from PIL import Image import glob DIR = 'C:/Users/Public/Pictures/Sample Pictures/' class

  • python实现图片批量压缩程序

    本文实例为大家分享了python实现图片批量压缩程序的具体代码,供大家参考,具体内容如下 说明 运行环境:Win10 Pycharm 程序没有用到面向对象编程方法,只是简单的面向过程设计 用到的模块:PIL.os.sys 使用方法: 在Pycharm的terminal中输入"python xxx.py source_dir dest_dir"就可以把source_dir中的图片文件进行压缩并保存到dest_dir中 源码 from PIL import Image import os

  • Python无损压缩图片的示例代码

    每个设计师.摄影师或有图片处理需求小编,都会面临批量高清大图的困扰. 因为高清大图放到网站上会严重拖慢加载速度,或是有的地方明确限制了图片大小,因此,为了完成工作,他们总是需要先把图片压缩,再上传. 当需要处理的图片多至十张.百张.千张,则严重影响工作效率.这时候,就可以交给Python啦! 只需要20行Python代码,就可以批量帮你无损压缩数张照片. ---1--- 前期工作 安装Python中现成的图片处理模块,然后将图片打包好导入,用循环的方式自动化处理图片就可以了! ---2--- 运

  • python实现图片压缩代码实例

    前言 项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩 一:导入包 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,

  • python如何实现图片压缩

    本工具是通过将图片上传到第三方网站tinypng,进行压缩后下载,覆盖本地图片,tinypng是一个强大的图片处理网站,目前最可靠的无损压缩网站. 代码如下: import requests from idna import unicode from selenium import webdriver import time import os browser = webdriver.Firefox(executable_path='/Users/lyf/Library/Google/gecko

  • python使用pil进行图像处理(等比例压缩、裁剪)实例代码

    PIL中设计的几个基本概念 1.通道(bands):即使图像的波段数,RGB图像,灰度图像 以RGB图像为例: >>>from PIL import Image >>>im = Image.open('*.jpg') # 打开一张RGB图像 >>>im_bands = im.g etbands() # 获取RGB三个波段 >>>len(im_bands) >>>print im_bands[0,1,2] # 输出RG

  • python对gif图压缩的完美解决方案

    目录 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,无法上传. 文件大小: 本想自己找个免费的压缩工具,结果下载下来的工具不

  • 详解Python Matplot中文显示完美解决方案

    原因与现象 Matplot是一个功能强大的Python图表绘制库,很遗憾目前版本自带的字体库中并不支持中文字体.所以如果在绘制内容中需要显示中文,那么就会显示为方格字符. 解决办法 有一个较为完美的解决方案,通过扫描Matplot自带字体库以及系统字体库,寻找能够支持的中文字体,如果能够找到的话,就设置第一个为Matplot的字体熟悉. import matplotlib.pyplot as plt from matplotlib.font_manager import FontManager

  • Mac上Python使用ffmpeg完美解决方案(避坑必看!)

    目录 一.在系统中安装ffmpeg 二.配置环境变量 三.在Python中安装ffmpeg 四.配置文件让Python能够使用 总结 近期有个需要进行音频转码的小任务需要用到ffmpeg,安装和使用的过程中遇到了很多问题没有办法解决,从网上找了各种教程也是一言难近,本文二哥来梳理一下从0到1在Mac上使用ffmpeg. 一.在系统中安装ffmpeg 第一步需要在系统中安装ffmpeg,很多人都给出了使用brew命令进行下载的方案,在此说一下,多数人brew后都需要等n分钟,最后以报错告终,这种外

  • Android软键盘遮挡的四种完美解决方案

    一.问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入框被系统键盘遮挡了,大大降低了用户操作体验,这就是开发中非常常见的软键盘遮挡的问题,该如何解决? 二.简单解决方案 方法一 在你的activity中的oncreate中setContentView之前写上这个代码 getWindow().setSoftInputMode(WindowManage

  • Python实现平行坐标图的两种方法小结

    平行坐标图,一种数据可视化的方式.以多个垂直平行的坐标轴表示多个维度,以维度上的刻度表示在该属性上对应值,相连而得的一个折线表示一个样本,以不同颜色区分类别. 但是很可惜,才疏学浅,没办法在Python里实现不同颜色来区分不同的类别.如果对此比较在意的大神可以不要往下看了......... 上图是一个基于iris数据集所画的一个平行坐标图. 隔开隔开.......................................隔开隔开 不多扯了,下面正式上代码 方法一.基于pyecharts第三

  • Python 多个图同时在不同窗口显示的实现方法

    Python的matplotlib包可以轻松的将数据可视化,博主最近遇到了一个问题,博主想同时在两个窗口展示两张图,但是代码运行结果总是显示一张图,把当前的图删掉之后才能显示另一张图.网上找了一些解决方案都是把它们放在一个窗口中,两个图片分别为子图.经过一段摸索,博主终于解决了这个问题,下面简单介绍一下. 如下代码所示,首先要为每个图建立一个figure,这样每个图会单独显示在一个窗口中:然后等所有图代码都写好后在最后面加上plt.show(),这样每张图就可以在不同窗口中同时显示了. # 绘制

  • Python读取excel中的图片完美解决方法

    excel中有图片是很常见的,但是通过python读取excel中的图片没有很好的解决办法. 网上找了一种很聪明的方法,原理是这样的: 1.将待读取的excel文件后缀名改成zip,变成压缩文件. 2.再解压这个文件. 3.在解压后的文件夹中,就有excel中的图片. 4.这样读excel中的图片,就变成了读文件夹中的图片了,和普通文件一样,可以做各种处理. 解压后的压缩包如下: python脚本如下: ''' File Name: readexcelimg Author: tim Date:

  • python 绘制斜率图进行对比分析

    你好,我是林骥. 斜率图,可以快速展现两组数据之间各维度的变化,特别适合用于对比两个时间点的数据. 比如说,为了对比分析某产品不同功能的用户满意度,经过问卷调查和数据统计,得到下面这个调查结果: 你不妨自己先思考一下,如何对这组数据进行可视化,才能让信息传递变得更加高效? 下面是我用 matplotlib 制作的图表: 从图中可以直观地看出,功能 C 的用户满意度明显下降,我们用比较鲜明的橙色来表示,以便引起观众重点关注:功能 D 和功能 E 的用户满意度明显提升,我们用蓝色表示,代表数据正在向

  • Python数据结构之图的存储结构详解

    一.图的定义 图是一种比树更复杂的一种数据结构,在图结构中,结点之间的关系是任意的,任意两个元素之间都可能相关,因此,它的应用极广.图中的数据元素通常被称为顶点 ( V e r t e x ) (Vertex) (Vertex), V V V是顶点的有穷非空集合, V R VR VR是两个顶点之间的关系的集合(可以为空),可以表示为图 G = { V , { V R } } G=\{V,\{VR\}\} G={V,{VR}}. 二.相关术语 2.1 无向图 给定图 G = { V , { E }

  • Python搭建Gitee图床的示例代码

    目录 摘要 新建仓库 克隆仓库 获取TinyPng的"API Key" 安装需要的Python包 编写Python脚本 测试功能 摘要 在写博客的过程中经常要插入图片,许多博客平台提供了图片上传的服务,但是不能保证长期有效,不同平台还不能通用,所以要通过搭建统一的图床来实现.有用服务器作为图床和第三方图床,前者限制多,需要备案,后者不是很可靠,而用代码托管平台做图床,既稳定可靠没有很大限制,而且数据实现同步,即使云端的数据丢失了,本地还有备份,而在中国,为了提升访问速度,我们并不选取G

随机推荐