Portable Network Graphics

はコンピュータでビットマップ画像を扱うファイルフォーマットである。圧縮アルゴリズムとしてDeflateを採用している、圧縮による画質の劣化のない可逆圧縮の画像ファイルフォーマットである。
1996年に登場し、可逆圧縮の画像フォーマットとして既に普及していたGIFの後継フォーマットとなることを目指し、ネットワーク経由での使用を想定した機能や透過処理など、多くの機能をサポートした。ウェブブラウザやグラフィックソフトでのサポートも進み、インターネットを中心に普及した。
「PNG」は「ピング」や「ピン」と多く読まれる。
概説.
画像のとして、最大16ビットのグレースケール、24ビットと 48ビットのRGB、または8ビットまでのインデックスカラーモード（パレットカラー) を利用することができる。透過についてはクロマキーによる透過指定、および8ビットから16ビットのアルファチャンネルをサポートする。また、画像に付属するテキストなどのメタデータやガンマ値なども画像ごとに記録できる。
GIFと異なり、PNGにはアニメーション機能はない。ただし、PNGはチャンク（データのブロック）で自由に拡張できるようになっていて、1ファイルに複数の画像を含めることができる。これを使ってアニメーション機能を追加した MNG と APNG が別のフォーマットとして開発されている。他の拡張として、立体視用にステレオPNG (PNS) フォーマットがある。
歴史.
PNGが開発された動機は、1994年末に、GIFに使われていた圧縮アルゴリズムLZWについて米ユニシスが特許を保有しているとし、GIFを使ったソフトウェアに特許権を行使すると発表したことによる。実際、PNGの頭文字は非公式に「」という意味が込められている（再帰的頭字語）。また、当時256色以上表示可能なコンピュータが主流になってきたため、GIFフォーマットにある256色までという制限を解消する必要もあった。1999年、ユニシスが非商用ソフトについても特許使用料を請求することを決めると、PNGはさらに注目を集めるようになった。
技術詳細.
詳しくは、仕様書を参照。
ファイルヘッダ.
PNG ファイルはヘッダに 8 バイトのシグネチャ（マジックナンバー）を持つ。16進数の値は「89 50 4E 47 0D 0A 1A 0A」である（制御文字で表すと codice_1 codice_2 codice_3 codice_4 codice_5 codice_6 codice_7 codice_6）。各値の意味は次の通り。
ファイルヘッダの後にはIHDRチャンクが必ず来て、IHDRチャンクのサイズは13バイト固定なため、シグネチャの次の8バイトも00 00 00 0D 49 48 44 52で固定されている。
チャンク.
ファイルヘッダに続いて、チャンクと呼ばれる複数のデータブロックが続く。各チャンクは画像についての様々な情報を保持するもので、必須チャンクと補助チャンクに分けられる。補助チャンクは任意的なもので、処理プログラム側によっては必ずしも処理されない。このチャンク構造により、PNGフォーマットは拡張性と前方互換性を両立する。
チャンクの構造は、
の順番で配置される。
チャンクの種類は、大文字と小文字が区別されるアルファベット4文字で表される。
必須チャンク.
PNGファイルの読み込みと表示に必要なチャンクで、デコーダが適切に処理する必要がある。
PLTEチャンクはカラータイプ 3 （インデックスカラー）を使用するときに必須となる。カラータイプ 2 と 6 （トゥルーカラー及び、アルファ情報付きトゥルーカラー）の場合は任意、さらにカラータイプ 0 と 4（グレースケール及び、アルファ情報付きグレースケール）の場合は存在してはいけない。
補助チャンク.
イメージについての付加情報を保持するための任意チャンク。
フィルタ処理.
PNGのイメージデータはzlibにより圧縮されるが、画像の特徴を利用して圧縮の効率を良くするために、フィルタで事前に処理を行えるようになっている。（展開時には、逆のフィルタがかかる)
例えば、ピクセルの値が次のように並んでいたとする。
 100,101,102,103,104,105
このデータには冗長な値が無く、このままDeflate圧縮を行っても効果は得られない。しかし例えば「左の値との差」をとると、データは以下のようになる。
 100,1,1,1,1,1
この状態で圧縮すれば、最初の状態よりも高い効果が得られる。上記は極端な例であるが、このように事前に簡単な演算を行うことは、データによっては圧縮率の改善に役立つ。
PNGでは5種類のフィルタを定義している。
このフィルタは横一ライン毎に変更できる。どのフィルタをどこに使うかは使用する圧縮プログラムが選択できるため、プログラムによって同じ画像でも異なるサイズになりうる。
圧縮.
圧縮アルゴリズムはDeflate (RFC 1951) を使用し、フォーマットはzlib形式 (RFC 1950) と定められている。DeflateのアルゴリズムそのものはPNGの仕様書には書かれていない。圧縮後のデータは、そのまま IDAT チャンクに格納される。
なおPNGはDeflate以外の圧縮形式もサポート出来るように設計されており、IHDRチャンクやiTXtチャンクには、使用する圧縮形式を明示するCompression methodフィールドがある。ただしVer1.2時点ではCompression methodフィールドで使える値はDeflateを示す一種類だけである。
開発者向けのツール.
PNGを処理するための開発者向けライブラリとしてlibpngがある。これはPNG公式のライブラリであり、最も広く利用されている。C言語で開発されており、多くのプラットフォームで動作する。ライセンスはGPLよりも制限が緩やかである。
他のフォーマットとの比較.
GIF との比較.
GIF の代替物として開発された経緯があるため、GIFと比較されることが多い。主な差異は以下の通り。
JPEGとの比較.
JPEGは、主に写真的なイメージデータを非可逆圧縮することでPNGよりも小さなファイルサイズに収めることができる。そのため、高画質に設定したJPEGと比較すると、ファイルサイズはJPEGの数倍（大抵は5 - 10倍程度）になる。
PNGは、テキストや線画など色の境界がはっきりしたイメージに適している。線画と写真が混在している場合では、目的に応じてシャープな部分を重視する場合はPNG、ファイルサイズを重視する場合はJPEGを選ぶことができる。
JPEGは、非可逆圧縮方式でありが生じるため、編集中の一時データの保存には向かない。JPEGで保存をする段階で画像は劣化し、それを繰り返すたびに更に画像は劣化していく。
TIFFとの比較.
PNGとTIFFは、画像を可逆圧縮または無圧縮により劣化なしで画像の保存が可能という点は共通している。
同じ画像を保存する際、ファイルサイズでは一般的にPNGに利点があるとされる。
ブラウザの対応.
前述の特許権問題によりGIF排斥運動が起こったが、当初はPNGの普及はなかなか進まなかった。それは主に以下の理由からである。
特に、2000年代に絶大なシェアを誇ったInternet Explorerはバージョン6までアルファチャンネルを持つPNG画像を正しく描画できなかった。2006年11月にリリースされたバージョン7で、正確に描画できるようになった。（ただしPhotoshopで生成したPNG画像の場合、gAMAチャンクへの不適切な記述のため正常に表示されないことがある）
PNGはGIFと同様な1色透過も扱え、こちらはInternet Explorer 5でも対応していた。なお、IE5.5はアルファチャンネル付きPNGを正しく表示できるActiveXプラグイン (AlphaImageLoader) を搭載しているため、この機能を使うようHTMLファイルに記述すれば表示できた。ただしIEの設定によってはアルファチャンネルとして機能せず、また他ブラウザとの互換を考えると、わざわざこの機能を利用する価値はほとんど無かった。
ユニシスの主張するLZW圧縮アルゴリズムに関する特許は、米国時間2003年6月20日をもって無効（期限切れ）になった。PNGはLZW圧縮アルゴリズム特許の有効期間内で全てのGIFファイルを代替するには至らなかった。特許問題が事実上消失したため、「特許に抵触しないGIFを代替可能なフォーマットのひとつ」としての存在意義は消失した。結果としてPNGは「GIFを代替可能なフォーマットのひとつ」という見方ができる。
ファイルサイズ.
正しくエンコード処理を行ってメタデータを含まないように作成したPNG画像は、同じように処理して作成したGIF画像より小さくなるはずである。しかしPNGはGIFより機能が多いため、大きなサイズになってしまうことがある。
GIFは256色に制限されているため、多くのソフトはフォーマットの変換を行うとき自動的に256色に減色して保存する。そのためフルカラーの画像をPNGとGIFに保存した場合、GIFの方がサイズが小さくなる（かわりに画質は落ちている）。GIF同様256色のPNGを作ればGIFよりサイズが小さくなるにもかかわらず、PNGは256色より多い色数を利用できるため変換時に自動で減色されない場合がある。その結果同じ画像をGIFにした場合よりサイズが大きくなってしまう。
インターレースPNGはインターレースGIFに比べ、圧縮率が低くファイルサイズが大きくなる場合が多い。また、インターレースPNGは通常のPNGより、ファイルサイズが大きくなりがちである。
ソフトウェアによっては、出力されるPNGファイルのサイズは必ずしも最適化されないため、ファイルサイズを減らすためにはPNG最適化ソフトウェアなどでPNGファイルを最適化するとよい。最適化のためのソフトウェアとしては、 OptiPNG、PNGOUT、pngrewrite、Pngcrushなどがある。また、Windows用ながらもBlastPNGのような複数の最適化ソフトウェアを一度に扱えるフロントエンドなどもある。
PNGはJPEGに取って代わるものではない。JPEGは写真の圧縮に適した非可逆圧縮方式であり、写真画像に限ってはJPEGのほうがファイルサイズが小さくなる。一方で、文字や線画などの保存はJPEGだと圧縮ノイズが目立ってしまうのでPNGのほうが適している上、ファイルサイズもかなり小さくなる。また、加工を繰り返す予定のある画像はJPEGでは劣化が進んでしまうのでPNG保存が望ましい。