ブログやWebサービスをやってく上で問題となるのが画像の容量です。
そのままアップロードしていると無駄に転送量が増えたり、ブラウザの表示が遅くなる原因になります。
最近はJPEGminiなどのWebサービスがあり大変便利ですが、大量に画像があると非常に手間がかかります。
となると自前でやるしかないわけですが、そもそも画像圧縮サービスはどうやって容量削減しているのかを調べてみると、Compressor.ioというWebサービスがJpegoptimというソフトを使用していることが分かりました。
実際使用してみて結構良かったので、Jpegoptimのインストール方法と使い方をまとめてみます。
ちなみに、Jpegoptim以外の画像最適化ツールに関する記事も書いているのでよかったらどうぞ。
- jpegtranのインストール方法と使い方【JPG画像最適化】
- Google製JPEGエンコーダー「Guetzli」のインストール方法と使い方
- Mozilla製JPEGエンコーダー「MozJPEG」のインストール方法と使い方
- pngquantのインストール方法と使い方【PNG画像圧縮】
- OptiPNGのインストール方法と使い方【PNG画像圧縮】
- JPG・PNG・GIFなどの画像容量を圧縮できるWEBサービスまとめ
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
以上になります。
間違っている情報があればコメントいただけると幸いです。
コメント