Python 对 gif 进行压缩

2017-07-12 11:33:41 +08:00
 lihsen

如题,如何对gif进行压缩。

我一开始想到的办法是利用pillowgif中的每一帧的取出来,对单帧图片进行压缩后,再调用方法将压缩后的保存回去,但是最后得到的gif没有变小,反而变大了。

后来我对单帧图片保存为pnggif格式,明显gif格式比png格式的大小要大多了,对图像编码这一块不是很了解,有知道原因的吗?或者有知道别的对gif进行压缩的办法。。。

9309 次点击
所在节点    Python
25 条回复
Thiece
2017-07-13 17:13:42 +08:00
可以参考一下 jayxon 的这篇答案 https://www.zhihu.com/question/27201109/answer/146046671
Thiece
2017-07-13 17:16:48 +08:00
我对 GIF 没有深入的研究过,以下内容仅为猜测;是否是类似视频的 B,I,P 帧呢?在源文件时 GIF 把前后帧相同的区块共用了,但是单独拆帧压缩让前后帧的相同区块破坏掉了。
lihsen
2017-07-14 22:12:21 +08:00
花了几天没找到很好的解决办法,压缩必定是要牺牲一些的,要么减少帧数,要么对每帧进行一些重复的区域的处理,第二种方案还没有时间试过。在用 pillow 提取帧再组合帧的时候,发现每一帧上多出了个 local color table,感觉是这个增加了大小,但是还没找到办法去除掉。。。
lihsen
2017-07-14 22:14:19 +08:00
@lxy 文章讲得挺好的,提供了很多思路
zouchtssn
2018-08-01 20:53:51 +08:00
不知道是否会挖坟,不过调用 gifsicle 来进行优化得到的结果还不错。
可以将依赖的二进制文件一并放在工程中。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/374730

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX