確認するために、ForeverWintrの分析を実験的にテストさせてください。
JPEG圧縮のための入力画像の最悪の種類(または任意の圧縮、本当に)は、理論的に非圧縮性であり、ノイズ一様にランダムRGBあります。したがって、netpbmツールを使用していくつか生成します。
$ rawtoppm < /dev/urandom 640 480 > rnd.ppm
$ pnmtopng < rnd.ppm > rnd.png
$ du -b rnd.*
923772 rnd.png
921615 rnd.ppm
(均一にランダムなRGBノイズ、ロスレスPNG形式、903 kb)
注(2017年3月):この回答を最初に書いて2013年にアップロードしたとき、上記の画像はPNG形式であったと確信しています。ある時点で静かにJPEGに変換されたようで、ここでの視覚的な比較は役に立たない。
新しいPNGテスト画像を再アップロードしようとしましたが、どうやらそれはimgurで何らかの任意のPNGファイルサイズ制限に達し、JPEGに自動変換されます。この問題を回避する方法があるかどうかはわかりませんが、少なくともLinuxボックスにアクセスできる場合は、指定されたコマンドをいつでも再実行して独自のテストイメージを生成できます。いずれにせよ、圧縮品質の直接的な視覚的比較を防ぐことを除いて、これは以下の分析を決して無効にしません。
それで、非圧縮PPMファイルは640×480×3 = 921,600バイト長であり、予想どおり、最小PPMヘッダー用に15バイトです。PNG形式を使用してロスレス圧縮しようとすると、サイズが2157バイト増加します。これは、おそらくPNGヘッダーとメタデータが占めており、非圧縮データを圧縮しようとする圧縮アルゴリズムが若干非効率である可能性があります。
(はい、それはピクセルあたり3つのバイトではなく、4です。グラフィックファイル形式として、単純なよう程度であってもPPMフォーマットは、取得することができ、ディスク上のピクセルあたり役に立たない4番目のバイトを格納するためのダムは十分ではありませんあり。もいくつかのこと特にアルファチャンネルも保存する必要がある場合、アライメントの理由でメモリ内で行うことの利点がありますが、イメージをファイルに書き込むときにこれらの理由は当てはまりません。
では、JPEGについてはどうでしょうか。最初に圧縮損失を最小化してみましょう(品質= 100、クロマサブサンプリングなし、浮動小数点DCT)。残念ながら、pnmtojpeg
マニュアルでは関連するすべてのオプションの設定方法が明確に説明されていません(具体的には、-sample
オプションは「libjpegドキュメントのファイルを参照するウィザードのオプション」セクションにリストされています)。代わりにGIMP。結果のファイルは次のようになります。
897249 rnd.jpg
(JPEG圧縮RGBノイズ、品質= 100、クロマサブサンプリングなし、876 kb)
何、どうやって小さくできますか?純粋なノイズは非圧縮性だと言っていませんか?それは、最高の品質であっても、通常のJPEG圧縮は完全に無損失ではないということです。GIMPで画像を再度開き、元の画像と比較すると、一部のピクセルの色の値が1つまたは2つのステップ(256から)シフトされていることがわかります。これらは、JPEG圧縮アルゴリズムが「ごまかし」、ここでもう1つ捨てて、変更が目立たないと推定したピクセルです。実際、人間の肉眼では、結果は元のものとまったく区別できませんが、それらの破棄されたビットは、ヘッダーとエンコードのオーバーヘッドを考慮した後でも、ファイルサイズの測定可能な減少につながります。
それが最高の品質でした。pnmtojpeg
デフォルト(品質= 75、サブサンプリング有効)などのより一般的な設定はどうですか?試してみよう:
$ pnmtojpeg < rnd.ppm > rnd2.jpg
$ du -b rnd2.jpg
185128 rnd2.jpg
(JPEG圧縮RGBノイズ、品質= 75、クロマサブサンプリング、184 kb)
すごい、901から184 kbまで!ただし、これはかなりアグレッシブな圧縮であり、画像を厳密に比較すると違いがはっきりとわかります。そのほとんどは、基本的に色(色相/彩度)データの75%を捨てるクロマサブサンプリングのためです。サブサンプリングを無効にしてGIMPで試してみると、350,618バイトのファイルが得られます。このファイルは、拡大しても元の画像に(少なくとも人間の目には)かなり近く見えます。
とにかく、このすべてのポイントは、それを実証することである、騒々しいあなたの夜空の写真があるかもしれないどんなに、あなたが選択する可能性がどのように高品質に関係なく、ただありません手立て 640×480 JPEGファイルには900を超える非常に大きい取得することができますkb。(まあ、カメラがマルチメガバイトのExifカラープロファイルまたはそれに同等の愚かさを付けていない限り) 。