- アニメーションGIFの速度をできるだけ速くするには、"Frame Delay" を "10ms" ではなく "20ms" に指定する必要がある。なぜだろうか?
- GIF 89a からアニメーションがサポートされるようになった
- 各フレームごとにディレイを設定可能
- 次のフレームへ進む前に待機する時間を 100 分の 1 秒(10ms)単位で表現
- 0 ~ 0xffff(約 10 分のディレイ)まで設定可能
- 0 を設定すると何が起きるのか? 仕様には正確な答えはないが、2 つのことが明記されている
- GIF デコード時に各フレームはディレイなしで処理されるべき
- ディレイ値は 0 でないときにのみ使用される
- つまり 0 に指定すると、"前のフレームと結合されて静止画像として処理" されるべき
- こうすると、動いている部分だけを保存したフレームを入れてサイズを減らせる
- 問題は、誰も 0 ディレイをサポートしていないこと
→ GIF をサポートするほとんどのプログラムは、2(20ms)以下の値をそれ以上の値に固定する
- QT は IE/FF に合わせている : (delay < 2 ? 10: delay) * 10
- Chrome は FF に合わせている : 点滅する広告が 0 を使うのを防ぐため、10ms 以下に指定されたものは 100ms にする
- FF は IE と Opera に合わせている : 0~10 の場合は 100ms に調整
- IE 5 は Netscape が遅かったためそれに合わせている : 50 以下の場合は 100 に固定
- 上記コードの共通点は、0~1 を 2 に合わせるのではなく 10(100ms)に合わせていること
結論
- 誰も GIF の仕様どおりにレンダリングしていないが、そうすべきだと思う(IMO)
- 現在、最速の GIF を得るには 1(10ms)ではなく 2(20ms)を指定すること
- もし誰もが GIF 仕様を正しく実装すれば
- 10ms ディレイの GIF をサポートできるようになる
- GIF アニメーションの単一フレームで 256 色を超える色をサポートできる
- 小さなディレイ値を与えると遅くなるという混乱をなくせる
- フレームごとに更新された領域だけを持つ GIF を作って圧縮率を改善できる
まだコメントはありません。