何番煎じかも分かりませんが、新しい方法と前の方法とでビルド方法が違うことに気付いたので執筆。
mozjpeg について
mozjpeg は、mozilla によって開発されている JPEG エンコーダです。圧縮効率が良いことで知られています。
Web から利用することができ、これが最も手軽な方法ではあります。ただ、それだと都合が悪いこともあります。(オンラインに上げたくないとか、サイズ制限にかかるとか、スクリプトで大量処理したいとか。) そういった場合、自力でビルドする必要があります。
mozjpeg は、バージョン 3 以前と 4 以降とではビルド方法が異なりますので、それぞれのビルド方法をまとめておきます。
ここでは Linux (64bit) 環境でのビルド手順を示します。Linux Mint 20.3 で動作確認できたコマンドを記載しています。
余談: ビルド方法の変更を知らずに最新バージョンがビルドできず、仕方なく旧バージョンを使っていた時期が、私にはありました。用意されているマニュアルにまともに向き合いましょう。英語と和解しましょう。
基本的には、リポジトリの BUILDING.md
に書かれているように進めていきます。他の環境でのビルド方法や、その他詳細なオプション等については、以下の原文を参照してください。
ビルド
3.3.1 以前
autotools を使う方法です。
# 必要なパッケージをインストール
# ※ パッケージマネージャに応じて "apt" は変更
sudo apt install autoconf automake libtool nasm make
# ソースをダウンロードして展開
## ここでは v3.3.1 を使用
## ブラウザで GitHub から DL して展開してもヨシ
wget -O - https://github.com/mozilla/mozjpeg/archive/refs/tags/v3.3.1.tar.gz | tar -xzv -C ./
cd mozjpeg-3.3.1
# 任意でビルド用ディレクトリを作成
mkdir build && cd build
# autotools でビルド
autoreconf -ifv ../
../configure
## ビルド用ディレクトリを作成していないときは
## autoreconf -ifv ./
## ./configure
make -j5 #注
make
の引数 -j5
は、ビルド処理の並列実行数の指定です。フルパワーでやるには、「スレッド数+1」を指定すると良いとか。
4 以降
新バージョンでは、cmake を使う方法に変わっています。
# 必要なパッケージをインストール
# ※ パッケージマネージャに応じて "apt" は変更
sudo apt install cmake nasm make
# ソースをダウンロードして展開
## ここでは v4.1.1 を使用
## ブラウザで GitHub から DL して展開してもヨシ
wget -O - https://github.com/mozilla/mozjpeg/archive/refs/tags/v4.1.1.tar.gz | tar -xzv -C ./
cd mozjpeg-4.1.1
# 任意でビルド用ディレクトリを作成
mkdir build && cd build
# cmake でビルド
cmake -G"Unix Makefiles" ../
## ビルド用ディレクトリを作成していないときは
## cmake -G"Unix Makefiles" ./
make -j5 #注 (同上)
PNG サポートについて
cjpeg にて、PNG 画像を読み込めるようになるオプションがあるようです。
このオプションはデフォルトで ON になっていますが、環境によっては PNG ライブラリが無く、ビルドできない原因になることもあります。
対処としては、「PNG ライブラリのインストール」または「オプション OFF」になります。
オプション ON (PNG ライブラリのインストール)
cmake
実行前に、以下のコマンドでライブラリをインストールします。
# PNG ライブラリをインストール
# ※ ディストリビューションによってパッケージ名が異なる可能性があるので注意
sudo apt install libpng-dev
オプション OFF
cmake
実行時にオプションを追加します。
cmake -G"Unix Makefiles" -DPNG_SUPPORTED=0 ../
## ビルド用ディレクトリを作成していないときは
## cmake -G"Unix Makefiles" -DPNG_SUPPORTED=0 ./
インストール (新旧共通)
APT (DEB パッケージ) を通す方法
# ※ 環境やバージョンにより、生成されるパッケージ名が異なる可能性があるので注意
make deb
sudo apt install ./mozjpeg_{version}_amd64.deb
# アンインストールするには
sudo apt remove mozjpeg
同様にして、rpm
パッケージも可能。
/opt
に直接配置する方法
sudo make install/local
パスを通す
上記の方法では、/opt
ディレクトリに実行ファイルなどが収められます。
/opt
ディレクトリはパスが通っていないため、標準コマンドのようにすぐ利用することができません。どこでもコマンドとして呼び出せるようにするには、追加で以下の手順を進めます。
# ビルドを行ったディレクトリをカレントにする
# パスを通す
cd /opt/mozjpeg/bin
for f in *; do
ln -s /opt/mozjpeg/bin/$f /usr/local/bin/moz$f
done
以上の手順を行い、端末で以下を実行し、バージョンが出てくれば成功です。
mozcjpeg -version
mozjpeg には、cjpeg
だけでなく、jpegtran
や djpeg
など、jpeg 処理に関するいくつかのプログラムがまとまっています。それら全部のパスを通すため、上ではループをまわして処理をしています。
mozjpeg 補足
(Linux Mint では) デフォルトで cjpeg
や jpegtran
といったコマンドがあります。これらは、libjpeg-turbo によって提供されているものです。
mozjpeg は libjpeg-turbo をベースに作成されたもので、ビルドで得られる実行ファイルも、cjpeg
など同じ名前です。これをこのままパスに追加すると、libjpeg か mozjpeg か分からなくなってしまいます。
そこで、上ではリンクを moz...
という名前にし、libjpeg-turbo と mozjpeg の実行ファイルを区別することにしています。
更新履歴
[2022/12/12]
PNG サポート, DEB パッケージ, mozjpeg 補足の項を追記