我正在使用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
似乎也没有改善。
答案 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%!