动画GIF大于源图像

时间:2015-09-28 09:14:55

标签: optimization imagemagick gif animated-gif

我正在使用imagemagick从~60张JPG 640x427像素照片中创建动画GIF。 JPG的总大小约为4MB。

然而,输出GIF约为12MB。 GIF是否有相当大的原因?我能想象到GIF大小约为4MB吗?

我正在使用的命令是:

convert -channel RGB # no improvement in size 
   -delay 2x10 \
   -size 640 \
   -loop 0 \
   -dispose Background # no improvement in size 
   -layers Optimize # about 2MB improvement 
   portrait/*.jpg portrait.gif

使用gifsicle似乎也没有改善。

2 个答案:

答案 0 :(得分:2)

JPG是有损压缩。 GIF是无损压缩。

更好的比较是首先将所有源图像转换为GIF,然后将它们组合起来。

GIF压缩的第一个谷歌热门是http://ezgif.com/optimize声称有损GIF压缩,可能对你有用,但我没有保修,因为我没有尝试过。

答案 1 :(得分:1)

JPEG通过(有损)变换实现压缩,其中16x16 / 8x8像素块被转换为频率表示然后量化。而不是选择例如每个组件有256级(即8位)的红色/绿色/蓝色,JPEG可以忽略某些频率成分,或者只使用1或2位来表示它们。

另一方面,GIF通过识别来自调色板图像(最多256个条目)的重复模式来工作,这些模式在先前编码/解码的流中完全 。由于JPEG压缩以及通常由JPEG(自然全彩色)编码的图像源,(长)精确匹配的概率非常低。

尺寸为640x427的60幅RGB图像约为1600万像素。要以4 MB表示那么多,需要每像素压缩2位。要用GIF实现这一目标,需要一种非常有损的算法,即选择(矢量)真彩色像素的量化而不是目标GIF调色板中最接近的像素,但也要根据这个特定选择的代码字的字典是多么好使。字典构建缓慢并达到2位/像素,解码后的代码字的平均长度必须映射到附近的5.5匹配像素。

相比之下,imagemagick已经能够将1600万像素(每个从256个元素的调色板中选择)压缩到75%!