| ポータブルネットワークグラフィックス | |
|---|---|
8ビットの透明チャンネルを持つ4つの異なる色のサイコロを市松模様の背景に重ねたPNG画像。通常、グラフィックソフトウェアで透明性を示すために使用されます | |
| ファイル名拡張子 | .png |
| インターネットメディアタイプ | image/png |
| タイプコード |
|
| 統一型識別子(UTI) | public.png |
| UTIコンフォメーション | public.image |
| マジックナンバー | 89 50 4e 47 0d 0a 1a 0a(8バイト16進数) |
| 開発者 | PNG開発グループ( W3Cに寄贈) |
| 初回リリース | 1996年10月1日 (1996年10月1日) |
| 最新リリース | 3.0 2025年6月24日 (2025年6月24日) |
| フォーマットの種類 | ロスレスビットマップ画像フォーマット |
| 拡張 | APNG、JNG、MNG |
| 規格 | ISO / IEC 15948、[ 1 ] IETF RFC 2083 |
| オープンフォーマット? | はいZlib/libpng ライセンス[ 2 ] |
| ウェブサイト |
|
ポータブルネットワークグラフィックス(PNG、正式発音は/ p ɪ ŋ / PING、[ 3 ] [ 4 ]口語発音は/ ˌ p iː ɛ n ˈ dʒ iː / PEE -en- JEE [ 5 ])は、ロスレスデータ圧縮をサポートするラスターグラフィックスファイル形式です。[ 6 ] PNGは、グラフィックス交換フォーマット(GIF)の改良版であり、特許を取得していない代替として開発されました。
PNGは、パレットベースの画像(24ビットRGBまたは32ビットRGBAカラーのパレットを使用)、グレースケール画像(透明度のためのアルファチャンネルの有無にかかわらず)、およびフルカラーの非パレットベースのRGBまたはRGBA画像をサポートしています。PNGワーキンググループは、プロ品質の印刷グラフィックではなく、インターネット上で画像を転送するためのフォーマットを設計しました。そのため、 CMYKなどのRGB以外の色空間はサポートされていません。PNGファイルには、基本ピクセルと、 RFC 2083に記載されているテキストコメントや整合性チェックなどのその他の情報がエンコードされた、拡張可能なチャンク構造の単一の画像が含まれています。 [ 7 ]
PNGファイルは「.png」というファイル拡張子と「image/png」というMIMEメディアタイプを持ちます。[ 8 ] PNGは1997年3月に情報RFC 2083として、2004年にISO/IEC 15948規格として公開されました。 [ 1 ]
PNG形式作成の動機は、1994年12月28日に、GIF(Graphics Interchange Format )形式の実装は、GIFで使用されているLempel-Ziv-Welch(LZW)データ圧縮アルゴリズムの特許を保有するUnisys社にロイヤルティを支払わなければならないという発表でした。[ 9 ]これは、 Usenetユーザーからの激しい批判につながりました。その一人であるThomas Boutell氏は、1995年1月4日にUsenetニュースグループ「comp.graphics」に先駆的な議論スレッドを投稿し、GIFの無料の代替案の計画を考案しました。そのスレッドの他のユーザーは、後に最終的なファイル形式の一部となる多くの提案を行いました。人気のあるJPEGビューアQPEGの作者であるOliver Fromme氏はPINGという名前を提案し、最終的にはPNGになりました。これは、 PINGはGIFではないことを意味する再帰的な頭字語であり、[ 10 ]拡張子も.pngです後に実装された他の提案には、deflate圧縮アルゴリズムと24ビットカラーのサポートなどがありました。GIFには後者が欠けていたことも、チームが独自のファイル形式を開発する動機となりました。このグループは後にPNG開発グループとして知られるようになり、議論が急速に拡大するにつれて、後にCompuServeフォーラムに関連するメーリングリストを使用するようになりました。[ 3 ] [ 11 ]
PNGの完全な仕様は、1996年10月1日にワールドワイドウェブコンソーシアム(W3C)の承認を得て公開され、その後1997年1月15日にRFC 2083として公開されました。仕様は1998年12月31日にバージョン1.1として改訂され、ガンマと色補正の技術的な問題に対処しました。1999年8月11日に公開されたバージョン1.2では、仕様の唯一の変更点としてiTXtチャンクが追加され、1.2の再フォーマット版が2003年11月10日にW3C標準の第2版として公開されました[ 12 ]。また、2004年3月3日に国際標準(ISO/IEC 15948:2004)として公開されました[ 13 ]。[ 1 ]
GIF はアニメーションが可能ですが、PNG は当初単一画像形式にすべきと決定されました。[ 14 ] 2001 年に、PNG の開発者はアニメーションをサポートするMultiple-image Network Graphics (MNG) 形式を公開しました。MNG は中程度のアプリケーション サポートを実現しましたが、主流の Web ブラウザーの間では十分ではなく、Web サイト デザイナーやパブリッシャーの間では使用されていませんでした。2008 年に、一部のMozilla開発者が同様の目的でAnimated Portable Network Graphics (APNG) 形式を公開しました。APNG は、 GeckoおよびPrestoベースの Web ブラウザーでネイティブにサポートされている形式で、Sony のPlayStation Portableシステムのサムネイルにもよく使用されています(通常の PNG ファイル拡張子を使用)。2017 年には、Chromium ベースのブラウザーが APNG サポートを採用しました。2020 年 1 月、Microsoft Edge がChromiumベースになり、APNG のサポートを継承しました。これにより、すべての主要ブラウザーが APNG をサポートするようになりました。
PNGワーキンググループは、2021年9月14日よりW3CからPNG仕様の維持と開発を行う権限を委譲されています。APNG、ハイダイナミックレンジ(HDR)、Exifデータへの適切なサポートを追加したPNG仕様第3版は、2022年10月25日に最初の公開ワーキングドラフトとして公開され、[ 15 ]、最終的に2025年6月24日にW3C勧告として発行されました。 [ 16 ] [ 17 ]
オリジナルのPNG仕様は、コンピュータグラフィックスの専門家と愛好家による特別グループによって作成されました。フォーマットに関する議論と決定は電子メールで行われました。RFC 2083に記載されているオリジナルの著者は次のとおりです。[ 18 ]

で表示したPNG画像PNGファイルは8バイトの署名[ 19 ]で始まります(右側の16進エディター画像を参照)。
| 値(16進数) | 目的 |
|---|---|
89 | 8ビットデータに対応していない伝送システムを検出し、テキストファイルが誤ってPNGと解釈される可能性を減らすために、 上位ビットが設定されています(その逆も同様)。 |
50 4E 47 | ASCIIではPNGという文字があり、テキスト エディターで表示するとフォーマットを簡単に識別できます。 |
0D 0A | データの DOS-Unix 行末変換を検出するための DOSスタイルの行末(CRLF)。 |
1A | コマンドタイプが使用されたときに DOS でファイルの表示を停止するバイト(ファイル終了文字)。 |
0A | Unix と DOS の行末変換を検出するための Unix スタイルの行末 (LF)。 |
ヘッダーの後には一連のチャンクが続き、[ 20 ]各チャンクは画像に関する特定の情報を伝えます。チャンクは自身が重要または補助的であると宣言し、理解できない補助チャンクに遭遇したプログラムはそれを無視しても問題ありません。このチャンクベースのストレージ層構造は、コンテナ形式やAmigaのIFFに概念的に似ており、PNG形式を拡張しながら古いバージョンとの互換性を維持できるように設計されており、前方互換性を提供し、この同じファイル構造(異なる署名とチャンクを使用)が関連するMNG、JNG、およびAPNG形式で使用されています。
チャンクは4つの部分から構成されます。長さ(4バイト、[ 21 ]ビッグエンディアン)、チャンクタイプ/名前(4バイト[ 22 ])、チャンクデータ(長さバイト)、CRC(巡回冗長検査コード/チェックサム、4バイト[ 21 ])です。CRCは、チャンクタイプとチャンクデータに基づいて計算されるネットワークバイトオーダーCRC-32であり、長さは考慮されません。
| 長さ | チャンクタイプ | チャンクデータ | CRC |
|---|---|---|---|
| 4バイト | 4バイト | 長さバイト | 4バイト |
チャンクタイプには、大文字と小文字を区別する4文字のASCIIタイプ/名前が与えられます。FourCCを参照してください。名前に含まれる文字の大文字と小文字(文字の数値のビット5)は、デコーダーが認識できないチャンクの性質に関する情報を 提供するビットフィールドです。
最初の文字の大文字/小文字は、チャンクがクリティカルチャンクであるかどうかを示します。最初の文字が大文字の場合、チャンクはクリティカルチャンクであり、そうでない場合は補助チャンクです。クリティカルチャンクには、ファイルの読み取りに必要な情報が含まれています。デコーダーが認識できないクリティカルチャンクに遭遇した場合、ファイルの読み取りを中止するか、ユーザーに適切な警告を表示する必要があります。
2文字目の大文字/小文字は、チャンクが「パブリック」(仕様書または特殊用途のパブリックチャンクのレジストリで定義)か「プライベート」(標準化されていない)かを示します。大文字はパブリック、小文字はプライベートです。これにより、パブリックチャンク名とプライベートチャンク名が競合することはありません(ただし、プライベートチャンク名が2つある場合は競合する可能性があります)。
PNG仕様に準拠するには、3番目の文字は大文字でなければなりません。これは将来の拡張のために予約されています。デコーダーは、3番目の文字が小文字のチャンクを、他の認識されないチャンクと同様に扱う必要があります。
4文字目の大文字/小文字は、そのチャンクを認識しないエディタでコピーしても安全かどうかを示します。小文字の場合、ファイルへの変更の程度に関わらず、チャンクを安全にコピーできます。大文字の場合、変更が重要なチャンクに影響を与えていない場合にのみコピーできます。
デコーダーは、PNGファイルを読み込んでレンダリングするために、重要なチャンクを解釈できる必要があります
IHDR最初のチャンクである必要があります。これは13データバイトの長さで、画像の ワールドワイドウェブコンソーシアムによれば、ビット深度は「サンプルあたりまたはパレットインデックスあたりのビット数(ピクセルあたりではない)」と定義されています。[ 12 ]
PLTEパレット(色のリスト)が含まれています。IDAT画像が含まれており、複数のIDATチャンクに分割される場合があります。このような分割によりファイルサイズはわずかに大きくなりますが、PNGをストリーミング形式で生成することが可能になります。IDATチャンクには、圧縮アルゴリズムの出力ストリームである実際の画像データが含まれています。[ 23 ]IEND画像の終了を示す。IENDチャンクのデータフィールドは0バイト/空である。[ 24 ]このPLTEチャンクはカラータイプ3(インデックスカラー)では必須です。カラータイプ2と6(トゥルーカラーとアルファ付きトゥルーカラー)ではオプションですが、カラータイプ0と4(グレースケールとアルファ付きグレースケール)では使用しないでください。
PNGファイルに保存できるその他の画像属性には、ガンマ値、背景色、テキストメタデータ情報などがあります。PNGはICCカラープロファイルを組み込むことでカラーマネジメントもサポートしています。[ 25 ]
bKGDデフォルトの背景色を指定します。これは、スタンドアロンの画像ビューア(Webブラウザは除く。詳細は下記を参照)など、他に適切な選択肢がない場合に使用することを目的としています。cHRMディスプレイの原色と白色点の色度座標を示します。cICPITU-T H.273で定義されている色空間、伝達関数、行列係数を指定します。[ 26 ]カラープロファイルを必要とせずにHDR画像で使用することを目的としています。 [ 27 ]dSIGデジタル署名を保存するためのものです。[ 28 ]eXIfExifメタデータを保存します。[ 29 ] [ 30 ]gAMAガンマを指定します。gAMAチャンクは4バイトのみで構成され、その値はガンマ値に100,000を掛けた値を表します。例えば、ガンマ値1/3.4は29411.7647059((1/3.4)*(100,000))と計算され、保存のために整数(29412)に変換されます。[ 31 ]hISTヒストグラム、つまり画像内の各色の合計量を保存できます。iCCPICC カラー プロファイルです。iTXtキーワードとUTF-8テキストを含み、圧縮可能なエンコードと言語タグでマークされた翻訳が含まれます。拡張メタデータプラットフォーム(XMP)は、このチャンクをキーワード「XML:com.adobe.xmp」とともに使用します。pHYs意図したピクセルサイズ(またはピクセルアスペクト比)を保持します。pHYには「単位あたりのピクセル数、X軸」(4バイト)、「単位あたりのピクセル数、Y軸」(4バイト)、「単位指定子」(1バイト)の合計9バイトが含まれます。[ 32 ]sBIT(有効ビット)はソースデータの色精度を示します。このチャンクには、色の種類に応じて合計1~5バイトが含まれます。[ 33 ] [ 34 ] [ 35 ]sPLTすべての色を利用できない場合は、使用するパレットを提案します。sRGB標準のsRGBカラースペースが使用されていることを示します。sRGBチャンクには1バイトのみが含まれており、「レンダリングインテント」に使用されます(レンダリングインテントには0、1、2、3の4つの値が定義されています)。[ 36 ]sTER立体画像用の立体画像インジケータチャンク。[ 37 ]tEXtISO/IEC 8859-1で表現できるテキストを格納できます。各チャンクにはキーと値のペアが1つずつあります。「キー」は1文字から79文字までの長さでなければなりません。区切り文字はヌル文字です。「値」は、最大許容チャンクサイズからキーワードと区切り文字の長さを引いた値まで、0文字を含む任意の長さにすることができます。「キー」と「値」のどちらにもヌル文字を含めることはできません。先頭または末尾にスペースを入れることもできません。tIME画像が最後に変更された時刻を保存します。tRNS透明度情報を保持します。インデックス画像の場合、1つまたは複数のパレットエントリのアルファチャンネル値を格納します。トゥルーカラー画像およびグレースケール画像の場合、完全に透明とみなされる単一のピクセル値を格納します。zTXtと同じ制限を持つ圧縮テキスト (および圧縮方式マーカー) が含まれますtEXt。| カラータイプ | チャンネル | チャンネルあたりのビット数 | ||||
|---|---|---|---|---|---|---|
| 1 | 2 | 4 | 8 | 16 | ||
| インデックス | 1 | 1 | 2 | 4 | 8 | |
| グレースケール | 1 | 1 | 2 | 4 | 8 | 16 |
| グレースケールとアルファ | 2 | 16 | 32 | |||
| トゥルーカラー | 3 | 24 | 48 | |||
| トゥルーカラーとアルファ | 4 | 32 | 64 | |||
PNG画像のピクセルは数値であり、パレット内のサンプルデータのインデックス、またはサンプルデータそのもののいずれかです。パレットはPLTEチャンクに含まれる別のテーブルです。1ピクセルのサンプルデータは、1~4個の数値の組で構成されます。ピクセルデータがパレットインデックスを表すか明示的なサンプル値を表すかにかかわらず、数値はチャンネルと呼ばれ、画像内のすべての数値は同一の形式でエンコードされます
許可されているフォーマットでは、各数値を固定ビット数(PNG仕様ではビット深度)を使用して符号なし整数値としてエンコードします。これは、各チャンネルではなく各ピクセルの総ビット数を指すために一般的に使用される色深度とは異なることに注意してください。許可されているビット深度は、各ピクセルに使用される総ビット数とともに表にまとめられています。
チャンネルの数は、画像がグレースケールかカラーか、およびアルファ チャンネルがあるかどうかによって異なります。PNG では、カラー タイプと呼ばれる次のチャンネルの組み合わせが可能です。
| 0 (000 2 ) | グレースケール |
| 2 (010 2 ) | 赤、緑、青:RGB/トゥルーカラー |
| 3 (011 2 ) | インデックス: 色のパレットのインデックスを含むチャネル |
| 4 (100 2 ) | グレースケールとアルファ:各ピクセルの 不透明度 |
| 6 (110 2 ) | 赤、緑、青、アルファ |
色の種類は8ビット値として指定されますが、下位3ビットのみが使用され、その場合でも上記5つの組み合わせのみが許可されます。色の種類が有効である限り、隣の表にまとめられているように、ビットフィールドと見なすことができます。
| カラータイプ | 名前 | バイナリ | マスク | |||
|---|---|---|---|---|---|---|
| A | C | P | ||||
| 0 | グレースケール | 0 | 0 | 0 | 0 | |
| 2 | トゥルーカラー | 0 | 0 | 1 | 0 | カラー |
| 3 | インデックス | 0 | 0 | 1 | 1 | 色、パレット |
| 4 | グレースケールとアルファ | 0 | 1 | 0 | 0 | アルファ |
| 6 | トゥルーカラーとアルファ | 0 | 1 | 1 | 0 | アルファ、カラー |
インデックスカラー画像の場合、パレットは常に3原色をチャネルあたり8ビット(パレットエントリあたり24ビット)の深度で保存します。さらに、パレットエントリの8ビットアルファ値のリストをオプションで含めることができます。このリストが含まれていない場合、またはパレットよりも短い場合、残りのパレットエントリは不透明と見なされます。パレットは、画像のビット深度で許容されるよりも多くのエントリを持つことはできませんが、それよりも少ないエントリを持つことは可能です(たとえば、8ビットピクセルの画像で90色のみを使用する場合、256色すべてに対応するパレットエントリは必要ありません)。パレットには、画像内に存在するすべてのピクセル値のエントリが含まれている必要があります。
この規格では、インデックスカラーPNGは1ピクセルあたり1、2、4、または8ビットのビット深度が許可されています。アルファチャンネルのないグレースケール画像は、1ピクセルあたり1、2、4、8、または16ビットのビット深度が許可されます。その他の画像では、チャンネルあたり8または16ビットのビット深度が使用されます。この規格で許可される組み合わせは上記の表に示されています。この規格では、デコーダーがサポートされているすべてのカラーフォーマットを読み取れることが要求されていますが、多くの画像エディターはそれらのごく一部しか生成できません。
PNGは様々な透明度オプションを提供します。トゥルーカラーおよびグレースケール画像では、単一のピクセル値を透明として宣言するか、アルファチャンネルを追加して任意の割合の部分的な透明度を使用できます。パレット画像の場合、パレットエントリにアルファ値を追加できます。保存されるアルファ値の数はパレットエントリの総数よりも少ない場合があり、その場合、残りのエントリは完全に不透明と見なされます
意図せず透明になってしまうピクセルを避けるため、色数を減らす前に、バイナリ透明度のピクセル値のスキャンを実行する必要があります。これは、仕様に準拠するために16ビット/チャネルの画像をデコードできるものの、出力は8ビット/チャネル(ハイエンドシステムを除くすべてのシステムで標準)のみであるシステムで問題となる可能性が最も高くなります。
アルファ保存は「関連付けられた」(「事前乗算された」)アルファと「関連付けられていない」アルファの2種類がありますが、PNGは[ 38 ]「関連付けられていない」(「事前乗算されていない」)アルファを標準化しています。つまり、画像はアルファエンコードされていないということです。つまり、RGBで表現される発光は、ピクセルレベルの発光とは異なります。つまり、over演算はRGB発光にアルファを乗算することになり、発光と遮蔽を適切に表現できません。
PNGは2段階の圧縮プロセスを使用します。
PNGは、 LZ77とハフマン符号化を組み合わせた、特許取得されていないロスレスデータ圧縮アルゴリズムであるDEFLATEを使用しています。zlibなどの、許容ライセンスのDEFLATE実装は広く利用可能です。
JPEG などの非可逆圧縮形式と比較すると、平均よりも高い圧縮設定を選択すると処理が遅くなりますが、ファイル サイズが大幅に小さくなることはありません。


DEFLATEを適用する前に、データは予測方式で変換されます。画像全体には単一のフィルタ方式が使用され、各画像ラインにはフィルタタイプが選択され、データがより効率的に圧縮されるよう変換されます。[ 39 ]スキャンラインに使用されるフィルタタイプは、インライン解凍を可能にするためにスキャンラインの先頭に追加されます。
現在の PNG 仕様にはフィルタ方法が 1 つしかありません (方法 0 で示される)。したがって、実際には各行にどのタイプのフィルタを適用するかしか選択肢がありません。この方法では、フィルタは前の隣接ピクセルの値に基づいて各ピクセルの値を予測し、 DPCM の場合と同様に、実際の値からピクセルの予測色を減算します。この方法でフィルタリングされた画像行は、特に上記の行に類似している場合、生の画像行よりも圧縮率が高くなることがよくあります。これは、予測との差が、すべての可能な画像値に広がるのではなく、一般に 0 の周りに集まるためです。これは、別々の行を関連付ける場合に特に重要です。DEFLATE は、画像が 2D エンティティであることを理解せず、画像データをバイトのストリームとしてのみ見るためです。
フィルタ方式0には5種類のフィルタタイプがあります。各タイプは、左側のピクセル(A)、上のピクセル(B)、上と左のピクセル(C )、またはそれらの組み合わせに基づいて、フィルタリング前の画像データの各バイトの値を予測し、予測値と実際の値の差をエンコードします。フィルタはピクセルではなくバイト値に適用されます。ピクセル値は1バイトまたは2バイト、あるいはバイトごとに複数の値を持つ場合がありますが、バイト境界を越えることはありません。フィルタタイプは次のとおりです。[ 40 ]
| タイプバイト | フィルタ名 | 予測値 |
|---|---|---|
| 0 | なし | ゼロ(生のバイト値が変更されずに通過する) |
| 1 | サブ | バイトA(左) |
| 2 | 上 | バイトB(上) |
| 3 | 平均 | バイトAとバイトBの平均(切り捨て) |
| 4 | パエス | A、B、Cのうち、 p = A + B − Cに最も近いもの |
PaethフィルタはAlan W. Paethによるアルゴリズムに基づいています。[ 41 ]ロスレスJPEGで使用されているDPCM のバージョンや、 1×2、2×1、または(Paeth予測子の場合)2×2のウィンドウとHaarウェーブレットを使用した離散ウェーブレット変換と比較してください。
圧縮率は、行ごとにフィルタの種類を適応的に選択することでさらに向上します。この改善と、PNG書き込みソフトウェアで一般的に使用されているヒューリスティックな実装方法は、Lee Daniel Crockerによって考案されました。彼は、このフォーマットの開発中に多くの画像でこの手法をテストしました。[ 42 ]フィルタの選択は、後述するように、ファイルサイズの最適化の要素です。
インターレースを使用する場合、インターレースの各段階は個別にフィルタリングされます。つまり、各段階が受信されるたびにイメージを段階的にレンダリングできます。ただし、一般的にインターレースを使用すると圧縮の効果は低下します。

PNGは、オプションで2次元7パスインターレース方式(Adam7アルゴリズム)を提供しています。これはGIFの1次元4パス方式よりも洗練されており、特にバイキュービック補間などの補間アルゴリズムを使用する場合、転送の早い段階でより鮮明な低解像度画像を表示できます。[ 43 ]
ただし、7 パス方式では、より単純な方式よりもデータの圧縮率が低下する傾向があります。

PNGコア形式はアニメーションをサポートしていません。MNGはPNGの拡張版であり、アニメーションをサポートしており、PNGグループのメンバーによって設計されました。MNGはPNGと基本的な構造とチャンクを共有していますが、はるかに複雑でファイルシグネチャも異なるため、標準的なPNGデコーダーとは互換性がありません。そのため、ほとんどのウェブブラウザやアプリケーションはMNGをサポートしなかったか、サポートを中止しました。
MNG の複雑さから、Mozilla Foundation の開発者らはAPNGを提案した。これは PNG をベースとし、アニメーションをサポートし、MNG よりも単純である。APNG は、APNG をサポートしない PNG デコーダーのために単一画像表示へのフォールバックを提供する。今日、APNG 形式はすべての主要なウェブブラウザーでサポートされている。 [ 44 ] APNG は、 Firefox 3.0 以上、Pale Moon (全バージョン)、Safari 8.0 以上でサポートされている。[ 45 ] Chromium 59.0 で APNG のサポートが追加され、[ 46 ] [ 47 ] Google Chrome がそれに続いた。Operaはバージョン 10 - 12.1 で APNG をサポートしていたが、バージョン 15 でBlinkレンダリング エンジンに切り替えた際にサポートが失効した。Opera 46 (Chromium 59 から継承) で再度サポートが追加された。[ 48 ] Microsoft Edge は、Chromium ベースのエンジンに切り替えたバージョン 79.0 以降で APNG をサポートしている。
PNGグループは2007年4月にAPNGを採用しないことを決定しました。[ 49 ] ANG、aNIM/mPNG、「PNG in GIF」、そのサブセットである「RGBA in GIF」など、いくつかの代替案が議論されていました。[ 50 ]しかし、現在広く支持されているのはAPNGだけです。
2025年6月にPNG仕様の第3版がリリースされ、現在PNGワーキンググループによってメンテナンスされており、[ 15 ] APNGは最終的に拡張機能として仕様に組み込まれました。[ 51 ]
89 50 4E 47 0D 0A 1A 0APNG署名 | IHDR画像ヘッダー | IDAT画像データ | IEND画像終了 |
| 16進数 | 文字として |
|---|---|
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 00 01 00 00 00 01 08 02 00 00 00 90 77 53 DE 00 00 00 0C 49 44 41 54 08 D7 63 F8 CF C0 00 00 03 01 01 00 18 DD 8D B0 00 00 00 00 49 45 4E 44 AE 42 60 82 | .PNG.... ....IHDR ..................wS 。....IDAT..c.... .... ....IEN D.B`。 |
| チャンクへのオフセット | 16進値 | 10進値 | テキスト | 意味 |
|---|---|---|---|---|
| 0 | 0x0D | 13 | IHDRチャンクには13バイトのコンテンツがあります | |
| 4 | 0x49484452 | IHDR | ヘッダーチャンクを識別します | |
| 8 | 0x01 | 1 | 画像の幅は1ピクセルです | |
| 12 | 0x01 | 1 | 画像の高さは1ピクセルです | |
| 16 | 0x08 | 8 | ピクセルあたり8ビット(チャンネルあたり) | |
| 17 | 0x02 | 2 | カラータイプ2(RGB/トゥルーカラー) | |
| 18 | 0x00 | 0 | 圧縮方法 0 (許容される値のみ) | |
| 19 | 0x00 | 0 | フィルタ方法 0(有効な値のみ) | |
| 20 | 0x00 | 0 | インターレースなし | |
| 21 | 0x907753DE | チャンクの種類と内容のCRC(長さは除く) |
| チャンク内のオフセット | 16進値 | 意味 |
|---|---|---|
| 0 | 0x0C | IDATチャンクは12バイトのコンテンツを持ちます |
| 4 | 0x49444154 | データチャンクを識別します |
| 8 | 0x08 | 256バイトのウィンドウを使用するDEFLATE圧縮方式[ 52 ] |
| 9 | 0xD7 | ZLIB FCHECK値、辞書未使用、最大圧縮アルゴリズム[ 52 ] |
| 10 | 0x63F8CFC00000 | 静的ハフマン符号を使用した圧縮DEFLATEブロック。0x00 0xFF 0x00 0x00 [ 53 ]にデコードされます |
| 16 | 0x03010100 | ZLIBチェック値:非圧縮データのAdler-32チェックサム[ 52 ] |
| 20 | 0x18DD8DB0 | チャンクの種類と内容のCRC(長さは除く) |
16進エディタのように表示されます。左側には16進形式でバイト値が表示され、右側にはISO-8859-1の対応する文字が表示されます。認識されない文字と制御文字はピリオドに置き換えられています。さらに、PNGシグネチャと個々のチャンクは色分けされています。人間が読める型名(この例ではPNG、IHDR、IDAT、IEND)が付いているため、簡単に識別できます。
PNGを使用する理由
PNG画像は古いブラウザではサポートが限られています。特にIE6ではPNGのサポートが限定的です。[ 55 ]

JPEG (Joint Photographic Experts Group)形式は、写真画像(および写真風画像)の場合、PNGよりもファイルサイズが小さくなります。これは、JPEGが写真画像データ向けに特別に設計された非可逆符号化方式を使用しているためです。写真画像データは、通常、ソフトで低コントラストのトランジションと、ある程度のノイズなどの不規則な構造が特徴です。このような画像に高品質のJPEGではなくPNGを使用すると、画質の向上はほとんどなく、ファイルサイズが大幅に増加します。一方、テキスト、線画、グラフィック(急激なトランジションと広い単色領域を含む画像)を含む画像を保存する場合、PNG形式はJPEGよりも画像データを圧縮できます。さらに、PNGはロスレスであるのに対し、JPEGは高コントラスト領域の周囲に視覚的なアーティファクトを生成します(このようなアーティファクトはJPG圧縮の設定に依存し、低品質(高圧縮)設定では顕著になる可能性があります)。画像に急激なトランジションと写真的な部分の両方が含まれる場合は、2つの効果のどちらかを選択する必要があります。JPEGは透明度をサポートしていません。
JPEGの非可逆圧縮には世代損失という問題もあります。これは、画像をデコードと再エンコードを繰り返して保存するたびに情報が失われ、画像が劣化することを意味します。PNGは可逆圧縮であるため、編集用の画像を保存するのに適しています。PNGは写真画像を圧縮する際にかなり効率的ですが、写真画像専用に設計された可逆圧縮形式、例えばロスレスWebPやAdobe DNG(デジタルネガ)などがあります。ただし、これらの形式は広くサポートされていないか、独自仕様です。画像をロスレスで保存し、配布時にのみJPEG形式に変換することで、世代損失を回避することができます。
PNG仕様にはデジタルカメラなどのソースからのExif画像データを埋め込むための標準は明示的に含まれていませんが、PNGにEXIFデータを埋め込むための推奨される方法は、重要でない補助チャンクラベルを使用することですeXIf。[ 56 ]
初期のウェブブラウザはPNG画像をサポートしておらず、JPEGとGIFが主な画像形式でした。GIFは色深度が限られているため、ウェブページ用のグラデーションを含む画像をエクスポートする際にはJPEGがよく使用されていました。しかし、JPEG圧縮ではグラデーションがわずかにぼやけてしまいます。PNG形式は、ファイルサイズを小さく抑えながら、与えられたビット深度で可能な限り正確にグラデーションを再現します。ウェブブラウザによるPNG形式のサポートが向上するにつれて、PNGは小さなグラデーション画像に最適な選択肢となりました。最近のブラウザでは、グラデーションはCSSを使用して作成できるため、グラデーションを表示するために画像はまったく必要ありません。
JPEG-LSはJoint Photographic Experts Groupによる画像フォーマットですが、前述の他の非可逆JPEGフォーマットほど広く知られておらず、サポートも少ないです。PNGと直接比較でき、標準テスト画像セットがあります。[ 57 ] Waterloo Repertoire ColorSet(JPEG-LS適合性テストセットとは無関係の標準テスト画像セット)では、JPEG-LSは一般的にPNGよりも10~15%優れたパフォーマンスを発揮しますが、画像によってはPNGの方が50~75%程度大幅に優れたパフォーマンスを発揮します。[ 58 ]したがって、これらのフォーマットの両方が選択肢であり、ファイルサイズが重要な基準である場合は、画像に応じて両方を検討する必要があります
JPEG XLは、PNGなどのロスレス形式を置き換えるために開発された、大幅に改良されたロスレスまたはロッシー形式のもう1つの形式ですが、残念ながらサポートがはるかに少ないです。[ 59 ] JPEG XLはJPEGよりも50%以上小さく、ロスレスでありながらそれを実現するため、PNGよりもさらに小さくなります。[ 60 ]また、ハイダイナミックレンジ、広色域、大きな色深度をサポートしています。[ 61 ] JPEG XLはデコードも非常に効率的で、置き換えようとしている形式からのスムーズな移行を提供し、JPEGからロスレスに変換できます。また、忠実度を損なうことなく圧縮することにも優れています。[ 62 ]
タグイメージファイルフォーマット(TIFF)は、非常に幅広いオプションを備えたフォーマットです。そのため、TIFFはプロ仕様の画像編集アプリケーション間のデータ交換のための汎用フォーマットとして便利ですが、アプリケーションへのサポート追加ははるかに大きな作業となり、画像操作を伴わないアプリケーション(Webブラウザなど)ではほとんどサポートされていません。また、高い拡張性は、ほとんどのアプリケーションが可能な機能のサブセットしか提供していないことを意味し、ユーザーの混乱や互換性の問題を引き起こす可能性があります
TIFFで使用される最も一般的な汎用ロスレス圧縮アルゴリズムは、Lempel-Ziv-Welch(LZW)です。この圧縮技術はGIFでも使用されており、2003年まで特許で保護されていました。TIFFは、PNGで使用される圧縮アルゴリズム(圧縮タグ0008 16「Adobeスタイル」)もサポートしており、その利用度とアプリケーションによるサポートは中程度です。TIFFは、 CCITT Group IVなどの特殊用途のロスレス圧縮アルゴリズムも提供しており、これらのアルゴリズムは、PNGの圧縮アルゴリズムよりも2値画像(例:ファックスや白黒テキスト)を効率的に 圧縮できます。
PNGは非プリマルチプライアルファのみをサポートしています[ 38 ]が、TIFFは「関連付けられた」(プリマルチプライされた)アルファもサポートしています。
WebPはGoogleによって発明されたフォーマットで、PNG、JPEG、GIFの置き換えを目的としています。[ 63 ] WebPファイルは非可逆圧縮と可逆圧縮の両方が可能ですが、PNGは可逆圧縮のみ可能です。WebPはアニメーションもサポートしており、これは以前はGIFファイルでしか実現できませんでした。[ 64 ]
しかし、WebPがPNGに対して持つ主な利点は、ファイルサイズが大幅に削減され、ウェブサイトに埋め込む際の読み込み時間が短縮されることです。Googleは、ロスレスWebP画像はPNGファイルよりも26%サイズが小さいと主張しています。[ 65 ]
WebPはPNGとは異なり、様々な画像編集プログラムやソーシャルメディアウェブサイトと互換性がないという批判を受けています。[ 66 ]また、WebPはすべてのウェブブラウザでサポートされているわけではないため、ウェブ画像ホスティング業者はユーザーに表示するためのフォールバック画像を作成する必要があり、WebPの潜在的なストレージ節約効果が打ち消されてしまいます。[ 64 ]
AVIFは、 Alliance for Open Mediaによって開発された画像フォーマットです。AVIFは、PNG、 GIF、WebPなどの他の画像コーデックの欠点を補うために財団によって設計されました。[ 67 ]
AVIFは一般的にWebPやPNGよりもサイズが小さいです。[ 68 ] AVIFはアニメーションをサポートしていますが、以前はPNGはサポートしていませんでした。[ 69 ]
しかし、WebPと同様に、AVIFはPNGよりもサポートされているアプリケーションが少ない。[ 69 ]
PNG形式の公式リファレンス実装は、プログラミングライブラリlibpngです。[ 70 ]これは、寛容なフリーソフトウェアライセンスの条件に基づいてフリーソフトウェアとして公開されています。そのため、通常、フリーオペレーティングシステムでは重要なシステムライブラリとして使用されています
PNG形式は、Adobe Photoshop、CorelのPhoto-PaintおよびPaint Shop Pro、GIMP、GraphicConverter、Helicon Filter、ImageMagick、Inkscape、IrfanView、Pixel image editor、Paint.NET、Xara Photo & Graphic Designerなど、多くのグラフィックプログラム( Canvaなどのオンライングラフィックデザインプラットフォームを含む)で広くサポートされています。PNGをサポートする一般的なオペレーティングシステムにバンドルされているプログラムには、MicrosoftのPaint、AppleのPhotos / iPhoto、Previewなどがあり、GIMPは一般的なLinuxディストリビューションにバンドルされていることがよくあります。
Adobe Fireworks(旧称Macromedia)は、PNGをネイティブファイル形式として使用しているため、他の画像エディタやプレビューユーティリティでフラット化された画像を表示できます。ただし、Fireworksはデフォルトでレイヤー、アニメーション、ベクターデータ、テキスト、エフェクトのメタデータも保存します。これらのファイルは直接配布しないでください。Fireworksは、Webページなどでの使用を想定し、余分なメタデータを削除した最適化されたPNG形式で画像をエクスポートできます。
PNGのサポートは1997年にInternet Explorer 4.0b1(NTでは32ビットのみ)とNetscape 4.04で初めて登場しました。[ 71 ]
フリーソフトウェア財団[ 72 ]やワールドワイドウェブコンソーシアム(W3C)[ 73 ] 、 gif2pngなどのツール[ 74 ]、Burn All GIFsなどのキャンペーン[ 75 ]による呼びかけにもかかわらず、Internet Explorerのサポートが遅れ、バグが多かったため、特に透明性に関して、ウェブサイトでのPNGの採用はかなり遅れました。[ 76 ] PNGは2018年以降、ウェブ上で最も使用されている画像ファイル形式です。 [ 77 ]
PNG対応ブラウザには、Apple Safari、Google Chrome、Mozilla Firefox、Opera、Camino、Internet Explorer、Microsoft Edgeなど多数あります。詳細な比較については、「ウェブブラウザの比較(画像形式のサポート)」をご覧ください。
特にInternet Explorer(Windows)9.0(2011年リリース)以下のバージョンでは、PNG画像を正しくレンダリングできないという問題が多数ありました。[ 78 ]
PNGアイコンは、少なくとも1999年以降、GNOMEなどのデスクトップ環境で、ほとんどのLinuxディストリビューションでサポートされています。[ 90 ] 2006年には、Microsoft WindowsがWindows VistaでPNGアイコンのサポートを導入しました。[ 91 ] PNGアイコンは、 AmigaOS 4、AROS、macOS、iOS、MorphOSでもサポートされています。さらに、AndroidではPNGが広く使用されています。
PNGファイルのサイズは、エンコードや圧縮の方法によって大きく異なります。この点については「PNG: The Definitive Guide」で解説されており、多くのヒントが紹介されています。 [ 58 ]
GIFファイルと比較して、同じ情報(256色、補助チャンク/メタデータなし)を持つPNGファイルは、効果的な圧縮ツールで圧縮すると、通常GIF画像よりも小さくなります。ファイルと圧縮ツールによって、PNGはやや小さく(10%)、大幅に小さく(50%)、やや大きく(5%)なりますが、大きな画像の場合は大幅に大きくなることはほとんどありません[ 58 ] 。これは、PNGのDEFLATEがGIFのLZWに比べてパフォーマンスが高いこと、およびPNGの予測フィルタの追加された事前圧縮層が2次元画像構造を考慮してファイルをさらに圧縮するためです。フィルタ処理されたデータはピクセル間の差をエンコードするため、すべての可能な値に分散されるのではなく、0に近い値に集まる傾向があり、DEFLATEによってより簡単に圧縮されます。ただし、Adobe Photoshop、CorelDRAW、MS Paintの一部のバージョンではPNG圧縮率が低いため、GIFの方が効率的であるという印象を与えます[ 58 ]
PNG ファイルのサイズは、さまざまな要因により異なります。
このように、高色深度、最大限のメタデータ(色空間情報と表示に影響しない情報を含む)、インターレース、圧縮速度の間でファイルサイズのトレードオフが生じます。これらの条件はすべて、低色深度、補助チャンクが少ないか全くない、インターレースなし、調整されているものの計算量の多いフィルタリングと圧縮を伴う、大きなファイルを生成します。目的が異なれば、異なるトレードオフが選択されます。最大のファイルはアーカイブと編集に最適かもしれませんが、簡素化されたファイルはウェブサイトでの使用に最適です。同様に、ファイルを繰り返し編集して保存する場合は高速だが低圧縮が好まれ、ファイルが安定している場合(アーカイブまたは投稿など)は低速だが高圧縮が好まれます。インターレースはトレードオフです。大きなファイルの初期レンダリングを劇的に高速化します(レイテンシが改善されます)が、特に小さなファイルでは、ファイルサイズが大きくなり(スループットが低下し)、メリットはほとんどありません。[ 58 ]
PNGは可逆形式ですが、PNGエンコーダーは画像データを非可逆方式で前処理することでPNG圧縮率を向上させることができます。例えば、トゥルーカラーPNGを256色に量子化すると、インデックスカラータイプを使用でき、ファイルサイズを削減できる可能性があります。[ 92 ]
PNGファイルを保存する際、プログラムによっては他のプログラムよりも効率的なものがあります。これは、プログラムで使用されるPNG圧縮の実装に関係しています
多くのグラフィックプログラム(AppleのPreviewソフトウェアなど)は、PNGファイルに大量のメタデータと色補正データを保存しますが、これらは通常、Web表示には不要です。Adobe Fireworksの最適化されていないPNGファイルも、対応するエディタで画像を編集できるようにするためのオプションが含まれているため、この点で悪名高いです。また、CorelDRAW(バージョン11以降)は、Internet Explorer(バージョン6~8)で開けないPNGファイルを生成することがあります。
Adobe Photoshopの CS Suite では、「Web 用に保存」機能 (明示的な PNG/8 の使用も可能) を使用する場合の PNG ファイルのパフォーマンスが向上しました。
Adobe Fireworksは、デフォルトで多くのプログラムよりも大きなPNGファイルを保存します。これは、 Fireworksの保存形式の仕組みに起因しています。Fireworksの保存機能で生成される画像には、レイヤーとベクター情報のすべてを含む、大きなプライベートチャンクが含まれます。これにより、ロスレス編集が可能になります。「エクスポート」オプションを使用して保存した場合、FireworksのPNGファイルは他の画像エディタで生成されるPNGファイルと遜色ありませんが、フラット化されたビットマップとしてしか編集できません。Fireworksは、サイズが最適化されたベクター編集可能なPNGファイルを保存することができません。
その他の注目すべき低品質の PNG 圧縮ツールの例としては、次のものがあります。
圧縮率が低いと PNG ファイルのサイズは大きくなりますが、画像の品質や他のプログラムとのファイルの互換性には影響しません。
トゥルーカラー画像の色深度を8ビットパレット(GIFなど)に減色すると、結果として得られる画像データは通常、はるかに小さくなります。そのため、トゥルーカラーPNGは通常、減色されたGIFよりも大きくなりますが、PNGは減色バージョンを同程度のサイズのパレットファイルとして保存できます。逆に、一部のツールでは、画像をPNGとして保存する際に、元のデータが8ビットカラーのみを使用していても自動的にトゥルーカラーとして保存するため、ファイルサイズが不必要に大きくなります。[ 58 ]これらの要因により、PNGファイルは同等のGIFファイルよりも大きいという誤解が生じる可能性があります。
PNGファイルを最適化するには、さまざまなツールが利用可能です。これらのツールは以下の方法で最適化を行います
それぞれの機能の簡単な比較を以下に示します。
| オプティマイザー | チャンク除去 | 色削減 | フィルタリング | フィルターの再利用[注3 ] | 1回の実行でフィルターを複数回試す | デフレーター[注4 ] |
|---|---|---|---|---|---|---|
advpng | はい | いいえ[注5 ] | 0 | いいえ | 該当なし[注 6 ] | (複数) |
advdef | いいえ | いいえ | 以前のフィルターセットを再利用します | 常に | 該当なし | (複数) |
pngcrush | はい | はい | 0~4または適応型 | いいえ | はい | zlib |
pngout | はい | はい | 0~4または適応型 | はい[注2 ] | いいえ | kzip |
zopflipng | はい | はい | 0~4、または2つの異なるアルゴリズムによる適応型、あるいは総当たり方式 | はい | はい | zopfli |
が利用可能になる以前はzopflipng、PNG の最適化を行うための実用的な方法として、最適な圧縮を実現するために、2 つのツールを順番に組み合わせて使用することが推奨されていました。1 つはフィルタを最適化し(補助的なチャンクを削除)、もう 1 つは DEFLATE を最適化するツールです。pngout は両方のツールを提供していますが、1 回の実行で指定できるフィルタの種類は 1 つだけです。そのため、ラッパーツールと併用するか、 のように再デフレータとして機能する pngcrush [注 2] と組み合わせて使用する必要がありますadvdef。
補助チャンクを削除するために、ほとんどのPNG最適化ツールはPNGファイルからすべての色補正データ(ガンマ、ホワイトバランス、ICCカラープロファイル、標準RGBカラープロファイル)を削除する機能を備えています。これにより、ファイルサイズが大幅に小さくなることがよくあります。例えば、以下のコマンドラインオプションでこれを実現しpngcrushます
pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB入力ファイル.png 出力ファイル.png
pngcrush、、pngoutおよびzopflipngすべては、フィルタタイプ0~4のいずれかをグローバルに適用する(すべての行に同じフィルタタイプを使用する)か、「疑似フィルタ」(番号5)を使用するオプションを提供します。疑似フィルタは、適応アルゴリズムを使用して各行にフィルタタイプ0~4のいずれかを選択します。zopflipngフィルタリングを最適化しようとするブルートフォース検索を含む、3つの異なる適応型手法を提供します。[注7 ]
pngout入力画像に存在するラインごとのフィルタセットを zopflipng保存/再利用するオプションを提供します[注2 ] [注8 ] 。
pngcrushは、zopflipng1回の実行で複数のフィルタ戦略を試し、最適なものを選択するオプションを提供します。フリーウェアのコマンドライン版ではpngoutこの機能は提供されていませんが、商用版ではpngoutwin提供されています。[注 9 ]
ZopfliとLZMA SDKは、パフォーマンスを犠牲にしてzlibリファレンス実装よりも高い圧縮率を実現できるDEFLATE実装を提供しています。AdvanceCOMPは、これらのライブラリのいずれかを使用してPNGファイルを再圧縮できます。さらに、PNGOUTには独自のDEFLATE実装が含まれています advpngadvdef
advpngフィルターを適用するオプションがなく、常にフィルター0をグローバルに適用します(画像データはフィルター処理されません)。そのため、画像にフィルター処理のメリットが顕著に現れる場合には使用すべきではありません。一方、advdef同じパッケージの はPNG構造を扱わず、再デフレーターとしてのみ機能し、既存のフィルター設定は保持されます。
Windows Vista以降向けのアイコンにはPNGサブイメージが含まれている場合があるため、最適化はそれらにも適用できます。少なくとも1つのアイコンエディタ、Pixelformerは、 ICOファイルの保存時に特別な最適化パスを実行し、サイズを縮小すること ができます
macOS のアイコンにはPNG サブイメージも含まれている可能性がありますが、そのようなツールは利用できません。
pngout -f6[pngcrush|pngout] -fまたはzopflipng --filterszopflipng --filters=ppngoutwinの最適化設定ダイアログでは、ユーザーにフィルタ戦略の選択肢を提供しますIHDRヘッダー自体は厳密に単一画像形式です。(...) 将来的には、PNGをベースにした複数画像形式が定義される可能性があります。そのような形式は、別のファイル形式として扱われます。
各チャンクは、長さ、チャンクタイプ、チャンクデータ、32ビットCRCの4つの部分で構成されます。長さは、チャンクデータフィールドのみのサイズを示す32ビットの符号なし整数です
IHDR、IDAT、IEND などの 32 ビットの FourCC コードです。
IDAT。IEND。iCCPプロファイル。gAMA。pHYsなピクセル寸法。sBITビット。