15 ポイント 投稿者 xguru 2022-02-23 | まだコメントはありません。 | WhatsAppで共有
  • アニメーション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)に合わせていること
    • つまり、10 は 100 と同じで、20 が最速

結論

  • 誰も GIF の仕様どおりにレンダリングしていないが、そうすべきだと思う(IMO)
  • 現在、最速の GIF を得るには 1(10ms)ではなく 2(20ms)を指定すること
  • もし誰もが GIF 仕様を正しく実装すれば
    • 10ms ディレイの GIF をサポートできるようになる
    • GIF アニメーションの単一フレームで 256 色を超える色をサポートできる
    • 小さなディレイ値を与えると遅くなるという混乱をなくせる
    • フレームごとに更新された領域だけを持つ GIF を作って圧縮率を改善できる

まだコメントはありません。

まだコメントはありません。