generated at
PNGの規格
pngの規格
2024-10-20時点の最新のpng規格はISO/IEC 15948:2003PNG Documentation
現在Third EditionのDraftが作成中


extensionsの規格の最新版は、libpngにあるv1.4ではなく、↓のようだ
EXIF eXIF chunkの定義がある

構造
PNG file signatureと、それに続くPNG Chunkの配列のみで構成されている

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


specで定義されているPNG Chunks
IHDR Image header
PLTE Palette
IDAT Image data
IEND Image trailer
tRNS Transparency
cHRM Primary chromaticities and white point
gAMA Image gamma
iCCP Embedded ICC profile
sBIT Significant bits
sRGB Standard RGB colour space
tEXt Textual data
zTXt Compressed textual data
iTXt International textual data
bKGD Background colour
hIST Image histogram
pHYs Physical pixel dimensions
sPLT Suggested palette
tIME Image last-modification time
正規表現で書くのは難しそう
IHDRが必ず先頭、IEND必ず末尾にくる
その中で
zTXt,tEXt,iTXtはどこにでも0回以上出現していい
tIMEはどこにでも0~1回出現していい
IDATはどこにでも1回以上出現していい
ただし連続して出現すること。間に他のchunksを挟んではならない
PLTEIDATの前方ならどこにでも出現していい
colour type=3 (index color)のときは1回
colour type=2,6のときは0~1回
colour type=0,4のときは0回
cHRM,gAMA,sBIT,iCCP,sRGBPLTEIDATの前方ならどこにでも0~1回出現していい
うち、iCCP,sRGBはどちらか一方しか出現できない
bKGD,hIST,tRNSPLTEIDATの間ならどこにでも0~1回出現していい
pHYsPLTEのないIDATの前方ならどこにでも0~1回出現していい
sPLTPLTEのないIDATの前方ならどこにでも0~1回出現していい
txt
[IHDR]( ([zTXt]|[tEXt]|[iTXt])* [tIME]? ([zTXt]|[tEXt]|[iTXt])* ( ([cHRM]|[gAMA]|[sBIT]|[iCCP]|[sRGB])?([PLTE]([bKGD]|[hIST]|[tRNS])?)? |[pHYs]? |[sPLT]* )[IDAT]+ ([zTXt]|[tEXt]|[iTXt])* [tIME]? ([zTXt]|[tEXt]|[iTXt])* )

filtering

encoderの必須・推奨仕様
decoderとviewerの必須・推奨仕様

歯抜けのピクセルデータを先に返して、順次間のピクセルデータを渡す
低解像度の画像を先に写すことで、ロード体験を改善できる
GIF animationがわかりやすい
Adam7 algorithmを使っている


v1.2の日本語訳

#2024-10-29 08:47:50
#2024-10-23 09:35:43
#2024-10-20 08:10:45
#2024-10-18 23:19:07