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