画像を使っている各社サービスは多いはず。
数が多い場合は表示スピード、コストに影響するのでとても大事です。
そこで各種画像圧縮サービスを比較してみた。
非可逆圧縮(lossy)、可逆圧縮(lossless, 正確には画像最適化という言うべきらしい)、両方に関して着目しています。
TL;DR
調査の目的
- ファイルサイズを抑えてサムネイル画像を作成したい
- lossy圧縮も検討
- lossless圧縮もしたい
- サイズ縮小のみを考慮してオプションを選択した
- Linuxサーバで使いやすそうなやつにしたい
- jpegminiも興味深かったが除外
調査しなかったこと
- 処理にかかる時間
- マシンリソース
対象
iPhone6 で撮影した適当に選んだ恥ずかしくない写真。
800KB〜3MB程度。
環境
macOS 10.11.6(15G1217) El Capitan
jpegoptim --version
jpegoptim v1.4.4 x86_64-apple-darwin15.6.0
Copyright (c) 1996-2016, Timo Kokkonen
libjpeg version: 8d 15-Jan-2012
Copyright (C) 2012, Thomas G. Lane, Guido Vollbeding
jpegtran -v
Independent JPEG Group's JPEGTRAN, version 8d 15-Jan-2012
Copyright (C) 2012, Thomas G. Lane, Guido Vollbeding
/usr/local/Cellar/mozjpeg/3.1_1
準備
# わかりやすくサンプル画像を連番にする
ls *.jpg | awk '{ printf "mv %s %02d.jpg\n", $0, NR }' | sh
# 毎回コピーしてやってます(findの結果からファイル名を取るのが面倒で…)
cp org/* ./
jpegtran
macには標準で入っている?
サイズ変更や回転もできるみたい。
find `pwd` -name "*.jpg" -maxdepth 1 -type f -exec jpegtran -copy none -optimize -outfile {} {} \;
mkdir jpegtran
mv *jpg jpegtran
jpegoptim
losslessだけでなく、lossyな圧縮もできる。
jpegoptim --strip-all *.jpg
mkdir jpegoptim
mv *jpg jpegoptim
jpegoptim(lossy, quality 80)
jpegoptim --strip-all -m80 *.jpg
mkdir jpegoptim80
mv *jpg jpegoptim80
mozjpeg
インストールが難しそうな空気を感じましたがbrewにありました。
ありがたや。
mozjpegにはいくつかのコマンドがあり、今回使ったのは、jpegtran
とcjpeg
です。
まずは、jpegtran
。可逆圧縮をしてくれるものです。
brew install mozjpeg
find `pwd` -name "*.jpg" -maxdepth 1 -type f -exec /usr/local/Cellar/mozjpeg/3.1_1/bin/jpegtran -outfile {} -optimise -copy none {} \;
mkdir mozjpeg
mv *jpg mozjpeg
まずは、cjpeg
。非可逆圧縮をしてくれるものです。
mozjpeg(lossy, quality 80)
find `pwd` -name "*.jpg" -maxdepth 1 -type f -exec /usr/local/Cellar/mozjpeg/3.1_1/bin/cjpeg -optimize -quality 80 -outfile {} {} \;
mkdir mozjpeg80
mv *jpg mozjpeg80
集計
# ファイル名とサイズをtab区切りにしてクリップボード => google spread sheetコピペ
ls -l */*jpg | awk '{print $9 "\t" $5}' | pbcopy
まとめ
無駄だろうとは思いつつ、興味本位で、mozjpeg80に対してlossless圧縮を行ったところ、mozjpegに関してはちょっと小さくなった!
拡大して細かい部分を拡大してみました。左がオリジナル、右がmozjpeg(quolity 80)。
僕の古いモニタでは良し悪しがわからないです
会社のmacbookで見てみたい。