画像圧縮ユーティリティpngquantオプション10の紹介

画像容量のためにお悩みの方はいらっしゃいますか? 特にSEO最適化をしたり、ゲームを制作する方の場合には何よりも容量最小化しなければなりませんか? 画像圧縮ユーティリティpngquantを紹介します。

pngquantとは?

pngquantは、Kornel Lesińskiを主軸に複数の貢献者と一緒に作成したlibimagequantライブラリに基づく損失PNG圧縮プログラムです。 基本的には、画像に損失を生じながら容量を減らす構造です。 24ビットまたは32ビットのPNGファイルよりも効率的でありながら、アルファチャンネル付きの8ビットPNGフォーマットに変換しながら、画像の一部の損失によって容量の60〜80%ほどを減らすことができます。 圧縮された画像は標準に準拠しており、Webブラウザとオペレーティングシステムの両方で利用可能です。

pngquantを使ったプログラム

GUIプログラムの種類

残念ながらpngquantを利用したLinux用のGUIアプリケーションはありませんでしたが、MacOSとWindows用に使用できるものとして、ImageOptimPngyuPNGoo、そしてAdobe Photoshop用のPlug-in SuperPNGがあります。

図 1. 画像圧縮ユーティリティ pngquant が適用された Mac 用 Widnows 用 GUI アプリケーション
図 1. 画像圧縮ユーティリティ pngquant が適用された Mac 用 Widnows 用 GUI アプリケーション

コマンドライン用アプリケーション

Ubuntu

Ubuntuでは、以下のコマンドラインでユーティリティをインストールできます。

sudo apt install pngquant
ShellScript

MAC, Windows

MacOS用とWindows用のバイナリはpngquantホームページからダウンロードできます。

ソースコードの構築

pngquantのgithubからソースコードを受け取り、直接コンパイルすることもできます。 必ずそうしなければならない場合であれば、ただ配布を利用することをお勧めします。

使い方

GUI用アプリケーションの説明は省略します。 ここでは、cli用アプリケーションpngquantのオプションについて一緒に見てみましょう。

ヘルプ

まず、以下のように入力すると、すべてのオプションの説明を確認できます。 pngquantとだけ入力しても説明は確認できます。 -hの代わりに–helpも利用可能です。

pngquant -h
ShellScript

–ext 拡張オプション

–ext 옵션을 사용하면 기존 파일 이름 뒤에 변환한 파일 이름의 확장자를 결정합니다. –ext -new.png와 같은 옵션으로 추가해 주면, 예를 들어서 원본 이미지 파일이 abcd.png인 경우 abcd-new.png의 형식으로 변환된 결과를 저장하게 됩니다.

–quality min-max または -Q min-max

minとmaxは0(最悪)から100(完璧)の値を持ちます。 max値は、画質を満たすか超過するのに必要な最小限の色を使用します。 そして、変換結果がmin値のクオリティよりも良くない場合は保存されず、状態値99で終了します。 たとえば、–quality = 65-80のように使用できます。

–speed N オプション

Nは1から10までの値を持ち、1は最も高品質の結果を生み出すのではなく、10は品質が5%低いのではなく、速度は8倍速いです。 11はディザリングを無効にし、圧縮レベルを下げます。 つまり、速度と品質の間でトレードオフが発生します。

–strip オプション

オプションのメタデータを削除します。

–nofs オプション

Floyd-Steinbergディザリングを無効にします。

–floyd=N オプション

ディザリングのレベルを設定できます。 Nは0はディザリングをしないこと、1はディザリングを最大にすることです。 “=”表示を必ず入れてください。 そして、N値は0から1の間の小数点を持つ値に設定できます。

–posterize bits オプション

チャンネルあたりの色の最下位ビットを切り捨てるかどうかを設定できます。 画像深度が低い画面に表示されるときに使用します。 pngquantは、ほぼ不透明なピクセルが完全に不透明になり、半透明の色の量を減らします。 bits値は0から4まで使用できます。 4の場合には多く切り捨てられるので、画像にダメージが多くなります。 代わりに容量は減ります。

–force オプション

出力ファイルが存在する場合は上書きします。 -fとしても使用します。

–skip-if-larger オプション

変換の結果、元のファイルよりも大きいファイルが作成されると、イメージは保存されません。

オプションの使用例

色数を64に減らして画像を圧縮

以下のように書き込むと、結果の画像は64色の画像として保存されます。 拡張子が指定されていないため、image-fs8.pngとして保存されます。

pngquant 64 image.png
ShellScript

品質 よろしければ画像圧縮して原稿に上書きする

あまりにも多くの品質を失うことなく縮小することができれば、オリジナルに上書きする命令です。

pngquant -f --ext .png --quality 70-95 image.png
ShellScript

厳しい設定で最も望ましい結果を作成する

品質は大きな損失なしで、ディザリングは中程度にし、最下位1ビットを切り、圧縮は最大にしたい、色は128色にしたい、変換されたファイルの拡張子はimage-re.pngになりたい そして、何度も出力しても同じファイルに上書きされるようにするには、次のような命令を実行します。

pngquant -f \
  --ext -re.png \
  --quality 70-95 \
  --posterize 1 \
  --floyd=0.5 \
  --speed 1 \
  128 image.png
ShellScript

どうするのが一番いいのかわかりませんが、うまく調整してみると、tinyPNGのようなサービスに似たレベルまで作り出すことができるようです。

pngquantを使用した画像圧縮の適用例

上にあるものがイメージ圧縮したもので、下のものはオリジナルイメージです。

私はこの画像の場合に入った色もあまりなくて簡単だと思ってpngquant 32 image.pngと実行しましたが、このような結果が出ました。 色を多く表現する必要がない画像の場合は、色数を減らして画像圧縮をしても大きな無理が見えません。 容量が本当に画期的に減少し、約23%のレベルまで減少しました。

図 2. 画像圧縮を適用したものと適用しなかった(元の)画像の比較
図 2. 画像圧縮を適用したものと適用しなかった(元の)画像の比較

参考資料

pngquantのホームページをご覧ください。詳細は確認できます。
Lou Parkのブログに、損失圧縮プログラムTinyDogeを作成した回顧記録(韓国語ページ)があります。

コメントする