0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

mozjpeg ビルド手順 on linux (新旧)

Last updated at Posted at 2022-11-05

何番煎じかも分かりませんが、新しい方法と前の方法とでビルド方法が違うことに気付いたので執筆。

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 だけでなく、jpegtrandjpeg など、jpeg 処理に関するいくつかのプログラムがまとまっています。それら全部のパスを通すため、上ではループをまわして処理をしています。

mozjpeg 補足

(Linux Mint では) デフォルトで cjpegjpegtran といったコマンドがあります。これらは、libjpeg-turbo によって提供されているものです。

mozjpeg は libjpeg-turbo をベースに作成されたもので、ビルドで得られる実行ファイルも、cjpeg など同じ名前です。これをこのままパスに追加すると、libjpeg か mozjpeg か分からなくなってしまいます。

そこで、上ではリンクを moz... という名前にし、libjpeg-turbo と mozjpeg の実行ファイルを区別することにしています。

更新履歴

[2022/12/12]
PNG サポート, DEB パッケージ, mozjpeg 補足の項を追記

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?