Webサイトのパフォーマンス改善やアプリの軽量化において、画像の最適化は避けて通れない課題です。特に透過情報を持つPNGファイルはサイズが大きくなりがちですが、pngquantを使用することで、見た目の美しさを保ったままファイルサイズを 70%前後カット することが可能です。
本記事では、pngquantのインストールから、技術的な仕組み、実戦で使えるコマンドオプションまでを詳しく解説します。
1. pngquantとは?
pngquantは、ロスレス(可逆)に近い品質を維持しつつ、ロスあり(非可逆)圧縮を行うコマンドラインツールです。
技術的な仕組み
通常のPNG(PNG-24/32)が1,677万色を扱うのに対し、pngquantは「ベクトル量子化(Vector Quantization)」というアルゴリズムを用いて、画像を256色以下のインデックスカラー(8-bit RGBA)に変換します。
- パレット生成: 画像内で最も重要な色を抽出する高度なアルゴリズム。
- ディザリング: アルファチャネル(透過)を保持しつつ、色の境界にノイズを混ぜることでグラデーションの段差(マッハバンド)を目立たなくさせます。
2. インストール手順
各環境に合わせたインストール方法です。
macOS (Homebrew)
brew install pngquant
Linux (Ubuntu/Debian)
sudo apt-get update
sudo apt-get install pngquant
Windows
公式サイトからバイナリをダウンロードし、環境変数PATHを通すか、実行ファイルを直接利用します。
最新版や最適化されたビルドが必要な場合:
git clone --recursive https://github.com/kornelski/pngquant.git
cd pngquant
./configure
make
sudo make install
3. 基本的な使い方
最も標準的な実行コマンドは以下の通りです。
pngquant --ext .png --force image.png
| オプション | 説明 |
--ext .png | 出力ファイルの拡張子。既存のファイルに上書きする場合は.pngを指定。 |
--force | 出力先と同名のファイルがある場合に強制的に上書きする。 |
--speed 1 | 圧縮速度(1〜11)。1が最も高品質(低速)、11が最速(低品質)。デフォルトは3。 |
--quality 60-80 | 最小・最大品質(0-100)。設定した下限を下回る場合は保存をスキップします。 |
4. エンジニア向けの高度なテクニック
ディレクトリ内の画像を一括処理
シェルスクリプトやfindコマンドを組み合わせて、プロジェクト内の画像をまとめて最適化します。
# 階層下の全PNGを圧縮(元ファイルは維持し、-fs8.pngとして出力)
find . -name "*.png" | xargs pngquant
Webサービス等のバックエンドでの利用例(Python)
Pythonのプログラムからpngquantを呼び出して、アップロードされた画像をリアルタイムに圧縮する例です。
Python
import subprocess
def compress_png(input_path, output_path):
cmd = ["pngquant", "--quality=65-80", "--output", output_path, input_path]
try:
subprocess.run(cmd, check=True)
except subprocess.CalledProcessError as e:
# 指定品質を下回るとエラーコード99を返す特性を利用
if e.returncode == 99:
print("品質維持が困難なため、圧縮をスキップしました。")
5. 他のツール(optipng / oxipng)との違い
PNG圧縮ツールはいくつかありますが、役割が異なります。
| ツール | 種類 | 特徴 |
| pngquant | ロスあり | サイズ削減率が最も高い。 色数を減らすため、微細な色変化は失われる。 |
| optipng | ロスレス | メタデータの削除やIDATの再構築を行う。画質は1bitも変わらないが、削減率は低い。 |
| oxipng | ロスレス | Rust製の高速なロスレス圧縮ツール。マルチスレッド対応で非常に速い。 |
実務でのベストプラクティス:
まず pngquant で色数を最適化し、その後 oxipng 等でロスレス圧縮を重ねがけすると、極限までサイズを削ることができます。
6. まとめ
pngquantは、特にモバイルアプリやトラフィックの多いWebサイトにとって、コストパフォーマンス最高の最適化手段です。
- 256色への量子化により、ファイルサイズを劇的に落とす。
- 透過(Alpha)を維持できるため、UIパーツに最適。
- CI/CDパイプラインに組み込むことで、自動的にデプロイ時の画像最適化が可能。
開発環境で一度 pngquant --version を叩き、その強力な圧縮性能を体感してみてください。

コメント