この記事を読むのに必要な時間は約 9 分です。
FreeBSD 10.1 RELEASE で、ImageMagick を pkg からインストールし、複数 PNG → PDF に変換しようとしたら、以下のようなエラーが発生しました。
user@host:~ % convert "*.png" 1.pdf unable to load module `/usr/local/lib/ImageMagick-6.9.1//modules-Q16/coders/png.la': file not found @ error/module.c/OpenModule/1282. no decode delegate for this image format `PNG' @ error/constitute.c/ReadImage/501.
結果として、pkg の upgrade を行ったところ、 png: 1.6.17 -> 1.6.17_1 にバージョンアップされたおかげか、エラーが解消されました。
根本原因は不明ですが、一応メモしておこうと思います。
環境
- OS : FreeBSD 10.1-RELEASE
- ImageMagick : ImageMagick 6.9.1-10 Q16 amd64
- png : 1.6.17 ( → 1.6.17_1 )
結論
私の場合は、pkg update により、png: 1.6.17 -> 1.6.17_1 にバージョンアップしたためか、エラーは解消し、動作するようになりました。
もし同様のエラーに遭遇した方は、pkg update をしてみると良い可能性があります。
他には、以下の対処が考えられます。最悪、ports からビルドすれば動作するかと思います…。
- png を削除 → 再インストール
- ImageMagick を削除 → 再インストール
- ImageMagick を ports から ビルド
エラー発生までの経緯
png は、予めインストールされていました。 (pkg install にて)
pkg より ImageMagick をインストールしました。
インストール完了後、とあるフォルダにて、
convert "*.png" 1.pdf
というコマンドを実行したところ、前述のエラーが発生しました。
インストールされなかったのかと思いましたが、ファイルは存在しています。
root@host:~ # ls -l /usr/local/lib/ImageMagick-6.9.1/modules-Q16/coders/png.la -rwxr-xr-x 1 root wheel 921 8月 13 10:55 /usr/local/lib/ImageMagick-6.9.1/modules-Q16/coders/png.la*
また、pkg によるバイナリインストールのため、ImageMagick のビルド時に png 無しの設定だったりするのかと思い、以下コマンドにて確認してみました。
user@host:~ % convert -list configure | grep png CFLAGS -I/usr/local/include/libxml2 -I/usr/local/include/cairo -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -I/usr/local/include/pixman-1 -I/usr/local/include/freetype2 -I/usr/local/include/libdrm -DMESA_EGL_NO_X11_HEADERS -I/usr/local/include/libpng16 -D_THREAD_SAFE -I/usr/local/include/librsvg-2.0 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -I/usr/local/include/gdk-pixbuf-2.0 -pthread -I/usr/local/include/libpng16 -I/usr/local/include/cairo -I/usr/local/include/pixman-1 -I/usr/local/include/freetype2 -I/usr/local/include/libdrm -DMESA_EGL_NO_X11_HEADERS -D_THREAD_SAFE -I/usr/local/include/libpng16 -I/usr/local/include/lqr-1 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -I/usr/local/include/openjpeg-2.1 -I/usr/local/include -I/usr/local/include/freetype2 -I/usr/local/include -I/usr/local/include/freetype2 -I/usr/local/include -O2 -pipe -fstack-protector -fno-strict-aliasing -Wall -fexceptions -D_THREAD_SAFE -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16 DELEGATES bzlib mpeg fftw fpx fontconfig freetype jbig jng jpeg lcms lqr openjp2 png ps rsvg tiff webp wmf x xml zlib
詳細は追っていませんが、以下があるので、png も利用する設定でビルドされてはいそうです。そもそも png 無しの設定であれば、png.la とやらのファイルもインストールされないでしょうし…。
-pthread -I/usr/local/include/libpng16
pkg からのインストールを諦めて、ports からビルドしてみようかな、と思いつつ、ダメ元で pkg の update をかけました。他にも以下のアップデートが行われたので、他の影響の可能性もあります。
root@host:~ # pkg update vim-lite: 7.4.778 -> 7.4.796 sudo: 1.8.14 -> 1.8.14p3 screen: 4.3.1 -> 4.3.1_1 postfix: 2.11.5,1 -> 2.11.6,1 png: 1.6.17 -> 1.6.17_1 phpMyAdmin: 4.4.11 -> 4.4.13.1 pcre: 8.37_1 -> 8.37_3 mysql56-client: 5.6.25_1 -> 5.6.25_2 libmcrypt: 2.5.8_2 -> 2.5.8_3 gettext-runtime: 0.19.4 -> 0.19.5.1 freetype2: 2.6 -> 2.6_1 expat: 2.1.0_2 -> 2.1.0_3 apache24: 2.4.16 -> 2.4.16_1
その後に、convert “*.png” 1.pdf とコマンドを実行してみると、エラーなく pdf ファイルが作成されました。
以上、ご参考になれば幸いです。
今回は以上です。
[pn-amzn-freebsd]