Jpegoptimを導入してJPG画像の容量を圧縮する

ブログやWebサービスをやってく上で問題となるのが画像の容量です。

そのままアップロードしていると無駄に転送量が増えたり、ブラウザの表示が遅くなる原因になります。

最近はJPEGminiなどのWebサービスがあり大変便利ですが、大量に画像があると非常に手間がかかります。

となると自前でやるしかないわけですが、そもそも画像圧縮サービスはどうやって容量削減しているのかを調べてみると、Compressor.ioというWebサービスがJpegoptimというソフトを使用していることが分かりました。

実際使用してみて結構良かったので、Jpegoptimのインストール方法と使い方をまとめてみます。

ちなみに、Jpegoptim以外の画像最適化ツールに関する記事も書いているのでよかったらどうぞ。

Jpegoptimをインストール

使用したOS

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

インストール手順

まずはJpegoptimのRPMパッケージを作成するためにrpmbuildをインストールします。

yum install rpm-build

続いて、rpmbuildの作業ディレクトリを作成。

mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

RPMパッケージ作成に必要なspecファイルをダウンロードする。

wget https://raw.githubusercontent.com/tjko/jpegoptim/master/redhat/jpegoptim.spec -P ~/rpmbuild/SPECS

Jpegoptim本体をダウンロード。

記事更新時点での最新バージョンは1.4.6です。

wget https://www.kokkonen.net/tjko/src/jpegoptim-1.4.6.tar.gz -P ~/rpmbuild/SOURCES

コンパイラとlibtoolがインストールされていない場合はインストールしておく。

yum install gcc
yum install libtool

Jpegoptimに必要なlibjpegをダウンロード。

記事更新時点での最新バージョンは9cです。

ですが、Jpegoptimは旧バージョンの6bでないと動かないので注意してください。

wget http://www.ijg.org/files/jpegsrc.v6b.tar.gz

もし、下記のようなエラーが出るときはlibjpegのバージョンが間違っているのでインストールし直してください。

Wrong JPEG library version: library is 62, caller expects 90

libjpegをインストール。

バージョン6bはconfigureする際に–enable-sharedオプションを付けないと共有ライブラリが作成されません。

さらに、makeとmake installの際にLIBTOOL=libtoolをつけてlibtoolを使わせるようにします。

tar xzvf jpegsrc.v6b.tar.gz
cd jpeg-6b
./configure --enable-shared
make LIBTOOL=libtool
mkdir -p /usr/local/man/man1
make install LIBTOOL=libtool

JpegoptimのRPMパッケージを作成。

rpmbuild -ba ~/rpmbuild/SPECS/jpegoptim.spec

Jpegoptimがlibjpegを読み込めるようにシンボリックリンクを作成。

ln -s /usr/local/lib/libjpeg.so.62 /usr/lib64/libjpeg.so.62

作ったRPMパッケージを使いJpegoptimをインストール。

rpm -ivh --nodeps ~/rpmbuild/RPMS/x86_64/jpegoptim-1.4.6-1.x86_64.rpm

コマンドを入力してバージョン情報が出力されればインストールは完了です。

[root@localhost jpeg-6b]# jpegoptim -V
jpegoptim v1.4.6  x86_64-unknown-linux-gnu

Jpegoptimを使ってみる

Jpegoptimは下記のように入力していきます。

jpegoptim オプション ファイル名

画像に含まれる情報を削除する

JPG画像が持っているExifやコメントなどのデータを削除し、無劣化で容量を削減します。

全てのデータを削除する場合は–strip-allを付けて実行します。

jpegoptim --strip-all ファイル名

実行例

[root@localhost ~]# jpegoptim --strip-all /home/nao/デスクトップ/mba.jpg
/home/nao/デスクトップ/mba.jpg 800x486 24bit N JFIF  [OK] 50410 --> 50410 bytes (0.00%), skipped.

個別に削除したい場合は次のようにします。

・コメントのみ
jpegoptim --strip-com ファイル名
・Exifのみ
jpegoptim --strip-exif ファイル名
・IPTCのみ
jpegoptim --strip-iptc ファイル名
・ICCプロファイルのみ
jpegoptim --strip-icc ファイル名
・XMPのみ
jpegoptim --strip-xmp ファイル名

逆にデータを削除しない場合は–strip-noneを付けます。(デフォルトでデータ保持されるのでまず使いません)

jpegoptim --strip-none ファイル名

品質を指定して圧縮

品質(クオリティ)を指定して画像を圧縮します。
指定した品質によって画質が劣化していきます。
品質は1~99の数字を入力してください。

jpegoptim -m品質 ファイル名
または
jpegoptim --max=品質 ファイル名

実行例 品質50

[root@localhost ~]# jpegoptim -m50 /home/nao/デスクトップ/mba.jpg
/home/nao/デスクトップ/mba.jpg 800x486 24bit N JFIF  [OK] 50410 --> 22044 bytes (56.27%), optimized.

実行例 品質1

[root@localhost ~]# jpegoptim -m1 /home/nao/デスクトップ/mba.jpg
/home/nao/デスクトップ/mba.jpg 800x486 24bit N JFIF  [OK] 50410 --> 3794 bytes (92.47%), optimized.

サイズを指定して圧縮

画像をKB単位で指定して、そのサイズまで圧縮します。
指定したサイズによって画質が劣化していきます。
また、数字の後に%を付けることで圧縮率を指定することもできます。

jpegoptim -Sサイズ ファイル名
または
jpegoptim --size=サイズ ファイル名

実行例 40KB

[root@localhost ~]# jpegoptim -S40 /home/nao/デスクトップ/mba.jpg
/home/nao/デスクトップ/mba.jpg 800x486 24bit N JFIF  [OK] 50410 --> 41769 bytes (17.14%), optimized.

保存ディレクトリを指定

デフォルトは上書きされてしまうため、保存場所を指定することで上書きを防ぐことができます。

jpegoptim -d=ディレクトリパス ファイル名
または
jpegoptim --dest=ディレクトリパス ファイル名

その他のオプション

指定したしきい値より圧縮された場合は処理をスキップ(圧縮率は1~99を入力)

jpegoptim -Tしきい値 ファイル名
または
jpegoptim --threshold=しきい値 ファイル名

実行例

[root@localhost ~]# jpegoptim -S40 -T41 /home/nao/デスクトップ/mba.jpg
/home/nao/デスクトップ/mba.jpg 800x486 24bit N JFIF  [OK] 50410 --> 41769 bytes (17.14%), skipped.

圧縮結果が元よりも大きい場合でも処理を強制する

jpegoptim -f ファイル名
または
jpegoptim --force ファイル名

実行したときの結果だけ表示して圧縮処理はしない

jpegoptim -n ファイル名
または
jpegoptim --noaction ファイル名

平均圧縮率と合計圧縮量を出力

jpegoptim -t ファイル名
または
jpegoptim --totals ファイル名

実行例

[root@localhost ~]# jpegoptim -m70 -t /home/nao/デスクトップ/mba.jpg
/home/nao/デスクトップ/mba.jpg 800x486 24bit N JFIF  [OK] 50410 --> 29203 bytes (42.07%), optimized.
Average compression (1 files): 42.07% (21k)

処理結果を出力しない

jpegoptim -q ファイル名
または
jpegoptim --quiet ファイル名

-dオプションを使用した時にディレクトリ先に同名ファイルが存在しても上書き

jpegoptim -o ファイル名
または
jpegoptim --overwrite ファイル名

ファイルの変更時刻を保存する

jpegoptim -p ファイル名
または
jpegoptim --preserve ファイル名

冗長モードを有効にする

jpegoptim -v ファイル名
または
jpegoptim --verbose ファイル名

非プログレッシブで出力する

jpegoptim --all-normal ファイル名

プログレッシブで出力する

jpegoptim --all-progressive ファイル名

ヘルプを表示する

jpegoptim -h
または
jpegoptim --help

以上になります。

間違っている情報があればコメントいただけると幸いです。

コメント

タイトルとURLをコピーしました