PNG形式は圧縮パラメータを持っているのでロスレスですか?

PNG形式はロスレス形式であると想定されていますが、画像をPNGファイルとして保存する場合、圧縮レベルを選択するように求められます。これは、PNG形式が実際にはロスレスではないことを意味しますか?今日のスーパーユーザーのQ&A投稿は、好奇心旺盛な読者の混乱を解消するのに役立ちます。

今日の質疑応答セッションは、コミュニティ主導のQ&AWebサイトのグループであるStackExchangeの下位区分であるSuperUserの好意で行われます。

質問

スーパーユーザーリーダーpkoutは、PNG画像の品質が選択した圧縮レベルによって影響を受けるかどうかを知りたいと考えています。

私が理解しているように、PNGファイルは可逆圧縮を使用しています。ただし、Gimpなどの画像エディタを使用して画像をPNGファイルとして保存しようとすると、0〜9の範囲の圧縮レベルが要求されます。

圧縮画像の視覚的精度に影響を与える圧縮パラメータがある場合、PNGはどのようにロスレスになりますか?誰かが私にこれを説明できますか?圧縮レベルを9に設定した場合にのみ、ロスレス動作が得られますか?

選択した圧縮レベルによって画像の品質に違いはありますか?

答え

スーパーユーザーの貢献者であるLordNeckbeardとjjlinが答えを持っています。まず、LordNeckbeard:

PNGは圧縮されていますが、ロスレスです

圧縮レベルは、ファイルサイズとエンコード/デコード速度の間のトレードオフです。過度に一般化すると、FLACなどの非画像形式でも同様の概念があります。

異なる圧縮レベル、同じデコードされた出力

圧縮レベルが異なるためファイルサイズは異なりますが、実際にデコードされる出力は同じになります。MD5マルチプレクサを使用して、デコードされた出力のMD5ハッシュをffmpegと比較できます。これは、いくつかの例で最もよく示されています。

PNGファイルを作成する

  • デフォルトでは、ffmpegはPNG出力に-compression_level100を使用します。
  • この例では、100(最高の圧縮レベル)は、0(最低の圧縮レベル)よりもエンコードに約3倍、デコードに5倍の時間がかかることがわかりました。

ファイルサイズの比較

PNGファイルをデコードし、MD5ハッシュを表示します

両方のハッシュが同じであるため、デコードされた出力(圧縮されていないrawファイル)がまったく同じであることが保証されます。

jjlinからの回答が続きます:

PNGはロスレスです。この場合、GIMPは最良の表現を使用していない可能性があります。

圧縮の品質または圧縮のレベルと考えてください。圧縮率を低くすると、ファイルは大きくなりますが、作成にかかる時間は短くなります。一方、圧縮率を高くすると、ファイルが小さくなり、作成に時間がかかります。

通常、収穫逓減が発生します。つまり、最高の圧縮レベルに到達するときにかかる時間の増加と比較して、サイズの減少はそれほど大きくありませんが、それはあなた次第です。

説明に追加するものがありますか?コメントで音を立ててください。他の技術に精通したStackExchangeユーザーからの回答をもっと読みたいですか?こちらのディスカッションスレッド全体をご覧ください。