ポータブル ネットワーク グラフィックス( 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:2004として公開されました。 [ 1 ]
PNG フォーマットを作成する動機は、1994 年 12 月 28 日に発表された、グラフィックス交換フォーマット(GIF) フォーマットの実装は、GIF で使用されているLempel–Ziv–Welch (LZW)データ圧縮アルゴリズムの特許のためにUnisysにロイヤリティを支払わなければならないという発表でした。[ 9 ]これにより、 Usenetユーザーから批判が殺到しました。そのうちの 1 人が Thomas Boutell で、1995 年 1 月 4 日にUsenet ニュースグループ「comp.graphics」に、GIF の無料代替案を考案した前段階のディスカッション スレッドを投稿しました。そのスレッドの他のユーザーは、後に最終的なファイル フォーマットの一部となる多くの提案を行いました。人気のJPEGビューアQPEGの作者である Oliver Fromme は、最終的に PNG となった PING という名前を提案しました。これはPING は GIF ではないという意味の再帰的頭字語です。[ 10 ] [ 11 ]また、拡張子.png も提案しました。後に実装されたその他の提案には、deflate 圧縮アルゴリズムと24 ビット カラーのサポートが含まれており、GIF に後者が欠けていたことも、チームが独自のファイル形式を作成する動機となった。このグループは PNG 開発グループとして知られるようになり、議論が急速に拡大するにつれて、後にCompuServeフォーラムに関連付けられたメーリングリストを使用するようになった。[ 3 ] [ 12 ]
PNG の完全な仕様は、1996 年 10 月 1 日にWorld Wide Web Consortium (W3C)の承認の下で公開され、その後1997 年 1 月 15 日にRFC 2083 として公開されました。仕様は 1998 年 12 月 31 日にバージョン 1.1 として改訂され、ガンマと色補正の技術的な問題に対処しました。1999 年 8 月 11 日に公開されたバージョン 1.2 では、仕様の唯一の変更として iTXt チャンクが追加され、1.2 の再フォーマット版が 2003 年 11 月 10 日に W3C 標準の第 2 版として公開され[ 13 ]、2004 年 3 月 3 日に国際標準 ( ISO/IEC 15948:2004 )として公開されました[ 14 ] [ 1 ]
GIF はアニメーションを可能にするが、当初 PNG は単一画像フォーマットであるべきだと決定された。[ 15 ] 2001 年、PNG の開発者は、アニメーションをサポートするMultiple-image Network Graphics (MNG) フォーマットを公開した。MNG は、ある程度のアプリケーション サポートを獲得したが、主流の Web ブラウザでは十分ではなく、Web サイトの設計者や発行者の間では使用されなかった。2008 年、一部のMozilla開発者は、同様の目標でAnimated Portable Network Graphics (APNG) フォーマットを公開した。APNG は、 GeckoおよびPrestoベースの Web ブラウザでネイティブにサポートされているフォーマットであり、ソニーのPlayStation Portableシステムでのサムネイルにもよく使用されている (通常の PNG ファイル拡張子を使用)。2017 年、Chromium ベースのブラウザが APNG のサポートを採用した。2020 年 1 月、Microsoft Edge がChromiumベースになったため、APNG のサポートを引き継いだ。これにより、主要なブラウザはすべて APNG をサポートするようになった。
PNGワーキンググループは、2021年9月14日以来、PNG仕様の維持と開発のためにW3Cによって設立されました。APNG、ハイダイナミックレンジ(HDR)、Exifデータの適切なサポートを追加したPNG仕様の第3版は、2022年10月25日に最初の公開作業草案として公開され[ 16 ]、最終的に2025年6月24日にW3C勧告となりました[ 17 ] [ 18 ]。
オリジナルのPNG仕様は、コンピュータグラフィックスの専門家と愛好家からなる臨時のグループによって作成されました。フォーマットに関する議論と決定は電子メールで行われました。RFC 2083に記載されているオリジナルの著者は次のとおりです。[ 19 ]

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


DEFLATEを適用する前に、データは予測方法によって変換されます。画像全体には単一のフィルタ方法が使用され、各画像ラインに対しては、データをより効率的に圧縮できるように変換するためのフィルタタイプが選択されます。[ 40 ]スキャンラインに使用されるフィルタタイプは、インライン解凍を可能にするためにスキャンラインの前に付加されます。
現在のPNG仕様にはフィルタ方式が1つしかなく(方式0)、そのため実際には各行に適用するフィルタの種類を選択するしかありません。この方式では、フィルタはDPCMと同様に、前の隣接ピクセルの値に基づいて各ピクセルの値を予測し、実際の値から予測されたピクセルの色を減算します。このようにフィルタリングされた画像行は、特に上の行と似ている場合、元の画像行よりも圧縮率が高くなることがよくあります。これは、予測との差が一般的に0付近に集中し、すべての可能な画像値に分散されないためです。DEFLATEは画像が2次元の実体であることを理解せず、画像データを単なるバイト列として扱うため、これは別々の行を関連付ける際に特に重要です。
フィルタ方式0には5種類のフィルタタイプがあります。各タイプは、左のピクセル( A )、上のピクセル( B )、左上のピクセル( C )の対応するバイト、またはそれらの組み合わせに基づいて、(フィルタリング前の画像データの)各バイトの値を予測し、予測値と実際の値の差をエンコードします。フィルタはピクセルではなくバイト値に適用されます。ピクセル値は1バイトまたは2バイト、あるいは1バイトあたり複数の値を持つことができますが、バイト境界をまたぐことはありません。フィルタタイプは次のとおりです。[ 41 ]
Paethフィルタは、 Alan W. Paethによるアルゴリズムに基づいています。[ 42 ]ロスレスJPEGで使用されるDPCM のバージョン、および1×2、2×1、または(Paeth予測器の場合は)2×2ウィンドウとHaarウェーブレットを使用した離散ウェーブレット変換と比較してください。
圧縮は、行ごとにフィルタの種類を適応的に選択することでさらに向上します。この改善と、PNG 書き込みソフトウェアで一般的に使用されている実装のヒューリスティックな方法は、フォーマットの作成中に多くの画像でこの方法をテストしたLee Daniel Crockerによって作成されました。 [ 43 ]フィルタの選択は、後述するようにファイルサイズの最適化の要素です。
インターレース方式を用いる場合、インターレースの各段階は個別にフィルタリングされるため、各段階を受信するたびに画像が段階的にレンダリングされます。ただし、インターレース方式は一般的に圧縮効率を低下させます。

PNGには、オプションで2次元7パスインターレース方式(Adam7アルゴリズム)が用意されています。これはGIFの1次元4パス方式よりも高度で、特に双三次補間などの補間アルゴリズムを使用する場合、低解像度の画像でも転送の早い段階でより鮮明な画像を表示できます。[ 44 ]
しかし、7パス方式は、より単純な方式に比べてデータの圧縮率を低下させる傾向がある。

PNGの基本フォーマットはアニメーションをサポートしていません。MNGはPNGの拡張機能であり、アニメーションをサポートしています。MNGはPNGグループのメンバーによって設計されました。MNGはPNGの基本的な構造とチャンクを共有していますが、はるかに複雑で、ファイルシグネチャも異なるため、標準のPNGデコーダーとは互換性がありません。そのため、ほとんどのWebブラウザやアプリケーションはMNGをサポートしていなかったか、サポートを終了しています。
MNG の複雑さから、Mozilla Foundation の開発者によってAPNGが提案されました。APNG は PNG をベースにしており、アニメーションをサポートし、MNG よりもシンプルです。APNG は、APNG をサポートしていない PNG デコーダーに対して、単一画像表示へのフォールバックを提供します。現在、APNG フォーマットはすべての主要な Web ブラウザでサポートされています。 [ 45 ] APNG はFirefox 3.0 以降、Pale Moon (すべてのバージョン)、Safari 8.0 以降でサポートされています。[ 46 ] Chromium 59.0 で APNG のサポートが追加され、[ 47 ] [ 48 ] Google Chrome もそれに続きました。Operaはバージョン 10 ~ 12.1 で APNG をサポートしていましたが、バージョン 15 でBlinkレンダリング エンジンに切り替えた際にサポートが終了しました。Opera 46 (Chromium 59 から継承) でサポートが再追加されました。[ 49 ] Microsoft Edge は、バージョン 79.0 で Chromium ベースのエンジンに切り替えて以来、APNG をサポートしています。
PNGグループは2007年4月にAPNGを採用しないことを決定した。[ 50 ] ANG、aNIM/mPNG、「PNG in GIF」、およびそのサブセット「RGBA in GIF」など、いくつかの代替案が議論されていた。[ 51 ]しかし、現在広く支持されているのはAPNGのみである。
2025年6月にPNGワーキンググループによって維持されているPNG仕様の第3版がリリースされ、[ 16 ] APNGはついに拡張機能として仕様に組み込まれた。[ 52 ]
16 進エディタのように表示され、左側には16 進数形式でバイト値が表示され、右側にはISO-8859-1の対応する文字が表示され、認識されない文字と制御文字はピリオドに置き換えられています。IDAT チャンクのオフセット 8 と 9 は、zlib データ形式に必要な 2 バイトのヘッダーを表します。オフセット 16 (同じチャンク) は、同じ形式で必要な 4 バイトのフッターを表します。さらに、PNG シグネチャと個々のチャンクは色でマークされています。人間が読みやすいタイプ名 (この例では PNG、IHDR、IDAT、IEND) のため、簡単に識別できます。
PNGを使用する理由:
PNG画像は古いブラウザではあまりサポートされていません。特にIE6はPNGのサポートが限られています。[ 56 ]

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。[ 57 ]
初期のウェブブラウザはPNG画像をサポートしていませんでした。JPEGとGIFが主な画像フォーマットでした。GIFは色深度が限られていたため、ウェブページ用にグラデーションを含む画像をエクスポートする際にはJPEGがよく使われていました。しかし、JPEG圧縮ではグラデーションがわずかにぼやけてしまいます。PNGフォーマットは、ファイルサイズを小さく保ちながら、指定されたビット深度でグラデーションを可能な限り正確に再現します。ウェブブラウザのPNGフォーマットのサポートが向上するにつれて、小さなグラデーション画像にはPNGが最適な選択肢となりました。現代のブラウザでは、CSSを使用してグラデーションを作成できるため、グラデーションを表示するために画像は一切必要ありません。
JPEG-LSはJoint Photographic Experts Groupによる画像フォーマットですが、上記で説明した他の非可逆 JPEG フォーマットほど広く知られておらず、サポートもされていません。PNG と直接比較可能で、標準のテスト画像セットがあります。[ 58 ]標準のテスト画像セットである Waterloo Repertoire ColorSet (JPEG-LS 適合性テストセットとは無関係) では、JPEG-LS は一般的に PNG より 10~15% 優れていますが、一部の画像では PNG の方が 50~75% ほど大幅に優れています。[ 59 ]したがって、これらのフォーマットの両方が選択肢であり、ファイルサイズが重要な基準である場合は、画像に応じて両方を検討する必要があります。
JPEG XLは、PNG のような可逆圧縮形式を置き換えるために開発された、はるかに改良された可逆圧縮または非可逆圧縮形式ですが、サポートされているものははるかに少ないです。[ 60 ] JPEG XL は JPEG より 50% 以上小さく、可逆圧縮でありながら実現できるため、PNG よりもさらに小さくなります。[ 61 ]また、高ダイナミックレンジ、広色域、および大きな色深度をサポートしています。[ 62 ] JPEG XL はデコードも非常に効率的で、置き換えることを意図した形式からのスムーズな移行を提供し、JPEG から可逆圧縮に変換できます。また、忠実度を損なうことなく圧縮することにも優れています。[ 63 ]
タグイメージファイルフォーマット(TIFF)は、非常に幅広いオプションを組み込んだフォーマットです。そのため、プロフェッショナルな画像編集アプリケーション間での汎用フォーマットとして便利ですが、アプリケーションにTIFFのサポートを追加するのは非常に大変な作業となり、画像操作を目的としないアプリケーション(Webブラウザなど)ではほとんどサポートされていません。また、拡張性が高いということは、ほとんどのアプリケーションが可能な機能のごく一部しか提供していないことを意味し、ユーザーの混乱や互換性の問題を引き起こす可能性があります。
TIFFで使用される最も一般的な汎用ロスレス圧縮アルゴリズムは、Lempel–Ziv–Welch (LZW) です。この圧縮技術はGIFでも使用されており、2003年まで特許で保護されていました。TIFFは、PNGが使用する圧縮アルゴリズム(圧縮タグ0008 16「Adobeスタイル」)もサポートしており、アプリケーションによる使用頻度とサポートは中程度です。また、TIFFは、PNGの圧縮アルゴリズムよりも優れた圧縮率で2値画像(ファックスや白黒テキストなど)を圧縮できるCCITT Group IVなどの特殊用途ロスレス圧縮アルゴリズムも提供しています。
PNGは非乗算アルファのみをサポートする[ 39 ]のに対し、TIFFは「関連」(乗算済み)アルファもサポートします。
WebPは、PNG、JPEG、GIFを置き換えることを目的としてGoogleが開発したフォーマットです。 [ 64 ] WebPファイルは、可逆圧縮と非可逆圧縮の両方に対応していますが、PNGは非可逆圧縮のみに対応しています。WebPはアニメーションにも対応しており、これは以前はGIFファイルのみが実現できた機能です。[ 65 ]
しかし、WebPがPNGよりも優れている主な点は、ファイルサイズが大幅に削減され、Webサイトに埋め込んだ際の読み込み時間が短縮されることです。Googleは、ロスレスWebP画像はPNGファイルよりも26%小さいと主張しています。[ 66 ]
WebPは、PNGとは異なり、さまざまな画像編集プログラムやソーシャルメディアのウェブサイトと互換性がないという批判を受けています。[ 67 ]また、WebPはすべてのウェブブラウザでサポートされているわけではないため、ウェブ画像ホスティングサービスでは、ユーザーに表示するための代替画像を作成する必要があり、WebPの潜在的なストレージ節約効果が相殺される可能性があります。[ 65 ]
AVIFは、 Alliance for Open Mediaによって開発された画像フォーマットです。AVIFは、PNG、 GIF、WebPなどの他の画像コーデックの欠点を補うために財団によって設計されました。[ 68 ]
AVIFは一般的にWebPとPNGの両方よりもサイズが小さい。[ 69 ] AVIFはアニメーションをサポートしているが、PNGは以前はサポートしていなかった。[ 70 ]
しかし、WebPと同様に、AVIFはPNGよりもサポートされているアプリケーションが少ない。[ 70 ]
PNG フォーマットの公式リファレンス実装は、プログラミングライブラリlibpngです。[ 71 ]これは、寛容なフリーソフトウェアライセンスの条件の下でフリーソフトウェアとして公開されています。そのため、フリーオペレーティングシステムでは重要なシステムライブラリとしてよく見られます。
PNG形式は、Adobe Photoshop、Corel Photo -Paint、Paint Shop Pro、GIMP、GraphicConverter、Helicon Filter、ImageMagick、Inkscape、IrfanView、Pixel画像エディター、Paint.NET、Xara Photo & Graphic Designerなど、多くのグラフィックプログラムで広くサポートされています( Canvaなどのオンライングラフィックデザインプラットフォームも含まれます)。PNGをサポートする一般的なオペレーティングシステムにバンドルされているプログラムには、 MicrosoftのPaint、AppleのPhotos / iPhoto、Previewなどがあり、GIMPは人気のあるLinuxディストリビューションにもバンドルされていることがよくあります。
Adobe Fireworks (旧Macromedia ) はネイティブファイル形式として PNG を使用しているため、他の画像編集ソフトやプレビューユーティリティでフラット化された画像を表示できます。ただし、Fireworks はデフォルトでレイヤー、アニメーション、ベクターデータ、テキスト、エフェクトのメタデータも保存します。このようなファイルは直接配布すべきではありません。Fireworks は代わりに、Web ページなどで使用できるように、余分なメタデータを含まない最適化された PNG として画像をエクスポートできます。[ 72 ]
PNG のサポートは、1997 年にInternet Explorer 4.0b1 (NT 用の 32 ビットのみ) とNetscape 4.04 で初めて登場しました。[ 73 ]
フリーソフトウェア財団[ 74 ]やワールドワイドウェブコンソーシアム(W3C)[ 75 ]の呼びかけ、 gif2pngなどのツール[ 76 ]、Burn All GIFsなどのキャンペーン[ 77 ]にもかかわらず、特に透明度に関してInternet Explorerのサポートが遅くバグがあったため、WebサイトでのPNGの採用はかなり遅かった。[ 78 ] PNGは2018年以降、Web上で最も使用されている画像ファイル形式である。[ 79 ]
PNGに対応しているブラウザには、Apple Safari、Google Chrome、Mozilla Firefox、Opera、Camino、Internet Explorer、Microsoft Edgeなど多数あります。詳細な比較については、「Webブラウザの比較(画像フォーマットのサポート)」をご覧ください。
特にInternet Explorer (Windows) のバージョン9.0 (2011年リリース)未満には、PNG画像を正しくレンダリングできない多くの問題がありました。[ 80 ]
PNGアイコンは、少なくとも1999年以降、GNOMEなどのデスクトップ環境において、ほとんどのLinuxディストリビューションでサポートされています。[ 92 ] 2006年には、Windows VistaでMicrosoft WindowsのPNGアイコンのサポートが導入されました。[ 93 ] PNGアイコンは、 AmigaOS 4、AROS、macOS、iOS、MorphOSでもサポートされています。さらに、AndroidはPNGを幅広く使用しています。
PNGファイルのサイズは、エンコードと圧縮の方法によって大きく異なります。これについては、「PNG: The Definitive Guide」で説明されており、いくつかのヒントが提供されています。[ 59 ]
GIFファイルと比較すると、同じ情報 (256 色、補助チャンク/メタデータなし) を持つ PNG ファイルは、効果的な圧縮機で圧縮すると、通常は GIF 画像よりも小さくなります。ファイルと圧縮機によっては、PNG はやや小さい (10%)、かなり小さい (50%)、やや大きい (5%) など様々ですが、大きな画像で大幅に大きくなることはまれです[ 59 ] 。これは、GIF のLZWと比較したPNG のDEFLATEのパフォーマンスと、PNG の予測フィルタの追加の事前圧縮レイヤーが 2 次元の画像構造を考慮してファイルをさらに圧縮するためです。フィルタリングされたデータはピクセル間の差異をエンコードするため、すべての可能な値に分散するのではなく、0 に近いクラスターを形成する傾向があり、DEFLATE でより簡単に圧縮できます。ただし、Adobe Photoshop、CorelDRAW、MS Paintの一部のバージョンではPNG の圧縮が不十分なため、GIF の方が効率的であるという印象を与えます。[ 59 ]
PNGファイルのサイズは、いくつかの要因によって変動します。
したがって、高い色深度、最大限のメタデータ(色空間情報と表示に影響しない情報を含む)、インターレース、および圧縮速度の間にはファイルサイズのトレードオフがあり、これらはすべて大きなファイルを生み出します。一方、色深度は低く、補助チャンクは少なく、またはなく、インターレースはなく、調整されていますが計算負荷の高いフィルタリングと圧縮が行われます。目的によってトレードオフは異なります。最大限のファイルはアーカイブや編集に最適かもしれませんが、最小限のファイルはウェブサイトでの使用に最適かもしれません。同様に、ファイルの編集と保存を繰り返す場合は、高速だが圧縮率の低いものが好まれますが、ファイルが安定している場合(アーカイブや投稿時)は、低速だが圧縮率の高いものが好まれます。インターレースはトレードオフです。大きなファイルの初期レンダリングを劇的に高速化(レイテンシを改善)しますが、特に小さなファイルでは、わずかな利点のためにファイルサイズが増加する(スループットが低下する)可能性があります。[ 59 ]
PNGは可逆圧縮形式ですが、PNGエンコーダは画像データを非可逆的に前処理することでPNGの圧縮率を向上させることができます。例えば、トゥルーカラーPNGを256色に量子化することで、インデックスカラータイプを使用してファイルサイズを削減できます。[ 94 ]
PNGファイルの保存において、プログラムによって効率が異なるのは、プログラムが使用するPNG圧縮方式の実装方法の違いによるものです。
多くのグラフィックソフト(Appleのプレビューソフトなど)は、 Webでの表示には通常不要な大量のメタデータや色補正データを含むPNGファイルを保存します。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ファイルは他の画像編集ソフトで生成されるものと同等のサイズになりますが、フラット化されたビットマップ以外では編集できなくなります。Fireworksは、サイズ最適化されたベクター編集可能なPNGファイルを保存することはできません。
他にも、性能の低いPNG圧縮ツールの顕著な例としては以下のようなものがあります。
圧縮率が低いとPNGファイルのサイズは大きくなりますが、画質や他のプログラムとの互換性には影響しません。
トゥルーカラー画像のカラー深度を8 ビットパレット (GIF など) に縮小すると、結果として得られる画像データは通常はるかに小さくなります。そのため、トゥルーカラー PNG は通常、カラーが縮小された GIF よりも大きくなりますが、PNG はカラーが縮小されたバージョンを同程度のサイズのパレット化されたファイルとして保存できます。逆に、一部のツールは、画像を PNG として保存する際に、元のデータが 8 ビットカラーのみを使用している場合でも、自動的にトゥルーカラーとして保存するため、ファイルが不必要に肥大化します。[ 59 ]これらの両方の要因により、PNG ファイルは同等の GIF ファイルよりも大きいという誤解が生じる可能性があります。
PNGファイルを最適化するための様々なツールが利用可能であり、それらは以下の方法で最適化を行います。
両者の特徴を簡単に比較したものを以下に示します。
以前は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をベースとした複数画像フォーマットが定義される可能性があります。そのようなフォーマットは、別のファイルフォーマットとして扱われます。
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)長さは、チャンクデータフィールドのサイズのみを示す32ビット符号なし整数です。
IHDR、IDAT、IENDなどの32ビットFourCCコードです。
IDAT。IENDトレーラー。iCCPプロファイル。gAMAガンマ。pHYsなピクセル寸法。sBITビット。