本系统为CentOS7.0,64位,使用的ImageMagick和jmagick版本都是6.8.6,源码包分别为:ImageMagick-6.8.6-10.tar.xz 和 jmagick-6.8.6.zip
1、安装ImageMagick
你没看错,ImageMagick-6.8.6-10.tar.xz 是 xz结尾的,如果你的不是,可忽略这一段,总之就是解压:
>xz -d ImageMagick-6.8.6-10.tar.xz
>tar xvf ImageMagick-6.8.6-10.tar
>cd ImageMagick-6.8.6-10
>./configure --prefix=/usr/local/ImageMagick
>make
>make install
配置和安装过程中可能会报错,一般是找不到依赖包的情况,用yum对应安装即可
2、安装jmagick
>unzip jmagick-6.8.6.zip
>cd jmagick-master
>./configure --prefix=/usr/local/jmagick --with-magick-home=/usr/local/ImageMagick (注意:这是通常的做法,但是我这里报错了:)
Unable to find ImageMagick header files
所以改用以下配置即可:
>./configure --prefix=/usr/local/jmagick --with-magick-inc-dir=/usr/local/ImageMagick/include/ImageMagick-6/
>make
>make install
之后把libJMagick.so复制到/usr/lib64/下即可
顺利完成
郁闷的分割线----------------------------------------------------------------------------------------------------
最近在一台新的服务器上部署时,发现以上安装方式在运行时会报以下错误:
java: symbol lookup error: /usr/lib64/libJMagick.so: undefined symbol: MagickCoreGenesis
虽然我已经手工把ImageMagick的so复制到/usr/lib64下了,但仍然报这个错,google了很久,也没有正确的解决方案。
后来采用以下方式解决:
1、用yum安装ImageMagick-devel:
yum -y install ImageMagick-devel
此时会在/usr/include下生成ImageMagick目录,可作为jmagick编译时的ImageMagick home目录参数
2、编译jmagick:
之后把libJMagick.so复制到/usr/lib64/下即可
./configure --prefix=/usr/local/jmagick --with-magick-home=/usr/include/ImageMagick
make
make install
3、同样的,复制libJMagick.so到/usr/lib64/下即可
可使用该class测试:
import magick.MagickImage;
/**
* 测试部署后的JMagick是否可用
* javac -classpath /usr/local/jmagick/lib/jmagick-6.8.6.jar JMagickTest.java
* java -classpath .:/usr/local/jmagick/lib/jmagick-6.8.6.jar JMagickTest
* 如果输出Success说明安装正确
*
*/
public class JMagickTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.setProperty("jmagick.systemclassloader","no");
System.out.println(System.getProperty("java.library.path"));
MagickImage image = new MagickImage();
System.out.println("Success");
}
}