Diredからpng画像を一括で最適化する

use pngquant on emacs dired

MacでEmacsを使うことを前提に進めます。
Diredでマークを付けたpng(24-32)型式の画像を一括で最適化する方法です。

pngquantを使うことで、png画像をある程度画質を保ったままでサイズを1/4程にし、 それに加えてImageOptimで最適化しています。

  1. 1. pngquantのページから"Binary for Mac OS X"をダウンロード
  2. 2. 解凍されたpngquantファイルを"/usr/bin/"や"/usr/local/bin"などパスの通った場所に置く
  3. 3. ImageOptimをダウンロード
  4. 4. 解凍されたImageOptim.appを/Applications/に配置

ImageOptim.appはGUIでの使い勝手がいいのでここではopenコマンドを介して利用しています。 Mac以外でコマンドラインから使いたい方はこちらを参照。

以下をEmacsの設定ファイルに書き込みます。


(defun dired-pngquant-optim ()
  (interactive)
  (let ((files (dired-get-marked-files t current-prefix-arg)))
    (mapc (lambda (e)
              (cond ((string-match ".*\\.png$" e)
                     (dired-do-shell-command
                     (concat
                      "pngquant -f --speed 1 --ext .png 256 *"
                      " && open -a ImageOptim.app *" ;; mac
                      )
                     nil (list e)))))
          files)
    (dired-unmark-all-marks)
    (revert-buffer)))

Diredから対象のpngファイルにマークを付け、M-x dired-pngquant-optim で使います。

ここまでたどり着くのに、
->TinyPNGを使う
->アップロード面倒くさい
->ImageAlphaを使う
->1つずつしか処理出来ない
->pngquantを使う
->毎回コマンドを呼び出すのが面倒くさい
という過程を経ました。

ということであまり需要がないかも知れませんがEmacsのDiredからpngquantを使う方法でした。