最近要做 GIF 的显示, 在解析 GIF 源文件的时候发现 GIF 的图片时间控制有两个 DelayTime&UnclampedDelayTime 延时, 所以想要了解下这两个的用处和区别.
很多 GIF 图片为了得到最快的显示速度会把 duration 设置为 0, 浏览器在显示他们的时候为了性能考虑就会给他们减速(clamp), 因为很多 GIF 都是无限循环播放的.
在看很多获取 duration 的源码, 逻辑都是先获取 UnclampedDelayTime, 如果没有就取 delayTime, 如果这个值太小就设置为 0.1. 据说 RFC 规定的是不能少于 40ms.
kCGImagePropertyGIFDelayTime 是以秒为单位的时间度量, 表示在图片序列中等待下一帧图片显示的时间. 如果时间少于 50ms, 那么实际上存储的时间实际上是 100ms.
kCGImagePropertyGIFUnclampedDelayTime 时间度量, 单位为秒, 表示在动画序列中等待下一帧图片显示的等待时间. 该值可能是 0ms 或者稍高. 和 DelayTime 的区别就是这个值不会在数据下限(比如 50 ms 以下), 减速显示.
实际上这两个值怎么取舍还是存疑, depends on the cat.
抛砖引玉, 请教了.