Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
サンディスク microSD 128GB
スマホからSwitchまで使える大容量MicroSDカード!
スポンサーリンク
目次
EC2サーバーやMacにあるJPG画像を圧縮するしたい
大きい画像はメリットよりデメリットが多い
WordPressなどでブログを運営していると画像等をアップロードする際に、なるべく綺麗な画像を乗せたいという気持ちで画像ファイルが大きいままアップロードをしてしまう事が多いと思います。
その気持ちもわかりますが、サイズがでかい画像をアップロードするとページの表示スピードが遅くなってしまいSEO順位が下がったりユーザー離脱に繋がってしまったり、CloudFrontなどのCDNを利用しているとデータ転送量が肥大して、予期せぬ通信料が発生してしまう可能性があります。
jpegoptimで一括圧縮
そこで、今回はjpegoptimというCLIツールを利用して、サーバー上にアップロードしたJpeg画像を一括で圧縮する方法をご紹介しようと思います。
導入方法
インストール
Macの場合
Macの場合はHomebrewからインストールする事が出来ます。
1 2 3 4 5 6 7 8 9 10 11 12 |
==> 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経由でインストールします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
============================================================================================================================================================================================================================================== 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リポジトリを有効にする必要があるので、以下のコマンドを実行してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
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が参照できるようになります。
確認
以下のコマンドは確認してみましょう。
1 2 3 4 5 6 7 8 9 10 |
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ファイルはまとめて処理出来ます。
-m
は画質を指定します。100
に近づくほど元の画質(高画質)に近づきます。
-t
は処理結果を{処理ファイル名} {サイズ} 24bit N Exif IPTC ICC XMP Adobe [OK] {元のサイズ} --> {圧縮後のサイズ} bytes ({圧縮率}%), optimized.
のような形式で標準出力に出してくれるので、結果が分かりやすくなるのでつけておいた方が良いと思います。
つけないと何も表示されずに処理が完了します。
他にもたくさんのオプションがあるので、気になる方は調べてみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
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) |
実際にやって見るとこんな感じです。
1 2 3 |
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ファイルを圧縮する事が出来ました。
サーバー上に存在する画像ファイルのサイズにお困りの方は是非試してみてはいかがでしょうか♪