[小ネタ] pngquantを使って指定したディレクトリ内のPNG画像のサイズを小さくしてみた

2019.04.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

モバイルアプリサービス部の中安です。

ちょっとお仕事でサイズの大きなPNG画像をザザザっと圧縮する作業をしてたので、その方法をアウトプットしておきます。

ディレクトリ内のファイルサイズを見る

「ディレクトリ内のどのファイルが大きいのだろう」って調べたいときは ターミナルからこんな感じのコマンドを打ちます

$ cd [対象のディレクトリパス]
$ ls -lS
-rwxr-xr-x  1 hoge  staff  1661990  3 18 12:00 3.png
-rwxr-xr-x  1 hoge  staff  1633909  3 18 12:00 4.png
-rwxr-xr-x  1 hoge  staff  1587992  3 18 12:00 6.png
-rwxr-xr-x  1 hoge  staff  1480621  3 18 12:00 10.png
-rwxr-xr-x  1 hoge  staff  1388427  3 18 12:00 5.png
-rwxr-xr-x  1 hoge  staff  1372824  3 18 12:00 1.png
-rwxr-xr-x  1 hoge  staff  1365894  3 18 12:00 9.png
-rwxr-xr-x  1 hoge  staff  1343687  3 18 12:00 7.png
-rwxr-xr-x  1 hoge  staff  1317381  3 18 12:00 8.png
-rwxr-xr-x  1 hoge  staff  1274001  3 18 12:00 2.png
-rwxr-xr-x  1 hoge  staff  1037762  3 18 12:00 12.png
-rwxr-xr-x  1 hoge  staff   977785  3 18 12:00 13.png
-rwxr-xr-x  1 hoge  staff   946549  3 18 12:00 15.png
-rwxr-xr-x  1 hoge  staff   942369  3 18 12:00 11.png
-rwxr-xr-x  1 hoge  staff   915161  3 18 12:00 14.png

サイズが見える上にサイズ順に並んでくれます。

ディレクトリのサイズを見る

「ディレクトリ自体のサイズはどれくらいだろう」って調べたいときは ターミナルからこんな感じのコマンドを打ちます

$ cd [対象のディレクトリパス]
$ du -sh ./
  • -s は「中のディレクトリを個別に出さない」
  • -h は「人に読みやすいサイズで出す」

今回はざっくり見たかったのでこの2つのオプションをつけています

 18M	./

18Mあるということだそうな

圧縮

今回は pngquant というツールを使いました。

インストール

homebrew を使えばインストールは簡単ですん

$ brew install pngquant

これだけですね。一応、存在確認

$ which pngquant
/usr/local/bin/pngquant

圧縮実行

pngquantには色々とオプションはありますが、ディレクトリ内のPNGファイルを圧縮したかったので次のようなコマンドを打ちました。

$ cd [対象のディレクトリパス]
$ pngquant --ext .png --force --speed 1 --verbose ./*.png
  • --ext は、「出力ファイルの拡張子設定」です。デフォルトだとサフィックスが勝手についてしまうとのことです。
  • --force は、「強制上書き」オプションです。前述の--extで元ファイルと同じ拡張子を設定しているので、強制的に上書きする必要がありそうです。
  • --speed 1 は、「速度をとるか品質をとるか」のトレードオフオプションです。 1は品質優先なので、急ぎの方は10を指定するでもいいかもしれません。
  • --verbose は、「ターミナル上で状況が見れる」オプションです。このあたりは好みですね

他にもオプションはあるので、下記コマンドで確認してみましょう

$ info pngquant

ということで、コマンドを実行すると、指定したディレクトリ内のPNG画像が次々と圧縮されていきます。

結果

では、結果を見てみます。冒頭に書いたディレクトリ内のファイルサイズを確認するコマンドを打ちます。

$ ls -lS
-rw-r--r--  1 hoge  staff  609669  4  9 12:00 5.png
-rw-r--r--  1 hoge  staff  603274  4  9 12:00 3.png
-rw-r--r--  1 hoge  staff  602742  4  9 12:00 9.png
-rw-r--r--  1 hoge  staff  597543  4  9 12:00 4.png
-rw-r--r--  1 hoge  staff  592805  4  9 12:00 1.png
-rw-r--r--  1 hoge  staff  575950  4  9 12:00 6.png
-rw-r--r--  1 hoge  staff  552611  4  9 12:00 2.png
-rw-r--r--  1 hoge  staff  543809  4  9 12:00 10.png
-rw-r--r--  1 hoge  staff  533222  4  9 12:00 7.png
-rw-r--r--  1 hoge  staff  517770  4  9 12:00 8.png
-rw-r--r--  1 hoge  staff  486222  4  9 12:00 12.png
-rw-r--r--  1 hoge  staff  426991  4  9 12:00 15.png
-rw-r--r--  1 hoge  staff  422055  4  9 12:00 13.png
-rw-r--r--  1 hoge  staff  411984  4  9 12:00 11.png
-rw-r--r--  1 hoge  staff  375073  4  9 12:00 14.png

ディレクトリのサイズは

$ du -sh ./
7.5M	./

半分以下になりましたね!!

以上です