イメージデータブロックはイメージデータに関する各種パラメターを保存したイメージ記述子と、イメージごとに異なったカラーテーブルを使用する場合にだけ存在するオプションのローカルカラーマップ、そしてビットマップイメージデータを保存したイメージデータから構成されていて、1つのGIFファイル中にいくつでも存在することができます。 このブロックは特殊ブロックと違い、どのバージョンでも使用できます。
オフセット | 内容(バイト数) |
---|---|
0 | イメージ記述子識別子(1) 固定値2CH |
1 | イメージの左端座標(2) ピクセル単位 |
3 | イメージの上端座標(2) ピクセル単位 |
5 | イメージの横幅(2) ピクセル単位 |
7 | イメージの高さ(2) ピクセル単位 |
9 | 色構造パラメター(1) |
イメージ記述子の開始を表す識別子で、常に固定値2CH(10進数では44)です。
論理画面の左端を基準とした時の、画像の左端をピクセル単位で表した値です。 通常は0ですが、0でない場合は画像が論理画面の左右にずれて表示されます。
論理画面の上端を基準とした時の、画像の上端をピクセル単位で表した値です。 通常は0ですが、0でない場合は画像が論理画面の上下にずれて表示されます。
画像の横幅と高さをピクセル単位で表した値です。
通常は論理画面と同じ値ですが、常に同じ値になるとは限りません。
ビット | |||||||
---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Local Color Table Flag (1) | Interlace Flag(1) | Sort Flag (1) | 予約済み (2) | Size of Local Color Table (3) |
色構造に関するローカルデータをビット単位でバイトにパックした領域で、左図のような構造をしています。
ローカルカラーテーブルの有無を示すビットで、ビットが1の場合には論理画面記述子のすぐ後にローカルカラーテーブルが存在し、0の場合にはローカルカラーテーブルは存在しません。
行番号 | インタレースパス | |||
---|---|---|---|---|
0 | 1 | |||
1 | 4 | |||
2 | 3 | |||
3 | 4 | |||
4 | 2 | |||
5 | 4 | |||
6 | 3 | |||
7 | 4 | |||
8 | 1 | |||
9 | 4 | |||
10 | 3 | |||
11 | 4 | |||
12 | 2 | |||
13 | 4 | |||
14 | 3 | |||
15 | 4 | |||
: | : |
画像がインタレースされているかどうかを表すビットで、ビットが0の場合はインタレースされておらず、1の場合はされています。 インタレースとは画像を上から順番に表示するのではなく、すだれ状に表示する方法で、昔からTV画像で用いられている表示法です。 この表示法ですと最初は全体像がぼんやりと表示され、それが次第にはっきりとしてきますので、データを転送しながら同時に表示するオンライン転送や、残像効果を利用したTV画像に向いています。
GIFのインタレース表示は次のように4パスで行われますので、画像データもその順番で保存されています。
ローカルカラーテーブルがソートされているがどうかを表すビットで、ビットが1の場合、ローカルカラーテーブルは使用頻度の高い色順にソートされており、0の場合は特にソートされていません。 このデータはLocal Color Table Flagが1の時しか意味を持ちません。
将来の拡張用予約領域で、通常は2ビットとも0になっています。
ローカルカラーテーブルのエントリ数を計算するためのデータで、この値に1を足した値で2をべき乗するとローカルカラーテーブルのエントリ数になります。 例えばこの値が7の場合、
となります。
このデータはLocal Color Table Flagが1の時しか意味を持たず、領域が3ビットしかありませんので0(=2色)から7(=256色)までの値しか表すことができません。
オフセット | 内容(バイト数) |
---|---|
0 | カラーテーブルエントリ0番の赤の値(1) 0-255 |
1 | カラーテーブルエントリ0番の緑の値(1) 0-255 |
2 | カラーテーブルエントリ0番の青の値(1) 0-255 |
: | : |
画像ごとに独自で使用するカラーマップの内容を保存したブロックで、イメージ記述子中のLocal Color Table Flagが1の時だけイメージ記述子の直後に1つだけ存在します。
カラーテーブルエントリ数Nは2(Size of Local Color Table + 1)であり、ブロック全体のバイト数は3×Nとなります。
ローカルカラーテーブルを持っていない画像データは、グローバルカラーテーブルを使用します。
オフセット | 内容(バイト数) |
---|---|
0 | LZW圧縮法の最小コードサイズ(1) ビット単位 |
1 | ブロックのバイト数(1) 1-255 |
2 | ビットマップイメージデータ(255以内) 圧縮データ |
: | : |
ブロック終了識別子(1) 固定値0 |
ビットマップイメージデータを保存したブロックで、GIFファイルの大部分を占めます。
可変長コードLZW圧縮における最小コードのビット数(初期コードサイズ)を表します。 GIFではビットマップイメージデータを非圧縮で保存することはできません。 通常、このデータはカラービット数(Color Resolusion+1)と同じ値ですが、カラービット数が1である2色カラー画像データの場合にはアルゴリズム上の制約により2となります。 このため、2色カラー画像の場合は固定長コードLZW圧縮法に比べて圧縮効率が若干悪くなります。
直後に続くビットマップイメージデータのバイト数で、1から255の間の任意の値です。
255バイト以内の、可変長コードLZW圧縮されたビットマップイメージデータです。 サブブロックバイト数とビットマップイメージデータからなるサブブロックは、イメージデータブロック中に必要な数だけ存在します。
イメージデータブロックの終了を表す識別子で、常に固定値0です。
オフセット | 内容(バイト数) |
---|---|
0 | GIFトレーラ(1) 固定値3BH |
GIFデータストリームの終わりを表す識別子で、常に固定値3BH(10進数では59)です。