ImageMagick与JMagick完成过程及配置

ImageMagick     官网  http://www.imagemagick.org/script/index.php

一、ImageMagick介绍

--------------------------------------------------------------------------

        ImageMagick是用C语言开发图片处理程序。可以对图片进行改变大小、旋转、锐化、减色或增加特效等操作。对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。ImageMagick 的官网是:http://www.imagemagick.org/script/index.php

       由于我们是java项目,直接使用java通过JNI技术调用ImageMagick的C语言接口是不行的。因为ImageMagick开发时没有使用java JNI生成的头文件。可以使用jmagick解决,jmagick是由c语言开发的,开发时使用了java JNI生成的头文件,所以java可以通过JNI技术调用jmagick。jmagick再调用ImageMagick。这们我们处理图片使用的是jmagick暴露的java接口。

       JMagick不适合在Web应用中使用,请参看:JMagick的JNI-hazard问题

       也可以使用JNA来调用ImageMagick,JNA全称是Java Native Access,JNA是在JNI的基础上完善的,方便的我们开发的。JNA项目主页是https://github.com/twall/jna 。使用JNA来调用ImageMagick就须要直接操作ImageMagick提供的C接口(API)。



二、安装支持库

--------------------------------------------------------------------------

Linux服务器如果没有安装Jpeg v6b、libPng、FreeType库,要在安装imagemagick之前先装好,否则imagemagick没法读取jpeg和png图片,字体文件也读不了.

----freetype-2.4.4.tar.gz  字体引擎,生产高质量的字形影像输出,(例如彩色文本渲染,挖空等等)。

----zlib-1.2.5.tar.gz  是zlib通用压缩库,图形格式png使用zlib中的deflate压缩算法。

----libpng-1.2.44.tar.gz  支持PNG  或 libpng-1.4.3.tar.gz版本也可, 目前最新版本是1.5
----libjpeg   支持JPEG v1格式(jpegsrc.v6b.tar.gz或jpegsrc.v8b.tar.gz)

以下可选:

----jasper-1.900.1.zip   支持JPEG2000(文件扩展名是 .jp2 .j2c)
----tiff-3.8.0.tar.gz   支持tif文件  这个用不到,不要安装了


----tiff-3.8.2.tar.gz   支持tif文件  http://www.linuxfromscratch.org/blfs/view/6.3/general/libtiff.html

----jpegsrc.v6b.tar.gz  支持jpg    或jpegsrc.v8b.tar.gz版本也可 http://www.ijg.org/files/jpegsrc.v6b.tar.gz

----zlib-1.2.6.tar.gz  支持PNG24

----libpng-1.4.10.tar.gz  支持PNG  或 libpng-1.4.3.tar.gz版本也可 http://sourceforge.net/projects/libpng/

----jasper-1.900.1.zip   支持JPEG2000
----freetype-2.4.4.tar.gz  支持字体

----ImageMagick.tar.gz  此版本为6.7.6

   测试ImageMagick. 安装是否成功

----JMagick-6.2.6-0.tar.gz

   测试JMagick.能否使用

  

   使用的jar包尽量使用JMagick安装时生成的jar包,版本不统一有可能导致无法调用



JDK 须和机器保持一致。如机器为32位请使用32位JDK安装,我分别在64位和32位机器上安装过。

不一致是Jmagick 使用make 编译时报错。

1安装jpeg包:

下载地址:http://www.ijg.org/files/

http://www.ijg.org/files/jpegsrc.v6b.tar.gz

ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates

如果你选择默认安装,可能很顺利,指定路径后,请先创建以下文件夹
错误提示:...... /usr/bin/install -c -m 644 jconfig.h /usr/local/jpeg6/include/jconfig.h
/usr/bin/install: 无法创建一般文件‘/usr/local/jpeg6/include/jconfig.h’: 没有那个文件或目录
make: *** [install-headers] Error 1
# mkdir /usr/local/jpeg6
# mkdir /usr/local/jpeg6/include
# mkdir /usr/local/jpeg6/lib
# make install-lib
# make install



tar -zvxf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure --enable-shared --enable-static ; make ; make install



(2)安装tiff-3.8.2
下载地址:ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates

ftp://ftp.remotesensing.org/libtiff/

tar –zxvf tiff-3.8.2.tar.gz

cd tiff-3.8.2

./configure

make

make install

make check




3)安装zlib-1.2.6.tar.gz
http://www.zlib.net/

tar -xzvf zlib-1.2.5.tar.gz
cd zlib-1.2.5
./configure
make
make install

(4)安装libpng-1.4.10.tar.gz
下载地址:http://sourceforge.net/projects/libpng/

ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates

http://www.libpng.org/pub/png/pngcode.html


tar -zxvf libpng-1.4.10.tar.gz

cd libpng-1.4.10

./configure

make

make install

makeckeck

 

5)安装jasper包,安装后才能处理JPEG2000格式图片
unzip jasper-1.900.1.zip 
cd jasper-1.900.1
CFLAGS=-fPIC  ./configure 
make CFLAGS=-fPIC 
make  CFLAGS=-fPIC install  

6)安装freetype

tar -zxvf freetype-2.1.10.tar.gz

cd freetype-2.1.10

./configure
make
make install



7)安装ImageMagick

下载ImageMagick和JMagick
Jmagick在ImageMagick官网首页左侧菜单的Program Interfaces菜单中找到jmagick。进入jmagick的主页。

我们使用6.4版本,下载地下是:http://downloads.jmagick.org/6.4.0/
我们下载:
ImageMagick-6.4.0-0.tar.gz
jmagick-6.4.0-src.tar.gz

文档在:http://downloads.jmagick.org/jmagick-doc/

解压ImageMagick,查看ImageMagick的安装说明文件Install-unix.txt就知道怎么安装ImageMagick了。
解压jmagick,查看jmagick的安装说明文件INSTALL就知道怎么安装jmagick了。


安装ImageMagick
修改文件执行权限:chmod -R 755 文件名
tar zvxf ImageMagick-6.4.0-0.tar.gz
cd ImageMagick-6.4.0-0
./configure --prefix=/usr/local/ImageMagick --with-quantum-depth=8   --enable-share

configure参数说明:
--enable-shared 编译成共享库
--disable-static 不编译成静态库
--disable-openmp 禁用多线程,使用多线程性能并没有提高,但CPU占用达到了100%,所以禁用了。
--with-quantum-depth=8 使用8位色深。我的1200万像素数码相机,照出的图片就是8位色深。
--with-windows-font-dir=目录 ,指明字体文件的目录(后面将人工复制中文字体文件到这个目录)
关于Q8,Q16,Q32的说明:(建议使用8,现在数码相机照的相片,每一种颜色就是8位深,3种颜色就是24位,所以选8)
支持的参数有3种,分别是 8, 16, or 32。默认值是16。
Q8表示: 8-bits per pixel quantum
Q16表示:16-bits per pixel quantum
Q32表示:32-bits per pixel quantum
使用16-bit per pixel quantums在处理图片时比8-bit慢15%至50%,并须要更多的内存。
处理一张1024x768像素的图片8-bit要使用3.6M内存,16-bit要使用7.2M内存。计算方法是: (5 * Quantum Depth * Rows * Columns) / 8



configure 完成后,一定要检查IM支持的图片格式种类,configure 完成后出会输出类似如下图的信息,请仔细检查。(信息不一定和下图一样,请根据实际情况自行分析)



--卸载命令:

make uninstall



验证configuration情况:identify -list configure

验证支持的图片格式:identify -list format

测试

convert  -resize 100x100 111.jpg 11.jpg

convert -resize 100x200 22.jpg(图片路径) 11.jpg(缩放后存放路径) 图片按比例缩放





8)安装Jmagick

tar -zxvf JMagick-6.2.6-0.tar.gz
cd JMagick-6.2.6-0

./configure --prefix=/usr/local/Jmagick --with-magick-home=/usr/local/ImageMagick/

6.2.4版本的include文件夹和6.4.0的文件夹路径不同造成的,大家安装的时候可以先检查一下include路径下的东西再进行该步骤。



make

make install

make test
make javadoc

如果你执行了make javadoc,在/usr/local/Jmagick/share/doc目录下就有文档。

cp /usr/local/jmagick/lib/libJMagick-6.4.0.so /usr/java/jdk1.7.0/jre/lib/amd64/libJMagick.so

cp /usr/local/jmagick/lib/jmagick-6.4.0.jar JRE_HOME/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin:/usr/local/ImageMagick/bin/

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Jmagick/lib:/usr/local/ImageMagick/lib

export CLASSPATH=$CLASSPATH:/usr/local/Jmagick/lib

copyJmagic生成jar包来使用

六、常见问题以及解决方法:

--------------------------------------------------------------------------

1、System.out.println(System.getProperty("java.library.path")).
直接用System.out.println(System.getProperty("java.library.path")).
打印出当前环境的路径,然后再把jmagick.dll或jmagick.so 复制到其中的一个路径文件夹中问题解决。


2、magick.MagickException: No image to scale
版本不匹配,要像下面这们,都是同一个版本号
ImageMagick-6.4.0-0.tar.gz
jmagick-6.4.0-src.tar.gz


3、magick.MagickException: Unable to retrieve handle
要调用 magick.MagickImage.destroyImages() 来关闭


4、no decode delegate for this image format
使用:identify -list format
判断有支持几种图片格式,没有的则需要安装对应的格式库


5、单线程转换每张图片大概50ms,两个线程却需要500ms
用convert --version  命令查看
看是否出现openMP字样,出现的话,是因为机器不支持openMP导致的。
需要重新编译./configure --disable-openmp  在进行安装


首先检查一下电脑里已经安装的ImageMagick版本:
convert -version



6、Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\WINDOWS\system32\jmagick.dll: Can't find dependent libraries

我在Windows xp上按照上面的流程安装完成,按理说应该没有问题了,但出现了以上错误。

我打开Eclipse已工作数个小时,然后在开发机器(我本机)Windows xp上安装ImageMagick-6.3.9-0-Q16-windows-dll.exe。也把jmagick.dll放入system32,在你的java项目中使用jmagick.jar包处理图片。

就这么几步当然不会错,但在运行程序时还是出现了上面的错误。

解决:重启Eclipse。加载新的环境变量。

部分内容出处
http://elf8848.iteye.com/blog/455675

猜你喜欢

转载自dgdesa.iteye.com/blog/2008662