OSXでmozjpegを使おうと思ったら、mozjpegのコマンドcjpegが使えないというか、cjpegは私の環境では
/usr/local/bin/cjpeg
を指す事になっており、それに気づかず、自分のmozjpegはセルフビルドしてないからjpeg to jpegの圧縮に対応してないのだろうか、とか混乱しまくったので、誰か他にも同じような人が出て来る事の内容に書いておきます。
brew install mozjpeg
でmozjpegをインストール
私のmozjpegはversion3.2でした。
/usr/local/Cellar/mozjpeg/3.2/
以下にインストールされています。
よってこれをパスの通ったディレクトリにシンボリックリンクを作ってあげます。
ln -s /usr/local/Cellar/mozjpeg/3.2/bin/jpegtran /usr/local/bin/mozjpegtran
ln -s /usr/local/Cellar/mozjpeg/3.2/bin/cjpeg /usr/local/bin/mozcjpeg
これでmozjpegが使えるようになりました。
mozjpeg -optimize -quality 80 infile.jpg > outfile.jpg
とする事で動作します。
手元のjpegファイルではmozjpegを使う事によって80%のファイル容量削減に成功しました。画質はかなり高く、相当ズームしてみないと違いはわかりません。
かなり使えそうなので、ブログ用の写真画像を用意するスクリプトにmozjpegをかましてみました。今後は画像容量の削減にかなり役立ってくれそうです。
下のコードは、リサイズ圧縮したい画像のあるディレクトリで実行すると、長辺をsizeで指定したサイズに比率を維持したままリサイズし、それらをmozjpegを使って圧縮するrubyによるスクリプトです。
別途imagemagickをインストールしてお使いいただけます。
#!/usr/bin/ruby
size="1024"
quality="85"
resized_delete=false
#imagemagick resize
resize_cmd = "mkdir resized; find ./ -name '*jpg' -type f | xargs -I@ convert -resize "+size+"x"+size+" -verbose @ ./resized/@"
value = `#{resize_cmd}`
#mozjpeg compression
puts "***mozjpeg_compression***\n"
#処理に必要なファイル集めて保存場所の作成
p files=`find ./* -mindepth 1 -name "*jpg"`.chomp().split("\n")
comp_cmd="mkdir resize_and_compressed;"
#mozjpeg実行
files.map { |f| comp_cmd+="mozcjpeg -optimize -quality "+quality+" "+f+" > " +f.gsub('./resized/','./resize_and_compressed/') +";"}
value = `#{comp_cmd}`
#1024pxオリジナルの削除
if resized_delete == true then
`#{"rm -rf ./resized"}`
end
上記スクリプトで1024pxにリサイズした画像の圧縮前と圧縮後のサンプルを置いておきます。
圧縮前(471kB)
圧縮後(quality85 111kB)
この記事へのコメントはありません。