Featured image of post 【Wordpress】jpegoptimを使ってサーバー上のJPEG画像ファイルをまとめて圧縮する方法【便利】

【Wordpress】jpegoptimを使ってサーバー上のJPEG画像ファイルをまとめて圧縮する方法【便利】

2046文字

EC2サーバーやMacにあるJPG画像を圧縮するしたい

大きい画像はメリットよりデメリットが多い

Wordpressなどでブログを運営していると画像等をアップロードする際に、なるべく綺麗な画像を乗せたいという気持ちで画像ファイルが大きいままアップロードをしてしまう事が多いと思います。

その気持ちもわかりますが、サイズがでかい画像をアップロードするとページの表示スピードが遅くなってしまいSEO順位が下がったりユーザー離脱に繋がってしまったり、CloudFrontなどのCDNを利用しているとデータ転送量が肥大して、予期せぬ通信料が発生してしまう可能性があります。

jpegoptimで一括圧縮

そこで、今回はjpegoptimというCLIツールを利用して、サーバー上にアップロードしたJpeg画像を一括で圧縮する方法をご紹介しようと思います。

導入方法

インストール

Macの場合

Macの場合はHomebrewからインストールする事が出来ます。

[adsense-responsive]

brew install jpegoptim
==> Installing dependencies for jpegoptim: jpeg
==> Installing jpegoptim dependency: jpeg
==> Downloading https://homebrew.bintray.com/bottles/jpeg-9d.mojave.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/b9/b931e7725c83275c56f962b51b83c10f31a01ac8d823c6722edaf16d893970b1?__gda__=exp=1585831376~hmac=11424e2838ece64525a48c4ca20cda66d0628da1ade6b4b1aba7addf3bd2a82b&response-content-disposition=
######################################################################## 100.0%
==> Pouring jpeg-9d.mojave.bottle.tar.gz
🍺  /usr/local/Cellar/jpeg/9d: 21 files, 751KB
==> Installing jpegoptim
==> Downloading https://homebrew.bintray.com/bottles/jpegoptim-1.4.6.mojave.bottle.tar.gz
######################################################################## 100.0%
==> Pouring jpegoptim-1.4.6.mojave.bottle.tar.gz
🍺  /usr/local/Cellar/jpegoptim/1.4.6: 7 files, 61.3KB

EC2などのサーバーの場合

EC2インスタンスの場合はyum経由でインストールします。

yum --enablerepo=epel install jpegoptim
==============================================================================================================================================================================================================================================
 Package                                                    Arch                                                Version                                                         Repository                                               Size
==============================================================================================================================================================================================================================================
Installing:
 jpegoptim                                                  x86_64                                              1.4.6-1.el7                                                     epel                                                     30 k
Installing for dependencies:
 libjpeg-turbo                                              x86_64                                              1.2.90-6.amzn2.0.3                                              amzn2-core                                              132 k

Transaction Summary
==============================================================================================================================================================================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 162 k
Installed size: 388 k
Is this ok [y/d/N]: y
Downloading packages:
warning: /var/cache/yum/x86_64/2/epel/packages/jpegoptim-1.4.6-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Public key for jpegoptim-1.4.6-1.el7.x86_64.rpm is not installed
(1/2): jpegoptim-1.4.6-1.el7.x86_64.rpm                                                                                                                                                                                |  30 kB  00:00:00
(2/2): libjpeg-turbo-1.2.90-6.amzn2.0.3.x86_64.rpm                                                                                                                                                                     | 132 kB  00:00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                                                          47 kB/s | 162 kB  00:00:03
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importing GPG key 0x352C64E5:
 Userid     : "Fedora EPEL (7) <epel@fedoraproject.org>"
 Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
 Package    : epel-release-7-11.noarch (@amzn2extra-epel)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Is this ok [y/N]: y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : libjpeg-turbo-1.2.90-6.amzn2.0.3.x86_64                                                                                                                                                                                    1/2
  Installing : jpegoptim-1.4.6-1.el7.x86_64                                                                                                                                                                                               2/2
  Verifying  : jpegoptim-1.4.6-1.el7.x86_64                                                                                                                                                                                               1/2
  Verifying  : libjpeg-turbo-1.2.90-6.amzn2.0.3.x86_64                                                                                                                                                                                    2/2

Installed:
  jpegoptim.x86_64 0:1.4.6-1.el7

Dependency Installed:
  libjpeg-turbo.x86_64 0:1.2.90-6.amzn2.0.3

Complete!

Error getting repository data for epel, repository not foundが出た場合

上記のようなエラーが出た場合はyumでepelリポジトリを有効にする必要があるので、以下のコマンドを実行してください。

amazon-linux-extras install -y epel
Installing epel-release
Loaded plugins: ovl, priorities
amzn2-core                                                                                                                                                                                                             | 2.4 kB  00:00:00
amzn2extra-epel                                                                                                                                                                                                        | 1.3 kB  00:00:00
amzn2extra-epel/2/x86_64/primary_db                                                                                                                                                                                    | 1.8 kB  00:00:00
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-11 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================================================================================================================================================================
 Package                                                     Arch                                                  Version                                               Repository                                                      Size
==============================================================================================================================================================================================================================================
Installing:
 epel-release                                                noarch                                                7-11                                                  amzn2extra-epel                                                 15 k

Transaction Summary
==============================================================================================================================================================================================================================================
Install  1 Package

Total download size: 15 k
Installed size: 24 k
Downloading packages:
epel-release-7-11.noarch.rpm                                                                                                                                                                                           |  15 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : epel-release-7-11.noarch                                                                                                                                                                                                   1/1
  Verifying  : epel-release-7-11.noarch                                                                                                                                                                                                   1/1

Installed:
  epel-release.noarch 0:7-11

Complete!
  0  ansible2                 available  [ =2.4.2  =2.4.6 ]
  1  emacs                    available  [ =25.3 ]
  2  httpd_modules            available  [ =1.0 ]
  3  memcached1.5             available  [ =1.5.1 ]
  4  nginx1.12                available  [ =1.12.2 ]
  5  postgresql9.6            available  [ =9.6.6  =9.6.8 ]
  6  postgresql10             available  [ =10 ]
  7  python3                  available  [ =3.6.2 ]
  8  redis4.0                 available  [ =4.0.5  =4.0.10 ]
  9  R3.4                     available  [ =3.4.3 ]
 10  rust1                    available  \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0 ]
 11  vim                      available  [ =8.0 ]
 12  golang1.9                available  [ =1.9.2 ]
 13  ruby2.4                  available  [ =2.4.2  =2.4.4 ]
 14  nano                     available  [ =2.9.1 ]
 15  php7.2                   available  \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11 ]
 16  php7.1                   available  [ =7.1.22 ]
 17  lamp-mariadb10.2-php7.2  available  \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5
          =10.2.10_7.2.8  =10.2.10_7.2.11 ]
 18  libreoffice              available  [ =5.0.6.2_15  =5.3.6.1 ]
 19  gimp                     available  [ =2.8.22 ]
 20  docker                   available  \
        [ =17.12.1  =18.03.1  =18.06.1 ]
 21  mate-desktop1.x          available  [ =1.19.0  =1.20.0 ]
 22  GraphicsMagick1.3        available  [ =1.3.29 ]
 23  tomcat8.5                available  [ =8.5.31  =8.5.32 ]
 24  epel=latest              enabled    [ =7.11 ]
 25  testing                  available  [ =1.0 ]
 26  ecs                      available  [ =stable ]
 27  corretto8                available  [ =1.8.0_192 ]
 28  firecracker              available  [ =0.11 ]
 29  golang1.11               available  [ =1.11.3 ]

これでepelが参照できるようになります。

確認

以下のコマンドは確認してみましょう。

jpegoptim -V
jpegoptim v1.4.6  x86_64-apple-darwin18.0.0
Copyright (C) 1996-2018, Timo Kokkonen

This program comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistirbute it under certain conditions.
See the GNU General Public License for more details.


libjpeg version: 9d  12-Jan-2020
Copyright (C) 2020, Thomas G. Lane, Guido Vollbeding

正常にインストール出来ていますね♪

使い方

使用上の注意

デフォルトの設定だと、圧縮処理後は同一ファイル名で上書きされるので気をつけましょう。

適宜オプションを使うなり、バックアップを取るなりなどして自己責任でお願いします!

上書きしたくない場合はオプションで出力先を指定してください。

コマンド

基本的なコマンドはjpegoptim -m{圧縮率(1~100)} -t {対象ファイル名}となっています。

対象ファイル名には*(ワイルドカード)が使えるので同一階層のJpegファイルはまとめて処理出来ます。

[adsense-responsive]

-mは画質を指定します。100に近づくほど元の画質(高画質)に近づきます。

-tは処理結果を
{処理ファイル名} {サイズ} 24bit N Exif IPTC ICC XMP Adobe [OK] {元のサイズ} --> {圧縮後のサイズ} bytes ({圧縮率}%), optimized.
のような形式で標準出力に出してくれるので、結果が分かりやすくなるのでつけておいた方が良いと思います。
つけないと何も表示されずに処理が完了します。

他にもたくさんのオプションがあるので、気になる方は調べてみてください。

jpegoptim --help
jpegoptim v1.4.6  Copyright (C) 1996-2018, Timo Kokkonen
Usage: jpegoptim [options] <filenames>

  -d<path>, --dest=<path>
                    specify alternative destination directory for
                    optimized files (default is to overwrite originals)
  -f, --force       force optimization
  -h, --help        display this help and exit
  -m<quality>, --max=<quality>
                    set maximum image quality factor (disables lossless
                    optimization mode, which is by default on)
                    Valid quality values: 0 - 100
  -n, --noaction    don't really optimize files, just print results
  -S<size>, --size=<size>
                    Try to optimize file to given size (disables lossless
                    optimization mode). Target size is specified either in
                    kilo bytes (1 - n) or as percentage (1% - 99%)
  -T<threshold>, --threshold=<threshold>
                    keep old file if the gain is below a threshold (%)
  -b, --csv         print progress info in CSV format
  -o, --overwrite   overwrite target file even if it exists (meaningful
                    only when used with -d, --dest option)
  -p, --preserve    preserve file timestamps
  -P, --preserve-perms
                    preserve original file permissions by overwriting it
  -q, --quiet       quiet mode
  -t, --totals      print totals after processing all files
  -v, --verbose     enable verbose mode (positively chatty)
  -V, --version     print program version

  -s, --strip-all   strip all markers from output file
  --strip-none      do not strip any markers
  --strip-com       strip Comment markers from output file
  --strip-exif      strip Exif markers from output file
  --strip-iptc      strip IPTC/Photoshop (APP13) markers from output file
  --strip-icc       strip ICC profile markers from output file
  --strip-xmp       strip XMP markers markers from output file

  --all-normal      force all output files to be non-progressive
  --all-progressive force all output files to be progressive
  --stdout          send output to standard output (instead of a file)
  --stdin           read input from standard input (instead of a file)

実際にやって見るとこんな感じです。

jpegoptim -m50 -t *.jpg
sample1.jpg 3000x2000 24bit N Exif IPTC ICC XMP Adobe  [OK] 481161 --> 127041 bytes (73.60%), optimized.
sample2.jpg 2000x3000 24bit N Exif IPTC ICC XMP Adobe  [OK] 34306 --> 17948 bytes (47.68%), optimized.
Average compression (2 files): 60.64%

パフォーマンスはとても早く1000枚ほどのファイルに対しても数分で終わりました!

画像によって圧縮率は変わりますが、調整しながら試してみてください♪

終わりに

以上のように簡単にサーバー上のJpegファイルを圧縮する事が出来ました。

サーバー上に存在する画像ファイルのサイズにお困りの方は是非試してみてはいかがでしょうか♪