画像処理用のコマンドで画像を軽量化してみる

画像の軽量化

画像の軽量化に関連するコマンドのまとめです。macに標準で備わっているsipsコマンドの使い方を簡単にまとめています。

現状の画像ファイルの容量をみる

duコマンド

duコマンドは、ファイルやディレクトリのディスク使用量を表示できるコマンドです。このコマンドでまず現状のファイルサイズを調べます。

du ディレクトリ名またはファイル名
ディレクトリ名なら指定したディレクトリとそのサブディレクトリの容量を表示。ファイル名ならそのファイルの容量を表示。

du 
省略すると引数はカレントディレクトリになる。

du -a
all。ディレクトリ加えて各ファイルごとのサイズも表示する。

du -s 
summarize。サマライズ。要約する。対象ディレクトリの合計容量だけを表示する。

du -k
kByte単位で表示。

du -m
MByte単位で表示。

du -g
GByte単位で表示。

du -h
人間に読みやすいように単位をつけてファイル容量を表示する。

du . | sort -n -r
duの出力をパイプラインを使ってsortコマンドに渡す。
-nで数値として並び替え、-rで逆順にする。
するとディスク使用量が大きい順に並び替えて表示される。

df
ディスクの容量を表示する。duとセットで使えるといい。

軽量化の方法の選択肢

画像を軽量化できるツールには以下のようなものがあります。

  • macのプレビューアプリ。ちょっとした変更ならこれで足りる。
  • オンラインの無料ツール。ファイル数が多くなければ十分使える。
  • sipsコマンド 。mac標準の画像処理コマンド。
  • ImageMagick。コマンド操作ができる画像編集ソフト。
  • Photoshop。バッチ処理も設定できて、大量の画像の処理も簡単にできそう。ただし金がかかる。

sipsコマンドで画像ファイルを軽量化する

sipsコマンド

sipsはscriptable image processing systemの略。以下はいくつかの基本操作。

sips --resampleWidth 1440 image04.png
アスペクト比を固定し幅1440pxで指定した画像ファイルをリサイズ。

sips --resampleWidth 1440 image04.png --out image05.png
アスペクト比を固定し幅1440pxで指定した画像ファイルをリサイズし、指定したパス、ファイル名で書き出す。

sips -g all image06.png
指定した画像のプロパティを全て表示する。

sips -g pixelWidth -g pixelHeight image04.png
指定した画像の幅と高さを表示する。

sips -s dpiHeight 72 -s dpiWidth 72
-sはsetProperty key value。プロパティーに解像度を指定して数値を指定。

sips -s format jpeg image06.png --out image07.jpg
指定したファイルを指定したフォーマットに変換する。

sips -s formatOptions 60 image07.jpg --out image09.jpg
画像を圧縮をして書き出し。
ただ、オンラインの圧縮ツールの方が圧縮は効率よかった。

リサイズ

ピクセルの数を減らしイメージサイズを小さくします。ピクセルに与えらている色情報が減るのでファイルサイズも小さくなります。縦横の比率を固定し、横を1440pxでリサイズ。この例では、**でサブディレクトリ名に一致させ、その配下のPNG画像を処理対象にします。

sips --resampleWidth 1440 **/*.png

解像度を下げる

1インチあたりのピクセル数を減らします。Webで表示する画像の場合72dpiあればいいと言われています。人の目で識別できないレベルで解像度をあげてもデータ量だけが無駄に増えてしまうからです。高さと幅の解像度を設定します。

sips -s dpiHeight 72 -s dpiWidth 72 **/*.png

画像形式を変換する+圧縮する

この例では、PNG形式からJPEG形式に変換し、変換後のJPEG画像を圧縮します。
コマンドは少し工夫が必要です。まず拡張子なしのファイル名をまとめて取得し、sipsコマンドに引き渡します。{}の部分に拡張子なしファイル名が入ります。–out で別ファイルとして書き出します。

ls | xargs -I{} basename {} .png | xargs -I{} sips -s format jpeg -s formatOptions 50 {}.png --out {}.jpg

※ 画像のよい圧縮方法は画像データによるが、色数が多い画像ならJPEGの方が圧縮できる。JPEGの圧縮の仕組みでは体感の画質に影響ないようにデータを捨てているのでファイルサイズが小さくなる。