これまで、JPEG/PNG画像の最適化ツール(Mozjpeg, Guetzli, Optipng, Zopfli, Pngquant)の性能と最適パラメータについて調べてきました。
- JPEG最適化ツールMozjpegとGuetzliの性能を徹底検証 - じーろぐ
- PNG画像最適化ツールOptipngとZopfliを使ってどこまでファイルサイズを小さくできるか検証する - じーろぐ
- 減色ツールPngquantの仕組みと最適パラメータを探る - じーろぐ
ファイルサイズを小さくする仕組みや最適なパラメータは理解できたのですが、実際に使うとなると(CLIなので)処理ごとにコマンドを入力する必要があり、めんどくさいです。 そこで、ドラッグアンドドロップで簡単に画像が変換できるように簡単なバッチファイルのフロントエンドを作ってみました。
動作デモ
こんな感じで動きます。 この例では、3つの画像ファイル(合計約1MB)を処理して185KB(元ファイルの1/5以下)にまでファイルサイズを削減しています。
事前準備や動作環境など
- バッチファイルなのでWindows専用です
- 動作にはMozjpeg (cjpeg-static.exe), Zopfli, Pngquant, ImageMagic(convert, identify)のバイナリが必要で、以下からダウンロードしてPATHを通しておいてください。
- (ブログ等へのアップロードを想定して)JPEGファイルのEXIFを削除しています。
制限や注意事項など
- PNGファイルは日本語ファイル名を扱えません(Pngquantの制限)
- これまでの検証でGuetzliは、処理に時間がかかりすぎる割にMozjpegとの性能差が小さいこと、 OptipngよりもZopfliのほうが性能で上回っていたので、GuetzliとOptipngは使っていません。
- パラメータはこれまでの検証結果で最適だと思われるパラメータにチューニングしてありますが(やや画質重視の設定)、使う場合は適宜調整してください
- この設定でもファイルサイズは元の半分以下になると思います
バッチファイル
Githubにアップロードしたので、以下からダウンロードしてください。
このエントリに埋め込むため、Gistにもアップしました。拡張子.batとして保存して使用することもできます。
Drag & Drop Image optimizer front end for Windows
おまけ:バッチファイルは罠が多すぎる。参考にしたサイトなど
今回は、windows上でドラッグアンドドロップで動作するようにしたかったので、バッチファイルを使いましたが結構罠が多かったです。 シェルスクリプトだと一行で書けることも異常にめんどくさかったり。以下、記事作成にあたり参考になったサイトを列挙しておきます。
- 久しぶりにバッチファイルを書くときに参考になるサイト
- バッチファイルでドラッグアンドドロップを実現
- ファイルパスからファイル名や拡張子を取り出す
- コマンドの実行結果の保存(シェルスクリプトの
var= ` whoami `
的なやつ。バッチファイルだと異様にめんどくさい) - 空行を出力したい場合は
echo.
- 最終的には使わなかったがお約束の遅延環境変数でハマった(丸括弧の中身がその場で評価されてしまう罠)
- Image Magic の identify コマンドの使い方(特定のExif情報の取り出し)