JPEG/PNG/GIF画像をまとめてWebPに変換する
2019-07-08 Web

JPEG PNG GIF をまとめて WebP に変換するバッチファイルを作成しました。pngquant による減色処理とメタ情報削除 さらに Zopfli で再圧縮をおこない PNG ファイル自体の最適化もおこないます。

ダウンロード

minify-img.zip (987KB)

ダウンロードした minify-img.zip を展開すると バッチファイルと変換に必要なツールがすべて入っています。

同梱されているツールの詳細は legal フォルダー内の README.txt で確認することができます。

バッチファイル minify-img.bat の中身はシンプルです。FOR 文で下位フォルダー全体を走査して 拡張子 .png .jpg .gif のファイルに対してそれぞれ処理を行っています。ただし .png.webp .jpg.webp .gif.webp が既に存在する場合は それに対応するファイルは処理済みと見なして処理をスキップします。

ファイルサイズが最小になるように処理時間を度外視して最適なパラメーターを指定しています。ファイルサイズよりも処理時間を優先したい場合は cwebp.exe -z 9 -m 6 パラメーターの数字を小さくしてみてください。

JPEG の圧縮品質は 75 を指定しています。画像の劣化を抑えたい場合は cwebp.exe -q 75 パラメーターの数字を大きくしてみてください。ただし 品質に 85 よりも大きな値を指定すると出力ファイルサイズが極端に大きくなっていきます。品質を高める場合も 85 を上限として調整することをオススメします。

minify-img.bat
@ECHO OFF IF "%~1" == "" ( ECHO NO_ARGUMENTS EXIT /B 1 ) SET DIR=%~1 IF "%DIR:~-1%" NEQ "¥" ( SET DIR=%DIR%¥ ) IF NOT EXIST "%DIR%" ( ECHO NOT_FOUND: %DIR% EXIT /B 2 ) SET PATH=%~dp0;%PATH% FOR /R "%DIR%" %%p IN (*.png) DO ( IF NOT EXIST "%%p.webp" ( pngquant.exe --verbose --force --speed 1 --strip --nofs --output "%%p" "%%p" zopflipng.exe -y "%%p" "%%p" cwebp.exe -v -z 9 "%%p" -o "%%p.webp" ) ) FOR /R "%DIR%" %%j IN (*.jpg) DO ( IF NOT EXIST "%%j.webp" ( cwebp.exe -q 75 -m 6 "%%j" -o "%%j.webp" ) ) FOR /R "%DIR%" %%g IN (*.gif) DO ( IF NOT EXIST "%%g.webp" ( gif2webp.exe -v -min_size "%%g" -o "%%g.webp" ) )

使い方

バッチファイル minify-img.bat の引数に処理対象のフォルダーを指定します。引数として指定できるのはフォルダーのみです。ファイルを指定した場合は何も処理をしません。

処理対象フォルダーとして C:¥temp を指定する場合は以下のようになります。

コマンドプロンプト
C:¥>minify-img.bat C:¥temp C:¥temp¥sample.png: read 74KB file made histogram...15547 colors found selecting colors...2% selecting colors...5% selecting colors...22% selecting colors...38% selecting colors...55% selecting colors...72% selecting colors...75% selecting colors...91% selecting colors...100% moving colormap towards local minimum eliminated opaque tRNS-chunk entries...123 entries transparent mapped image to new colors...MSE=4.898 (Q=83) writing 256-color image as C:¥temp¥sample.png Quantized 1 image. Optimizing C:¥temp¥sample.png Input size: 21779 (21K) Result size: 21088 (20K). Percentage of original: 96.827% Result is smaller Time to read input: 0.023s Saving file 'C:¥temp¥sample.png.webp' Time to encode picture: 1.453s File: C:¥temp¥sample.png Dimension: 288 x 163 Output: 19680 bytes (3.35 bpp) Lossless-ARGB compressed size: 19680 bytes * Header size: 1280 bytes, image data size: 18374 * Lossless features used: PALETTE * Precision Bits: histogram=3 transform=3 cache=1 * Palette size: 256
ドラッグ アンド ドロップ
コマンドプロンプトを起動せずに エクスプローラーで処理したいフォルダーを minify-img.bat の上にドラッグ アンド ドロップする方法でも OK です。

これで C:¥temp 以下のサブフォルダーも対象として .png .jpg .gif WebP に変換されます。.jpg .gif についてはオリジナルのファイルがそのまま残りますが .png については pngquant Zopfli で最適化処理をしてオリジナルファイルを上書きします。ご注意ください。

この記事を共有しませんか?