JMagickをWindowsのTomcatで動かそうとしてはまったのでメモ。
環境は次のとおり。
- Eclipse 3.4
- JDK 5
- Tomcat 5.5
- ImageMagick 6.3.9-0-Q16
- JMagick 6.3.9-0-Q16
Netforest Developer's Note - Jmagickで画像の縮小 ~Windows編~
や
http://www.db.is.kyushu-u.ac.jp/rinkou/java/jmagick.html
の丁寧な解説を参考に、Java Application単体の動作はすんなりクリア。
ところが、ServletのdoGet()内で
MagickImage sourceImage = new MagickImage(new ImageInfo(sourceFile));
のように書くとnew MagickImage()でランタイムエラーになってしまう。
dllが読み込めていない模様。
java.lang.RuntimeException: Can't load MagickLoader (class not found)
at magick.Magick.(Magick.java:25)
結論から言うと、jmagick.dllをシステムパスに入れておく必要があることがわかった。
ImageMagickをインストールしたときに、Path環境変数にconvertコマンドやImageMagickのdllファイルのあるディレクトリが追加される。
ここにJMagickを展開してできたjmagick.dllをコピーしてマシン再起動。
2010/06/27 再起動不要と判明。
後は、
WEB-INF/lib$JAVA_HOME/jre/lib/extにjmagick.jarをコピー。
2010/07/17 WEB-INF/libだと
jmagick.dll already loaded in another classloader
が発生することがあると判明。
MagickImageを最初に呼び出す前(Servletのinit()あたり)で
System.setProperty("jmagick.systemclassloader","false");
と書いたら無事servlet内でもJMagickの処理ができるようになった。
原因については下記参照。
http://osdir.com/ml/java.jmagick/2005-12/msg00024.html
Servoy Forum • View topic - Problems accessing another jar file from my plugin