2015-09-28 72 views
1

我使用imagemagick创建了〜60张JPG 640x427px照片中的动画GIF。 JPG的总大小约为4MB。动画GIF大于源图像

但是,输出GIF是〜12MB。 GIF相当大是有原因的吗?我可以想像达到〜4MB的GIF大小吗?

我使用的命令是:

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似乎没有任何改善。

回答

1

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

GIF的工作原理是从调色板图像(高达256个条目),则先前编码/解码的流中发生恰好识别重复的图案。由于JPEG压缩以及通常由JPEG(自然全彩色)编码的图像源,(长)精确匹配的概率非常低。

60个大小为640x427的RGB图像大约为1600万像素。要在4 MB内表示这么多,需要每像素2位的压缩。要用GIF来实现这一点,需要一个非常有损耗的算法,它将选择(向量)真彩色像素的量化,而不是目标GIF调色板中最接近的像素,但也基于这个特定选择将有多好的码字词典使。字典缓慢建立并达到2位/像素,解码码字的平均长度必须映射到邻近邻域中的5.5匹配像素。

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

+0

这很有道理,谢谢。下一个问题不言而喻 - 是否存在与支持动画的JPEG相当的有损性能? – gozzilli

+1

Google for MJPEG。 M表示Motion,可以通过连接JPG文件(Stereographic“multi-jpeg”是一个示例)和编码图像之间的增量(原始MJPEG)来实现。 –

2

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

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

首款谷歌命中为GIF压缩是http://ezgif.com/optimize声称有损GIF compresion,可能为你工作,但我没有提供保修,因为我还没有尝试过。