付随的ブロックはイメージ表示に直接関係のないデータを含むブロックで、ファイル中に存在してもしなくてもかまいません。
オフセット | 内容(バイト数) |
---|---|
0 | データ長(4) 整数(1,2,6) |
4 | ブロックタイプ(4) 固定値bKGD(624B4744H) |
8 | パレットインデックス(1) または グレー値(2) または 赤値(2)・緑値(2)・青値(2) |
8+(データ長) | CRC(4) CRCコード |
イメージを表示する時の省略時背景色を指定するブロックで、必要に応じてPLTEブロックとIDATブロックの間に1つだけ存在します。 ブロックデータはカラータイプに応じて次のようなデータとなります。
オフセット | 内容(バイト数) |
---|---|
0 | データ長(4) 固定値4 |
4 | ブロックタイプ(4) 固定値gAMA(67414D41H) |
8 | ガンマ値(4) 実際のガンマ値×100000 |
12 | CRC(4) CRCコード |
イメージのガンマ値を保存したブロックで、必要に応じてPLTEブロックとIDATブロックの間に1つだけ存在します。
ブロックデータには実際のガンマ値を100000倍した値が、4バイトの符号無し整数として保存されています。
例えばブロックデータが125000でしたら、実際のガンマ値は1.25となります。
オフセット | 内容(バイト数) |
---|---|
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バイト必要になります。
普通、パレットごとのアルファ値を個別に指定することは非常に少なく、たいてい1色だけを完全に透明色扱いしますので、この指定方法はあまり効率的とは言えません。
カラータイプ4と6はピクセルごとにアルファチャネルを持っていますので、tRNSブロックは必要ありません。
オフセット | 内容(バイト数) |
---|---|
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文字で、どちらも漢字は使用できません。
現在のところ、キーワードには次のようなものがあります。
ブロックタイプ | 存在場所 | 個数 | 内容 |
---|---|---|---|
cHRM | PLTEとIDATの間 | 1 | 最重要な色度と白色点 |
hIST | PLTEとIDATの間 | 1 | パレットの使用頻度 |
pHYs | IDATの前 | 1 | イメージの物理的なアスペクト比と単位 |
sBIT | PLTEとIDATの間 | 1 | 重要なビット |
tIME | 特に指定なし | 1 | 最終更新時刻 |
zTXt | 特に指定なし | 複数可 | 圧縮テキスト情報 |
これ以外にも多くの付随的ブロックがありますが、それらは使用頻度が低いので簡単な表にまとめておきます。