GIFアニメか、ただのGIF画像かどうかを判定するために、画像内のデータを解析してみました。
一般的なGIFアニメの使用はこうなっているらしいです。
GIF Header
Application Extension
Graphic Control Extension
Image Block
Graphic Control Extension
Image Block
(Graphic Control ExtensionとImage Blockの組み合わせが続く)
:
:
Trailer
GIFアニメの場合はGIF Headerの次にApplication Extensionというブロックがあるらしいんですが、Application Extensionが開始されるという意味の固定値を頼りに解析してみると、固定値があったりなかったりの画像が出てきたのでなんだろと思っていたら、どうやらApplication ExtensionはGIFアニメが無限ループ設定になっているときに付随されるブロックらしいという事がわかりました。
そして、GIFアニメじゃない普通のGIF画像にもApplication Extensionの値が存在する場合があるんで、この値は判別の値にはなり得ない事がわかりました。
GIFアニメの1フレームごとに存在するGraphic Control Extensionブロックの固定値(0x21 0xf9 0x04)を頼りに解析してみると成功しました。
Graphic Control Extensionブロックの固定値 = 画像フレーム数
という事なので、Graphic Control Extensionブロックの固定値が1つ以上あるものはGIFアニメだという事です。
今のところうまくいってるんで、たぶんこれでOKかな(・e・)
参考ページ