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
がある。
実装例
そのうち更新予定