PNGの規格
現在Third EditionのDraftが作成中 extensionsの規格の最新版は、libpngにあるv1.4ではなく、↓のようだ
構造
89 50 4E 47 0D 0A 1A 0A
"\x89PNG\r\n\x1A\n"
\x89はUTF-8でencodeすると\xc2\x89に変わってしまうので、TextEncoderによる比較は不能 8 byteで構成されている
Length: Chunk Dataの長さ
0<=Length<2^31, 4bytes
Chunk Type
4文字(4bytes)で指定される
Chunk Data
CRC: Chunk TypeからChunk Dataまでのデータの巡回冗長検査 case sensitiveで、大文字か小文字かにも情報が含まれている
大文字=0,小文字=1で1bitの情報とみなし、前から順に次のように名付けられている
1. Ancillary bit
0: Critical chunk (必須chunk)
かならず解釈できないといけない
1: Ancillary chunk (補助chunk)
知らないものは無視していい
このシステムを使って、APNGなどの独自拡張をいくらでも作れる 2. Private bit
0: Public chunk
specなどで定義されたchunk
1: Private chunk
好き勝手に自由なchunkにしていい
3. Reserved bit
将来の拡張のための予約
今のところ常に0
4. Safe-to-copy bit
0: unsafe to copy
1: safe to copy
cHRM Primary chromaticities and white point iCCP Embedded ICC profile sRGB Standard RGB colour space zTXt Compressed textual data iTXt International textual data pHYs Physical pixel dimensions tIME Image last-modification time 正規表現で書くのは難しそう
その中で
ただし連続して出現すること。間に他のchunksを挟んではならない
colour type=2,6のときは0~1回
colour type=0,4のときは0回
code:txt
(
)
filtering
encoderの必須・推奨仕様
decoderとviewerの必須・推奨仕様
歯抜けのピクセルデータを先に返して、順次間のピクセルデータを渡す
低解像度の画像を先に写すことで、ロード体験を改善できる
GIF animationがわかりやすい
v1.2の日本語訳