元の PNG 画像は 800x1200 で、約 34K を占めます。画像が GraphicsMagick によって 320x480 サイズにサイズ変更されると、結果の画像は約 37K を占めます。(比較のために、Windows 7 でペイントを使用して画像のサイズを変更すると、結果の画像は 40K になります)。画像のサイズ変更の要点は、スペースを節約することでした。画像サイズを縮小するには、GraphicsMagick をどのように使用すればよいですか?
2 に答える
PNG は可逆形式であり、最初に予測と呼ばれるステップを実行し、次に zlib で使用されているのと同じアルゴリズムを適用することによって画像データを圧縮します。予測ステップは、ファイルを効果的に圧縮するために重要なステップであり、以前の隣接ピクセルの値に基づいています。
それで、あなたが白黒の大きな PNG を持っているとしましょう (それは私が実際に意味するのは白黒のみを意味し、時にはグレースケールと混同する人もいます)。また、小さな市松模様ではないとします。この画像の多くの領域では、比較的大きな白い領域があり、次に比較的大きな黒い領域があり、以下同様です。プレディクタがこれらの大きな領域の 1 つにある場合、現在のピクセル強度が最後のピクセル強度と正確に等しいことを正確に予測するのに何の問題もありません。これにより、画像を記述するデータをより簡単に圧縮できます。
ここで、最近傍とは異なるリサンプリング フィルター (Lanczos としましょう) を使用して、この白黒画像をダウンスケールしてみましょう。これにより、白黒画像をグレースケール画像に変換できる可能性が高くなり、強度範囲が大幅に広がります。これにより、予測子の作業が非常に困難になる可能性があるため、最終的なファイル サイズが大きくなる可能性があります。
たとえば、白黒の 256x256 PNG 画像は 5440 バイトを必要とし、(3-lobed Lanczos を使用して) 120x120 にサイズ変更すると 7658 バイトが必要になり、別のサイズを (最近傍を使用して) 120x120 に変更すると 2467 バイトが必要になります。
PNG は圧縮形式です。最大限に圧縮されたアイテムを圧縮しようとすると、実際にはアイテムが大きくなることがあります。そのため、800x1200 のサイズを小さくしても、元のサイズが最小限に抑えられているため、元のサイズがすべて保持されている場合、これが発生することがわかります。これを実証するために、7zip を使用して一部のデータを超圧縮で圧縮してみてください。次に、圧縮ファイルを圧縮してみます。多くの場合、2 番目の圧縮ファイルは最初の圧縮ファイルよりも大きくなります。