ImageMagickといえば知る人はしる画像変換ソフト(コマンド?)だ。Windows版、Linux版あり、多種の画像フォーマットに対応しているうえに一括変換コマンドまで持った非常に便利なソフトであるのだが、故あってソースコードからビルドしたらJPEGに変換すらできなくなってしまった。公式にあるビルド、インストール方法のやり方はシンプルで誰でも簡単にすぐ終わる。コンフィグしてメイクしてメイクインストールの3ステップくらいのものである。だからこそこのトラブルは初心者殺しといっても良いものになっていた。
細かく調べ切ったわけではないから間違っていてもご容赦願いたいが、ImageMagickが画像を扱うには2種類の方法がありそのことが初期インストールのImageMagickと自家製ImageMagickの処理結果が変わってしまう原因であった。どうやらImageMagickはビルド時に各画像フォーマット用のライブラリをリンクする場合と実行時に外部コマンドで画像処理を行う2種類の方法を持っているらしく、コンフィグするときにライブラリの存在を確認してあるものはライブラリをリンクし、無い物はあらかじめ決められた外部コマンドを使うようにビルドされるのであった(外部コマンドの存在有無は未確認のまま進行)。つまり何も考えずにビルドするとほぼすべてのコマンドを外部コマンドに頼る単なるランチャーのようなImageMagickが出来上がってしまう。今回JPEGにすら変換できなくなったのはJPEGに変換するための外部コマンドが無かった事が原因であった。
ここで問題なのは各フォーマット用に必要なライブラリ名のリストが見つからないということである。つまり何とかして自分で必要ライブラリをインストールしてからビルドする必要があるのである。そこで一応発見した物をここに記載しておこうと思う。(ちなみにではあるが通常のUbuntuDesktopであればほとんど入っているようである。自分の場合はサーバーのImageMagickをバージョンアップを試みている)
ライブラリ名 | 用途 |
libjpeg62-dev | JPEG |
libwebp-dev | WEBP |
libwmf-dev | WMF |
libheif-dev | HEIC |
libx11-dev | X |
libxml2-dev | xml |
libopenexr-dev | openexr |
libopenjp2-7-dev | jpegxl? |
libbz2-dev | bz2? |
libtiff-dev | tiff |
liblcms2-dev | lcms2 |
libfontconfig-dev | fontconfig |
libfreetype-dev | freetype |
libjpeg-dev | jpeg ? |
liblqr-dev | lqr? |
libglib2.0-dev | glib |
libpng-dev | png |
libz-deb | z? |
libdjvulibre-dev | ? |
libfftw3-dev | ? |
といった感じである。インストールはsudo apt install ライブラリ名 でいける。上記すべて入れるとubuntuの初期インストールとほぼ同じ状態でビルドできる。実際に使うフォーマットに関係したライブラリだけ入れたほうが良いのかもしれないが何に使っているかよくわからないライブラリも多いのでできるだけ同じになるようにした。同じかどうかの確認はconvert -versionでバージョン確認すると最後にDelegates(built-in)という表記でビルド時にリンクした一覧が表示されるのでそれが一致することで確認している。ImageMagickをわざわざビルドする必要はそれほどないはずではあるが、いざというときのためにメモとして残しておく。参考になれば幸いである。