jpegoptimを使ってjpg画像の再圧縮を行う

自社で運営しているサイトの速度高速化のため、大量の商品画像を再圧縮を行うことになりました。
いろいろ調べた結果、「jpegoptim」というツールがなかなかよさげだったため、紹介いたします。
jpegoptimはjpeg画像を見た目の劣化をほとんどない状態で再圧縮を行うためのツールです。
今回は作業サーバーがCentOS7系となります。

1.インストール
yumで簡単にできます。epel系のリポジトリのため、オプション設定が必要

yum --enablerepo=epel install jpegoptim

※参考:画像ファイル(jpg, png)のサイズをまとめて最適化する on Linux

2.使う
基本的な使い方は以下の通り。以下の例ではEXIF情報をすべて削除し、サイズを減少させる

jpegoptim --strip-all test,jpg

必要であれば、各種オプションを指定して実行。例えば、EXIF情報削除、品質80、プログレッシブJpegで再圧縮する場合

jpegoptim --strip-all --max=80 --all-progressive test,jpg

となります。公式ページにはほかにも多数のオプションが公開されているので、ぜひご確認ください。

注意事項として、オプションを指定しないと、上書き保存になります。
圧縮前の画像を保存しておく必要がある場合、事前にバックアップを取るか、「–dest」オプションを指定して圧縮ファイルの出力先を変更する必要があります。

3.複数ファイルを一括で圧縮する
実際の現場では、数万点の画像ファイルを圧縮する必要がありました。
findコマンドを使用することで、一括してファイルを処理することが可能です。

find ./ -name "*.jpg" -size +100k -exec jpegoptim -max=80 --strip-all {} \;

このコマンドでは、カレントディレクトリ配下のjpg画像で、ファイルサイズが100kb以上のものを対象に圧縮をかけます。

処理件数が多く、時間がかかることが見込まれる場合、nohup と & を組み合わせて実行するのが良いかと思います

nohup find ./ -iname "*.jpg" -size +100k -exec jpegoptim -max=80 --strip-all {} \; &

こうして実行すれば、万が一ターミナルを閉じても、バックグラウンドで実行され続けるので安心ですね

終わりに
実際に圧縮を行うと、多くのファイルが50%サイズが削減出来、多いものでは80% – 90%もサイズ削減が行えたものもありました。
話を聞くと、商品作成部隊結成当初、デジカメで作成した画像を何も圧縮せずそのままアップロードしていたとのことで、大幅に圧縮が効いたようです。

画像サイズが小さくなると、ディスク容量の節約はもちろん、サイト速度高速化にもつながります。
サイト速度が上がれば、SEOにも強くなり、集客にもつながるのでいいことづくめですね。

以上、jpg画像を圧縮するjpegoptimが便利でしたというお話でした。