玄関コンピュータの部屋各種解説コーナーCGファイル概説

(2) 付随的ブロック(Ancillary chunk)

付随的ブロックはイメージ表示に直接関係のないデータを含むブロックで、ファイル中に存在してもしなくてもかまいません。

1) bKGDブロック(Background color chunk)

オフセット内容(バイト数)
0データ長(4)
整数(1,2,6)
4ブロックタイプ(4)
固定値bKGD(624B4744H)
8パレットインデックス(1)
または
グレー値(2)
または
赤値(2)・緑値(2)・青値(2)
8+(データ長)CRC(4)
CRCコード

イメージを表示する時の省略時背景色を指定するブロックで、必要に応じてPLTEブロックとIDATブロックの間に1つだけ存在します。 ブロックデータはカラータイプに応じて次のようなデータとなります。

2) gAMAブロック(Image gamma chunk)

オフセット内容(バイト数)
0データ長(4)
固定値4
4ブロックタイプ(4)
固定値gAMA(67414D41H)
8ガンマ値(4)
実際のガンマ値×100000
12CRC(4)
CRCコード

イメージのガンマ値を保存したブロックで、必要に応じてPLTEブロックとIDATブロックの間に1つだけ存在します。 ブロックデータには実際のガンマ値を100000倍した値が、4バイトの符号無し整数として保存されています。 例えばブロックデータが125000でしたら、実際のガンマ値は1.25となります。

3) tRNSブロック(Transparency chunk)

オフセット内容(バイト数)
0データ長(4)
2,6,パレット数バイト以内
4ブロックタイプ(4)
固定値tRNS(74524E53H)
8グレー値(2)
または
赤値(2)・緑値(2)・青値(2)
または
パレット0〜(パレット数−1)のアルファ値(パレット数以内)
8+(データ長)CRC(4)
CRCコード

透明色扱いする色を保存したブロックで、必要に応じてPLTEブロックとIDATブロックの間に1つだけ存在します。 ブロックデータはカラータイプに応じて次のようなデータとなります。

カラータイプ0とカラータイプ2の場合、指定された色は完全に透明(アルファ値0)として扱われます。 カラータイプ3の場合、指定されなかったパレットについてはアルファ値が255(完全に不透明)として扱われますので、例えばパレットインデックス2の色を完全に透明色扱いするためには、次のように3バイト必要になります。

パレットインデックス0のアルファ値:255
パレットインデックス1のアルファ値:255
パレットインデックス2のアルファ値:0

普通、パレットごとのアルファ値を個別に指定することは非常に少なく、たいてい1色だけを完全に透明色扱いしますので、この指定方法はあまり効率的とは言えません。 カラータイプ4と6はピクセルごとにアルファチャネルを持っていますので、tRNSブロックは必要ありません。

4) tEXtブロック(Textual data chunk)

オフセット内容(バイト数)
0データ長(4)
1-65535
4ブロックタイプ(4)
固定値tEXt(74455874H)
8キーワード
ASCII文字列(1-79バイト)
 ヌル文字分離子
固定値0
 テキスト
ASCII文字列(0-65455バイト)
8+(データ長)CRC(4)
CRCコード

テキスト情報を保存したブロックで、必要に応じてIHDRブロックとIENDブロックの間に1個以上存在します。 ブロックデータはヌル文字で区切られたキーワードとテキストからなっていて、同じキーワードで1つ以上のブロックが存在することもあります。 キーワードは1文字以上79文字以下のASCII文字、テキストは0文字以上65455文字以下のASCII文字で、どちらも漢字は使用できません。

現在のところ、キーワードには次のようなものがあります。

5) その他の付随的ブロック

ブロックタイプ存在場所個数内容
cHRMPLTEとIDATの間最重要な色度と白色点
hISTPLTEとIDATの間パレットの使用頻度
pHYsIDATの前イメージの物理的なアスペクト比と単位
sBITPLTEとIDATの間重要なビット
tIME特に指定なし最終更新時刻
zTXt特に指定なし複数可圧縮テキスト情報

これ以外にも多くの付随的ブロックがありますが、それらは使用頻度が低いので簡単な表にまとめておきます。