最近要做 GIF 的顯示, 在解析 GIF 源文件的時(shí)候發(fā)現(xiàn) GIF 的圖片時(shí)間控制有兩個(gè) DelayTime&UnclampedDelayTime 延時(shí), 所以想要了解下這兩個(gè)的用處和區(qū)別.
很多 GIF 圖片為了得到最快的顯示速度會(huì)把 duration 設(shè)置為 0, 瀏覽器在顯示他們的時(shí)候?yàn)榱诵阅芸紤]就會(huì)給他們減速(clamp), 因?yàn)楹芏?GIF 都是無(wú)限循環(huán)播放的.
在看很多獲取 duration 的源碼, 邏輯都是先獲取 UnclampedDelayTime, 如果沒(méi)有就取 delayTime, 如果這個(gè)值太小就設(shè)置為 0.1. 據(jù)說(shuō) RFC 規(guī)定的是不能少于 40ms.
kCGImagePropertyGIFDelayTime 是以秒為單位的時(shí)間度量, 表示在圖片序列中等待下一幀圖片顯示的時(shí)間. 如果時(shí)間少于 50ms, 那么實(shí)際上存儲(chǔ)的時(shí)間實(shí)際上是 100ms.
kCGImagePropertyGIFUnclampedDelayTime 時(shí)間度量, 單位為秒, 表示在動(dòng)畫(huà)序列中等待下一幀圖片顯示的等待時(shí)間. 該值可能是 0ms 或者稍高. 和 DelayTime 的區(qū)別就是這個(gè)值不會(huì)在數(shù)據(jù)下限(比如 50 ms 以下), 減速顯示.
實(shí)際上這兩個(gè)值怎么取舍還是存疑, depends on the cat.
拋磚引玉, 請(qǐng)教了.