2021/10/1公開
 リストPNG(List PNG)とは,画像フォーマットであるPNG形式を利用して固定長レコードデータを扱うためのフォーマットです.
 リストPNGはデータPNGの概念に含まれるものです.単体でも使用できるフォーマットですが,点群PNGのような派生フォーマットを作成して使用することもできます.

ファイルフォーマット

 ファイルフォーマットはウェブブラウザーで一般的に利用できる画像フォーマットであるPNG(Portable Network Graphics, ISO/IEC 15948:2004)を使用し,PNGのカラータイプはRGBが利用できる以下のいずれかを使用します.

データ型

 リストPNGでは個々の数値データを1つまたは複数のピクセルに変換して使用します.仕様上定義されるデータ型には以下の5種類があるほか,任意のデータ型を定義して使用することができます.
データ型ピクセル数
RGB1ピクセル
符号無し整数24ビット符号無し整数1ピクセル
48ビット符号無し整数2ピクセル
符号付き整数24ビット符号付き整数1ピクセル
48ビット符号付き整数2ピクセル
 RGBでは,1ピクセルのRGB値をそのままバイト列として取得します.
 24ビット符号無し整数では,1ピクセルのRGB値(r,g,b)から以下の式で値(v)を取得します.
v=216r+ 28g+b
 48ビット符号無し整数では,2つのピクセルのRGB値,第1ピクセル (r1,g1,b1)及び第2ピクセル(r2,g2,b2)から以下の式で値(v)を取得します.
v= 240r1+ 232g1+ 224b1+ 216r2+ 28g2+ b2
 24ビット符号付き整数では,1ピクセルのRGB値(r,g,b)から以下の式で値(v)を取得します.
r'= { r, (r<27) r-28, (r27)
v=216r'+ 28g+b
 48ビット符号付き整数では,2つのピクセルのRGB値,第1ピクセル(r1,g1,b1)及び第2ピクセル(r2,g2,b2)から以下の式で値(v)を取得します.
r1'= { r1, (r1<27) r1-28, (r127)
v= 240r1'+ 232g1+ 224b1+ 216r2+ 28g2+ b2
 不透明度を使用する場合は255(最大値)を指定することを推奨します.不透明度に0が指定された場合,そのピクセルを含むデータは無効値として扱います.

ピクセルの配置

 値を表す各ピクセルは画像内に通常のラスタースキャン順で配置します.すなわち,画像の左上端から開始してまず右方向へ配置し,右端に達したら1行下の左端に移動してまた右方向へ配置します.これを配置するデータが無くなるまで繰り返します.
 配置する情報は,先頭の0個または1個のヘッダーと,それに続く0個以上のレコードからなります.ヘッダーに使用するピクセル数は可変で,これをヘッダー長と呼びます.各レコード情報に使用するピクセル数はファイル内で同一でなければならず,これをレコード長と呼びます.
 なお,PNGの圧縮効率を上げるために,画像サイズの幅はレコード長の整数倍でなければなりません.

ヘッダー

 ヘッダーは,タイプ,ヘッダー長,レコード長,レコード数,サブタイプ,カラム定義リストなどのフィールドからなります.構造および配置順序は以下の通りです.
フィールド名ピクセル数データ型内容
type1RGBバージョンや派生タイプなど
R: リストPNGバージョン依存番号, 現在は0に固定
G: 派生フォーマット識別子, 0:未定義,1: 点群PNGメインファイル
B: 派生フォーマットバージョン依存番号
 (派生フォーマットで規定されます)
headerLength124ビット符号無し整数ヘッダー長(ピクセル数)
recordLength124ビット符号無し整数レコード長(ピクセル数)
recordCount248ビット符号無し整数レコード数
subType1RGB派生フォーマット内の細分などで使用,省略可
(派生フォーマットで規定されます)
columnDefList任意0個以上のカラム定義の並びカラム定義のリスト,省略可
 subTypeフィールドおよびcolumnDefListフィールドは省略可ですが,subTypeフィールドを省略してcolumnDefListフィールドのみを使用することはできません.
 columnDefListより以降のフィールドはユーザー定義フィールドで,使用方法は任意です.

カラム定義

 各カラム定義はcolumnInfoとcolumnOffsetの二つのフィールドをこの順で持つことができ,columnOffsetは使用しない場合は省略されます.
フィールド名ピクセル数データ型内容
columnInfo1RGB R:
(上位4ビット)カラムデータ型,0:未定義,1:RGB,2:符号無し整数,3:符号付き整数
(下位4ビット)カラムピクセル数, 範囲は1~2
G: オフセットピクセル数, 符号無し8ビット整数,範囲は0~2
B: 係数常用対数,符号付き8ビット整数,範囲は-128~127
columnOffset1または2符号付き整数オフセット値
(ピクセル数はcolumnInfoのカラムピクセル数で指定されます)

レコード

 ヘッダーのrecordLengthフィールドで指定されたピクセル数のピクセルからなります.
 レコード内の配置は,ヘッダーのカラム定義リストの指定に従います.カラム定義リストで記述された順番に,レコードの先頭から定義が割り当てられます.カラム定義の数がレコード内のカラム数に満たない場合は,以降のカラムの使用法は別の方法で与えられる必要があります.カラム定義が取得できない場合は,デフォルト値として(3*16+1,0,0,24ビット符号付き整数,オフセット0,係数常用対数0)を使用します.ただし,このデフォルト値は派生フォーマット内で変更される可能性があります.

取得値の復元

 各カラムから取得される整数値は,ヘッダーで指定されている係数常用対数とオフセット値を使用して,元データに復元して使用されます.
 係数常用対数は,座標値を割る係数の常用対数(10を底とする対数)を表します.例えばこの値が4の場合は,10000で割って元データに変換することを表し,元データの小数点以下4桁までが保持されていることになります.
 係数常用対数がf, オフセット値がsのとき,取得値v0(整数)から復元値vを求める変換式は以下のようになります.
v=(v0+s) /10f

サブタイプ,カラム定義リストの省略と派生フォーマット

 ヘッダーのサブタイプとカラム定義リストは省略可であり,派生フォーマットでは必ずしもこれらを使う必要はありません.派生フォーマットでは,一部のカラム定義は固定されいてヘッダー内での記述が不要であったり,この仕様の定義方法では十分なカラム定義ができない可能性もあります.そのような場合は,この仕様のサブタイプやカラム定義を記述しなかったり,さらに別の仕様でヘッダーの第6ピクセル以降を定義して使用することも可能です.

データ範囲外

 画像の末端部の配置するレコードが存在しないピクセルの色は規定しません.