ImageMagick6 を Fedora 26 にインストールする
諸事情により Fedora 26 で ImageMagick を使える環境を用意することになりました。普通だったら yum install して終わりなのですが、リポジトリに上がっているのはインストールしたい ImageMagick6 ではなく、ImageMagick7 のようでした。
なのでソースからビルドしてみたいと思います。
jpg, png モジュールをインストールする
ImageMagick6 本体をビルドしただけでは、取り扱う画像フォーマットが限定されています。jpg や png を扱えない…というより、ほとんどの画像フォーマットが使えないようです。画像フォーマットのデコーダー等は ImageMagick 本体には含まれておらず、自分で用意してくれということなのだと思います。画像フォーマットのライセンスやらもいろいろ事情がありそうです。そこで、ImageMagick6 をビルドする際に必要な画像フォーマットのパッケージをインストールしておきます。
以下は jpg, png に関するパッケージです。devel パッケージもインストールしておくことに注意してください。
# yum install libjpeg libjpeg-devel # yum install libpng libpng-devel
Wand の画像フォーマットエラー
jpg, png に関するパッケージをインストールしておかないと、いざ ImageMagick6 を使おうとした時にエラーになります。python から ImageMagick6 を使える Wand では、以下のようなエラーが発生します。
Traceback (most recent call last): File "wandtest.py", line 4, in <module> with Image(filename='sample.jpg', format='JPEG') as img: File "/home/momokan/python/wand/wand/image.py", line 2744, in __init__ self.read(filename=filename, resolution=resolution) File "/home/momokan/python/wand/wand/image.py", line 2822, in read self.raise_exception() File "/home/momokan/python/wand/wand/resource.py", line 222, in raise_exception raise e wand.exceptions.MissingDelegateError: no decode delegate for this image format `JPEG' @ error/constitute.c/ReadImage/504 Exception TypeError: TypeError("object of type 'NoneType' has no len()",) in <bound method Image.__del__ of <wand.image.Image: (empty)>> ignored
ImageMagick6 をインストールする
ソースコードは github に上がっています。なのでこれを持ってきましょう。$ git clone https://github.com/ImageMagick/ImageMagick6そうしたら clone した ImageMagick6 ディレクトリに移動し、configure, make, make install します。
この辺りのビルドの仕方は伝統的な C プログラムですね。
$ cd ImageMagick6 $ ./configure $ make # make installconfigure のオプションにインストールディレクトリなんかもあるはずなのですが、面倒なので特に指定していません。指定しない場合には /usr/local/lib に共有ライブラリ(.so ファイル)がインストールされます。
Wand から ImageMagick6 を使う
python から Wand で ImageMagick6 を使う場合には、環境変数 MAGICK_HOME を設定しておく必要があります。.bash_profile に以下のように設定しておきましょう。
MAGICK_HOME=/usr/local export MAGICK_HOMEWand は $MAGICK_HOME 下の lib 配下から共有ライブラリを検索するので、/usr/local/lib/libMagickCore-6.Q16.so といったパスで ImageMagick6 がインストールされている場合、$MAGICK_HOME 値は /usr/local になります。
また、apache から python を動かして Wand を使う場合には、apache にも環境変数 MAGICK_HOME を設定しておかなければなりません。Apache の実行ユーザーの環境変数として設定してもいいですが、Apache の設定ファイルで SetEnv ディレクティブを使ったほうが健全な気がします。
httpd.conf の Directory ディレクティブ内で、MAGICK_HOME を渡しておきます。
<Directory "/var/www/html"> SetEnv MAGICK_HOME /usr/local <Directory>Apache の設定ファイルを変更したら、Apache の再起動もしておきましょう。
WEB 技術, python コメント (0) 2018/05/07 16:41:26