GIFデータ・フォーマットの理解

2016年5月9日

テクノロジー ドキュメント

SWFデータ解析を行なっていると、画像ファイルのフォーマットにも詳しくならないといけない事が分かった。 とりあえず、jpegは、フォーマットの詳細まで理解しなくても、データのまま、SWFデータ内に登録されているが、 noneless(可逆圧縮)データのGIFとPNGデータについては、画像の色データや各種ヘッダ情報、GIFに至ってはアニメーション情報なども 存在するため、SWFデータからの復元を行う場合は、GIFデータをバイナリで構築できるようにならなければいけない。 簡易的だけど、色々なサイトでも書かれているGIFフォーマットを、僕が理解できたレベルで書いておきます。

GIFのデータ構造

大カテゴリは以下の3ブロックで構成される。 そのうち、「Extension-Blocks」と「Image-Blocks」はアニメーションなどのデータが入ると複数存在する事になる。
Header-Block Extension-Blocks (4 pattern) Image-Blocks Tarminate-block (1 byte) [0x3B]
更にサブカテゴリとして、書くブロックは以下のような構造になっている

Header-Block

Signature (3byte) [FWS or CWS]
Version (3byte) [87a or 89a]
Width (2byte)
Height (2byte)
Global Color Flag
(1bite)
Color Resolution
(3bite)
Sort Flag
(1bite)
Global Color Size
(3bite)
Pixel Ratio (1byte)
Global Color Table (n x 3byte)

Extension-Block (Graphic Control)

Extension Separator (1byte) [0x21]
Extension Label (1byte) [0xF9]
Block Size (1byte) [0x04]
Reserved
(3bite)
Disposal Mothod
(3bite)
User Input Flag
(1bite)
Transparent Color Flag
(1bite)
Delay Time (2byte)
Transparent Color Index (1byte)
Block Terminator (1byte) [0x00]

Extension-Block (Comment)

Extension Separator (1byte) [0x21]
Extension Label (1byte) [0xFE]
Block Size (1byte)
Comment Data (n byte)
Block Terminator (1byte) [0x00]

Extension-Block (Text Control)

Extension Separator (1byte) [0x21]
Extension Label (1byte) [0x01]
Block Size (1byte) [0x0C]
Text Grid Left Position (2byte)
Text Grid Top Position (2byte)
Text Grid Width (2byte)
Text Grid Height (2byte)
Character Cell Width (1byte)
Character Cell Height (1byte)
Text Foreground Color Index (1byte)
Text Background Color Index (1byte)
Block Size #2 (1byte)
Plain Text Data (n byte)
Block Terminator (1byte) [0x00]

Extension-Block (Application)

Extension Separator (1byte) [0x21]
Extension Label (1byte) [0xFF]
Block Size (1byte) [0x0B]
Application Identifier (8byte)
Application Authentication Code (3byte)
Application Data (n byte)
Block Terminator (1byte) [0x00]

Image-Block

Image Separator (1byte) [0x2c]
Left Position (2byte)
Top Position (2byte)
Width (2byte)
Height (2byte)
Local Color Flg
(1bite)
Interlace Flg
(1bite)
Sort Flag
(1bite)
Reserved
(2bite)
Size of Local Color Table
(3bite)
Local Color Table (n x 3byte)
LZW Minimum Code Side (1byte)
Block Size (1byte)
Image Data (n byte)
Block Terminator (1byte) [0x00]

各種リンク

GIFフォーマットの詳細

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ