Windows で PNG 画像を最適化するドロップレットを作る

PNG 画像の画質をあまり落とさずにファイルサイズを最適化するサービスとして TinyPNG というものがある。画像形式や内容によって最適な圧縮をかけてくれるところは便利だが、いちいちダウンロードして再配置する必要があるので手間がかかる。
私が主に TinyPNG を使用したい場面は、アルファチャンネルを持つ PNG 画像を PNG-24 から PNG-8 にしたい場合だ (現在の Photoshop ではアルファチャンネルを持つ PNG-8 の出力に対応していないため)。そこでアルファチャンネルを持つ PNG-8 の出力のみに対応したドロップレットを作ることにした。

ドロップレットの作成

TinyPNG では内部的に pngquant というツールが使われているようなので、これを用いる。

まずこのページから「Binary for Windows (v2.7.2)」をダウンロードし、適当なディレクトリに展開する。
そして pngquant.exe と同じディレクトリに Optimize PNG.bat という名前でファイルを作成する。内容は付属の Drag PNG here to reduce palette automatically.bat を参考にした。

@echo off

set path=%~d0%~p0

:start

"%path%pngquant.exe" --force --verbose --ordered --speed=1 --quality=50-90 --ext "-new.png" %1
rename %1 "%~n1.orig%~x1"
rename "%~d1%~p1%~n1-new%~x1" "%~n1%~x1"

shift
if NOT x%1==x goto start

最後に使いやすい場所、たとえばデスクトップに、このバッチファイルへのショートカットを作成する。アイコンや名前を変えておくと分かりやすい。

ドロップレットの使い方

PNG 画像を最適化するには、ファイルをドロップレットにドラッグ & ドロップする。
すると元のファイルは 〜.orig.png という名前に変更され、最適化されたファイルが元のファイル名となる。
ファイルは複数選択できるが、ディレクトリ内のすべての画像を処理する、といった使い方はできない。また PNG 以外のファイルを指定した場合、もとのファイルの名前を変更してしまう。今後の課題としたい。