雑多なブログ

音楽や語学、プログラム関連の話題について書いています

アニメーションGIFのファイルを判定する方法

GIFのファイル構造

バイナリーを解析して判定する方法について調べた。
GIFのファイル構造は次の通り。それぞれのデータのまとまりをブロックと呼ぶ。

ファイル構造
GIF Header
Application Extension
Graphic Control Extension
Image Block
:
Graphic Control Extension
Image Block
Trailer

アニメーションGIFの判定には次の2種類のブロックを用いる。

  • GIF Header
  • Graphic Control Extension

まず、GIF Header で、"GIF89a" 形式かどうかで対象を絞り込み、次に Graphic Control Extension が複数登場するかどうか判定する事でアニメーションGIFかどうか判定する。

なお、Application Extension については、通常の静止画のGIFの場合でも含まれているケースがあるため、判定には使用できないようだ。


GIF Header

先頭に固定値 0x47 0x49 0x46 0x38 0x39 0x61 があり、
0x47 0x49 0x46 0x38 0x39 0x61 は ASCII文字で GIF89a である。

ブロック: Graphic Control Extension

先頭に 0x21 0xf9 0x04 があり、ブロックの終端に 0x00 がある。

実装例

そのうち更新予定