[Linux] コマンドラインで画像を最適化して容量を節約

※当サイトは広告収入で運営されているため広告が表示される場合があります。

画像ファイルには人間の肉眼では違いがわからないような多くの情報、視覚や位置情報などを含んでいます。こういうデータは少ない枚数だと気になりませんが、何百枚と溜まってくると膨大な容量を占有してしまいます。

またウェブサイトにアップロードする際も画像の容量が大きいとページのロード時間も遅くなります。こうなるとサーチエンジンの評価も下がってしまうので下位に表示されることになってしまいます。

本ページでは画像データを圧縮せず(ロスレス)に最適化をしてくれるプログラムをご紹介します。スマホやデジカメで撮影した画像を劣化なしでおよそ 10〜15% ほど小さくすることができます。

Linux では JPEG画像ファイルは JpegOptim 、PNG画像ファイルは OptiPNG というプログラムで最適化ができます。コマンドラインだと大量のファイルを一つのコマンドで処理できるので便利です。

JPEGOptim

公式のリポジトリに入っているので JPEGOptim をインストールするだけです。

インストール

Arch 系

$ sudo pacman -S jpegoptim

Debian 系

$ sudo apt install jpegoptim

使い方

基本的な構文としては以下のように打ち込みます。

$ jpegoptim -d file.jpg

'-d' オプションを付与することで元ファイルのバックアップを行うこともできます。

EXIF情報を削除する

--strip-all オプションは位置情報や撮影に使用したカメラの情報など、付随情報をすべて削除します。

さらに –totals オプションをつけることによって平均圧縮率と合計で削減できた容量が表示されます。

$ jpegoptim --strip-all --totals *.JPG

ワイルドカード「*」を使うことでディレクトリ内のすべての .jpg 拡張子ファイルを指定することができます。

実行例

サブ/ディレクトリ内以下すべてのJPEGを最適化

下記のコマンドは指定したディレクトリ/サブディレクトリ以下にあるすべての JPEG ファイルを見つけ出して最適化処理をします。

$ find /path/to/directory -type f -iname "*.jpg" -print0 | xargs -0 jpegoptim --strip-all --totals

find コマンドで指定したディレクトリとそのサブディレクトリ内のすべてのファイルを検索します。-iname オプションを使用することで拡張子の大文字小文字の区別なく検索することができます。

これは余計かもしれませんが、ディレクトリやファイル名に改行などの特殊文字が使われていたときの対策として、 -print0-0 オプションを使うことで find コマンドと xarg コマンド、それぞれの出力を NULL で区切らせます。

並列処理をさせる

また xargs コマンドに -P オプションをつけ、 -n 1 オプションで1つ処理が完了するごとに jpegoptim コマンドに処理を渡すようにすれば、複数の最適化処理を同時に行えるようになります。'number-of-prosess' を並列処理するプロセスの数で置き換えて使います。

$ find /path/to/directory -type f -iname "*.jpg" -print0 | xargs -0 -P number-of-prosess -n 1 jpegoptim --strip-all --totals

下記のコマンドは4つのプロセスを同時に行えるコマンドです。

$ find /hoge/hoge/ -type f -iname "*.jpg" -print0 | xargs -0 -P 4 -n 1 jpegoptim --strip-all --totals

JPEGを圧縮する

JPEGOptim には圧縮する機能も備わっています。

'-m' オプションを使うことで圧縮率を指定することができます。小さな値ほど圧縮率が高くなりますが画質も荒くなります。

$ jpegoptim -m 75 *.jpg

‘-s’ オプションは指定したファイルサイズに圧縮します。 下のコマンドはファイルサイズが 100KB にとどまるよう image.jpg を圧縮します。

$ jpegoptim -s 100k image.jpg

OptiPNG

こちらも JPEGOptim と一緒でほとんどのディストリビューションでは公式のリポジトリに入っています。

インストール

Arch 系

$ sudo pacman -S optipng

Debian 系

$ sudo apt install optipng

使い方

OptiPNG は基本的な使い方は JPEGoptim と一緒ですが、オプションが少々違うので --help で詳細を参照したほうが良いでしよう。

-o1 オプションは最適化レベルを指定するものです。1〜7の数字を指定できます。高い数字ほど最適化の試行回数が多くなり、不要なデータが削減されますがその分処理に時間を要します。

$ optipng *.png -o1

ディレクトリ内のPNGファイルをすべて最適化

$ find /path/to/directory -type f -iname "*.png" -print0 | xargs -0 optipng -o7

おわり

コメント

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