読者です 読者をやめる 読者になる 読者になる

mizdra's blog

ぽよぐらみんぐ

GIFの仕様書を読んで分かったことなどのメモ

とりあえず、分かったことをメモしてみます。自分が忘れないようにするためですが…。 1. Image Descriptorが存在した場合のブロックの配置です。 一部のブロックには、「(随意)」と記述していますが、Image Descriptorの存在自体が随意ですので、もし、Image Descriptorが存在しなければ、これらのブロックは全て存在しません。 大事なことは、Image Descriptorが存在した場合であるということです。 -------------------- *start ...その他の拡張ブロック... (随意) ↓ Graphic Control Extension (随意, 透過・アニメーションの遅延時間を設定する際に存在する) ↓ ...その他の拡張ブロック... (随意) ↓ Image Descriptor ↓ Local Color Table (随意, Image Descriptorによって存在が定義される) ↓ Table Based Image Data ↓ ...その他の拡張ブロック... (随意) *startへ戻る。一般的に、この一連の流れで出現するブロックをまとめてフレームと呼ぶ。(ただし、その他の拡張ブロックは別として考える) -------------------- 2. 拡張ブロックがどのくらい存在するかを例で表します。 -------------------- >基本情報 (Headerなど) >基本情報 ここまで< ↓ Application Extension ↓ Application Extension ↓ >フレーム1 Graphic Control Extension ↓ Image Descriptor ↓ Table Based Image Data >フレーム1 ここまで< ↓ Comment Extension ↓ >フレーム2 Graphic Control Extension ↓ Image Descriptor ↓ Table Based Image Data >フレーム2 ここまで< ↓ Comment Extension ↓ Plain Text Extension ↓ >フレーム3 Graphic Control Extension ↓ Image Descriptor ↓ Table Based Image Data >フレーム3 ここまで< ↓ Comment Extension ↓ Plain Text Extension ↓ Plain Text Extension ↓ Comment Extension ↓ (終了 Trailer) つまり、(Graphic Control Extensionを除く)拡張ブロックは、いくつでも連続して存在する場合があるという事です。 また、総フレーム数を上回る数が存在する可能性もあり、各フレームに最大1種類ずつの拡張ブロックが存在するとは言えません。 3. フレームの構造は以下の通りです。(1でも紹介しましたが、一応わかりやすくまとめておきます) Graphic Control Extension (随意, 透過・アニメーションの遅延時間を設定する際に存在する) ↓ ...その他の拡張ブロック... (随意) ↓ Image Descriptor ↓ Local Color Table (随意, Image Descriptorによって存在が定義される) ↓ Table Based Image Data 最後に… 随時、メモしたいことがあったら追加していきます。