Portable Network Graphics
ファイルヘッダに続いて、チャンクと呼ばれる複数のデータブロックが続く。各チャンクは画像についての様々な情報を保持するもので、必須チャンクと補助チャンクに分けられる。補助チャンクは任意的なもので、処理プログラム側によっては必ずしも処理されない。このチャンク構造により、PNGフォーマットは拡張性と前方互換性を両立する。
チャンクの構造は、
チャンクサイズ。ビッグエンディアン(4バイト)
チャンクの種類(4バイト)
実際のデータ
データのCRC-32(4バイト)
の順番で配置される。
チャンクの種類は、大文字と小文字が区別されるアルファベット4文字で表される。
1 文字目が大文字のときは、必須チャンクに分類される。必須チャンクには、その画像ファイルを読み込むために必要な情報が含まれ、デコーダが解析不可能な必須チャンクに遭遇した場合、エラーとなる。
2 文字目の大文字小文字は、そのチャンクがパブリックかプライベートかを示す。大文字がパブリック。パブリックチャンクはその仕様が公開、定義されたもので、公開チャンクともいう。
3 文字目は将来的な拡張のためにリザーブされている。現在は常に大文字にしなければいけない。
4 文字目の大小は、そのチャンクがそのままコピーできるかどうかを示す。小文字の場合、ファイルへの変更内容に関わらず、そのチャンクをコピーして継続的に使用できる。大文字の場合、他の必須チャンクへの変更の影響を受けることを表す。
真上のバイトとの差をとる。
正しくエンコード処理を行ってメタデータを含まないように作成したPNG画像は、同じように処理して作成したGIF画像より小さくなるはずである。しかしPNGはGIFより機能が多いため、大きなサイズになってしまうことがある。
GIFは256色に制限されているため、多くのソフトはフォーマットの変換を行うとき自動的に256色に減色して保存する。そのためフルカラーの画像をPNGとGIFに保存した場合、GIFの方がサイズが小さくなる(かわりに画質は落ちている)。GIF同様256色のPNGを作ればGIFよりサイズが小さくなるにもかかわらず、PNGは256色より多い色数を利用できるため変換時に自動で減色されない場合がある。その結果同じ画像をGIFにした場合よりサイズが大きくなってしまう。
インターレースPNGはインターレースGIFに比べ、圧縮率が低くファイルサイズが大きくなる場合が多い。また、インターレースPNGは通常のPNGより、ファイルサイズが大きくなりがちである。
前述の特許権問題によりGIF排斥運動が起こったが、当初はPNGの普及はなかなか進まなかった。それは主に以下の理由からである。
当時のWebブラウザでPNGに正しく対応していないものがあった。
広告(バナー)には当時、GIFアニメがよく用いられたが、PNGの仕様そのものにはアニメーション機能が含まれていないため、代替することができなかった。多くのブラウザでAPNGに対応したのは2010年代以降のことである。
特許ライセンス料はGIF画像を読み書きできるソフトウェアの製作者が支払うものであり、ソフトウェア技術者などの間では話題になったものの、PhotoshopやPaintShop Proなど市販のソフトウェアを使用して画像を制作・利用する一般利用者にとってはそもそも無関係な話であり興味すら持たれなかった。
特に、2000年代に絶大なシェアを誇ったInternet Explorerはバージョン6までアルファチャンネルを持つPNG画像を正しく描画できなかった。2006年11月にリリースされたバージョン7で、正確に描画できるようになった。
PNGファイルの読み込みと表示に必要なチャンクで、デコーダが適切に処理する必要がある。
IHDR - 最も先頭に配置されるチャンクで、以下の順番で13バイトの情報が含まれる。 画像の幅(4バイト) 画像の高さ(4バイト) 色深度(1バイト) カラータイプ(1バイト) 圧縮形式(1バイト) フィルタ形式(1バイト) インターレース形式(1バイト)
PLTE - カラーパレット定義。
IDAT - zlibにより圧縮されたイメージデータ。複数のIDATチャンクに分割することもできる。この場合ファイルサイズは若干増えるが、PNGをストリームとして生成することができるようになる。
IEND - イメージの終端を示す。
PLTEチャンクはカラータイプ 3 (インデックスカラー)を使用するときに必須となる。カラータイプ 2 と 6 (トゥルーカラー及び、アルファ情報付きトゥルーカラー)の場合は任意、さらにカラータイプ 0 と 4(グレースケール及び、アルファ情報付きグレースケール)の場合は存在してはいけない。