2015-09-28 71 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,可能爲你工作,但我沒有提供保修,因爲我還沒有嘗試過。