PNG の圧縮手法 0 (現在 PNG で定義されている唯一の圧縮手法)はスライド窓が最大 32768-byte の deflate/inflate 圧縮を指定します。Deflate 圧縮は zip, gzip, pkzip, 関連のプログラムに派生して使われている LZ77 です。広域な調査によってそれが特許的に問題がない状況であるということが支持されています。移植性のある C による実装が自由に利用可能です。
PNG における Deflate 圧縮されたデータストリームは以下の構造を持つ "zlib" フォーマットによって保存されます:
Compression method/flags code: 1 byte Additional flags/check bits: 1 byte Compressed data blocks: n bytes Check value: 4 bytes
このフォーマットについての詳細は zlib 仕様書 [RFC-1950] で得られます。
PNG の圧縮手法が 0 のとき、zlib の圧縮手法のフラグコードは手法コード 8 ("deflate" 圧縮)で指定される必要があり、LZ77 の窓サイズは 32768-byte よりおおくてはい けません。zlib 圧縮の手法ナンバーは PNG の圧縮手法ナンバーと同じではないことに注意してください。追加フラグではプリセット辞書を指定してはいけません。PNG デコーダはこれらの追加規約を満足した適正な zlib データストリームならなんでも伸張できる必要があります。
圧縮するデータが 16384-byte 以下ならば、エンコーダは窓サイズを 2 の累乗(最小 256)で丸めて設定することができます。これは圧縮率が不利になることなくエンコーダばかりではなくデコーダにとっても必要とするメモリを減らします。
zlib のデータストリームに圧縮されたデータはそれぞれが生の(圧縮されていない)データ、静的ハフマンコードでエンコードされた LZ77 圧縮されたデータ、もしくはカスタムハフマンコードでエンコードされた LZ77 圧縮されたデータで表現できる連続したブロックとして保存されます。最終ブロックビットで最後のブロックを確認でき、デコーダは圧縮されたデータストリームの終わりを認識できます。圧縮アルゴリズムとエンコードの詳細は deflate 仕様書 [RFC-1951] に与えられます。
zlib のデータストリームの最後に保存されるチェック値はデータストリームの圧縮されていないデータで計算されます。PNG のチャンクのチェック値に使われる CRC 計算とそのアルゴリズムが同じではないことに注意してください。zlib のチェック値は deflate と inflate のアルゴリズムが間違いなく実装されているかどうかのクロスチェックに主に使われます。チャンクの CRC を検証することは、転送時の損害を PNG ファイルが受けていないかどうかの十分な信用を提供します。
PNG ファイルでは、すべての IDAT チャンクの連続した内容は、上で指定された zlib のデータストリームを構成します。このデータストリームはこの文書のどこかに記述されているようなフィルタリングされたイメージのデータに伸張されます。
IDAT チャンク同士の間の境界は自由であり、zlib のデータストリームのどこにでも持ってくることができます。IDAT チャンクの境界と deflate ブロックの境界やそのほかの zlib データの特徴の間には関連性は必要ありません。たとえば、zlib のチェック値をまたがるような IDAT チャンクも完全に可能です。
同様の文脈から、イメージデータの構造(すなわちスキャンラインの境界)と deflate ブロックの境界や IDAT チャンクの境界に関係は必要ありません。完全なイメージデータはいくつかの IDAT チャンクに保存される単一の zlib のデータストリームによって表現されます。デコーダがこれ以上の仮定をしてしまうのは誤りです。(もちろん、ファイルを生成するいくつかのエンコーダの実装はそれらの構造に確かに関連しているでしょう。しかし、デコーダはそれを当てにすることはできません)。
PNG は iTXt, zTXt, iCCP チャンクで zlib のデータストリームを使い、圧縮手法バイト以下のチャンクの残りは上で定義したような zlib のデータストリームです。イメージデータと異なり、そのようなデータストリームはチャンクで分割されることはありません。iTXt, zTXt, iCCP のそれぞれのチャンクは独立した zlib のデータストリームを格納します。
追加文書と移植可能な deflate と inflate の C のコードは Info-ZIP のアーカイブ ftp://ftp.cdrom.com/pub/infozip/ から利用可能です。