`
zhenghuali168
  • 浏览: 74633 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用JMagick+ImageMagick处理图片

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

由于我们是java项目,直接使用java通过JNI技术调用ImageMagick是不行的。因为ImageMagick开发时没有使用java JNI生成的头文件。
可以使用jmagick解决,jmagick是由c语言开发的,开发时使用了java JNI生成的头文件,所以java可以通过JNI技术调用jmagick。jmagick再调用ImageMagick。这们我们处理图片使用的是jmagick暴露的java接口。
也可以使用JNA来调用ImageMagick,JNA全称是Java Native Access,JNA是在JNI的基础上完善的,方便的我们开发的。JNA项目主页是https://github.com/twall/jna。使用JNA来调用ImageMagick就须要直接操作ImageMagick提供的C接口(API)。

二、windows环境的安装
在windows安装很简单,关于Q8与Q16区别,将在后面进行说明。
有动态版(dll),有静态版(static),建议使用静态版。

关于Q8,Q16,Q32的说明:
Q8表示: 8-bits per pixel quantum
Q16表示:16-bits per pixel quantum
在Install-unix.txt文件中的解释说明,避免翻译的不好误导大家,请大家自己去看原文吧。大意是:大多数电脑显示使用8-bit per pixel quantums。使用16-bit per pixel quantums在处理图片时比8-bit慢15%至50%,并须要更多的内存。
处理一张1024x768像素的图片8-bit要使用3M内存,16-bit要使用8M内存,32-bit需要使用15M内存
8-bit可表示0-255种值,16-bit可表示0-65535种值,32-bit可表示0-4294967295种值。
默认值是8-bit.

如果安装Q8,请使用文件:
ImageMagick-6.3.9-0-Q8-windows-dll.exe
jmagick-win-6.3.9-Q8.zip

如果安装Q16,请使用文件:
ImageMagick-6.3.9-0-Q16-windows-dll.exe
jmagick-win-6.3.9-Q16.zip

1.首先给出这个地址:http://downloads.jmagick.org/6.3.9/,这个里面包含了ImageMagick的安装文件、jmagick.dll和jmagick.jar,最关键的是它们是版本一致的,不会出现一些奇怪的问题。最容易出现的问题是:

java.lang.UnsatisfiedLinkError: jmagick.dll: The specified procedure could not be found

java.lang.UnsatisfiedLinkError: jmagick.dll: Can't find dependent libraries....


我下载的文件:
ImageMagick-6.3.9-0-Q16-windows-dll.exe 32位windows下的动态连接库安装文件
jmagick-win-6.3.9-Q16.zip里面包含了jmagick.dll和jmagick.jar

2.安装过ImageMagick后,最好重启一下电脑,否者可能会出现找不到依赖库的错误。解压jmagick-win-6.3.9-Q16.zip,将其中的jmagick.dll复制到C:\WinNT\system32下面。在编写程序时,要将jmagick的jar包放到编译路径中,Eclipse会搞定这件事情。

这样就完成了,很简单。至于如何使用jmagick编写程序,可以参考:
http://downloads.jmagick.org/jmagick-doc/

三、 Linux环境的安装
由于没有图形化界面的支持,在Linux(OpenSuSE11 x64)上的配置相对Windows XP还是麻烦了一点。
前题:
服务器如果没有安装Jpeg v8b、libPng、FreeType 的要在安装imagemagick之前先装好,否则imagemagick没法读取jpeg和png图片,字体文件也读不了.
1、 查看libjpeg是否已安装 (rpm –qa|grep libjpeg)

卸载:
rpm -e --nodeps libjpeg-6.2.0-879.10
rpm -e --nodeps libjpeg-32bit-6.2.0-879.10
安装:
rpm -ivh libjpeg8-8.0.2-3.1.x86_64.rpm
rpm -ivh libjpeg8-devel-8.0.2-3.1.x86_64.rpm

2、 查看libpng是否已经安装 (rpm -qa|grep libpng检查是否已经安装)

卸载:
rpm -e --nodeps libpng12-0-32bit-1.2.31-5.12.1
rpm -e --nodeps libpng12-0-32bit-1.2.31-5.12.1
安装:
rpm -ivh libpng-1.2.5-190.1.x86_64.rpm
rpm -ivh libpng-devel-1.2.5-190.1.x86_64.rpm

问题:rpm -ivh libpng-devel-1.2.5-190.1.x86_64.rpm
error: Failed dependencies:
zlib-devel is needed by libpng-devel-1.2.5-190.1.x86_64 
解决办法:
请先执行如下第3步操作再安装libpng-devel-1.2.5-190.1.x86_64.rpm

3、 查看zlib是否已安装(rpm -qa|grep zlib)

注:在卸载zlib时一定不要将zlib-1.2.3-106.34给卸载了,否则系统将无法运行。
卸载:
rpm -e --nodeps zlib-32bit-1.2.3-106.34
安装:
rpm -U zlib-1.2.3-134.1.x86_64.rpm
rpm -ivh zlib-devel-1.2.3-134.1.x86_64.rpm
ImageMagick和Jmagick的安装步骤:
1、下载ImageMagick和JMagick的源文件(http://downloads.jmagick.org/6.4.0/):ImageMagick-6.4.0.-0tar.gz 和 jmagick-6.4.0-src.tar.gz。

2、解压并安装ImageMagick:

# tar xzvf ImageMagick-6.4.0-0.tar.gz

# cd ImageMagick-6.4.0
 
# ./configure --prefix=/usr/local/ImageMagick-6.4.0 --enable-shared --with-quantum-depth=8 --enable-static --without-perl

# make

# make install

# make check
安装完成后,运行convert -version命令检测,应该会出现:

Version: ImageMagick 6.4.0 08/31/10 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2008 ImageMagick Studio LLC
convert默认安装到了/usr/local/bin下面,上面的命令可能提示找不到convert命令。那么可以添加如下环境变量即可使用。

3. 修改配置文件:

# vi /etc/profile

在/etc/profile文件的最后增加如下配置:

export JAVA_HOME=/usr/java/java
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
export JAVA_HOME PATH CLASSPATH

export MAGICK_HOME="/usr/local/ImageMagick-6.4.0"
export PATH="$MAGICK_HOME/bin:$PATH"
LD_LIBRARY_PATH=$MAGICK_HOME/lib:/usr/local/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

注意:修改完后执行 ldconfig 让设置立即生效,并logout,然后重新登录。

4. ImageMagick安装后究竟支持那些格式的文件,可以使用以下命令完成
convert –list configure得到如下图所示:

如果没有出现红色框标注的部分,则需要重复上面的2步骤,重新安装imageMagick.
5. 在安装JMagick之前先配置环境变量,尤其是JAVA_HOME,否则编译时会出现:JMagick configure: error: 'Unable to locate Java directories'的错误。
 
6. 安装JMagick。

# tar xzvf jmagick-6.4.0-src.tar.gz

解压到了文件夹6.4.0中,为了便于区分,重命名该文件夹:

# mv 6.4.0 jmagick-6.4.0

# cd jmagick-6.4.0

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

# make all

# make install

将生成的libJMagick-6.4.0.so复制到jre中的lib/amd64(amd64可能在不同的硬件架构会有不同的名字,如i386)文件夹中,同时重命名为libJMagick.so。

# cd /usr/local/Jmagick-6.4.0/lib

# cp libJMagick-6.4.0.so $JAVA_HOME/jre/lib/amd64/libJMagick.so
 
将jmagick-6.4.0.jar复制到$JAVA_HOME/jre /lib/ext文件夹下,并重命名为jmagick.jar

# cp jmagick-6.4.0.jar $JAVA_HOME/jre/lib/ext/jmagick.jar

将jmagick-6.4.0.jar复制到tomcat/common/lib文件夹下,并重命名为jmagick.jar

# cp jmagick-6.4.0.jar /home/zxin10/was/tomcat/common/lib/jmagick.jar

至此就配置完毕了。

7. 测试安装是否正常
进入ImageMagick安装目录,cd /usr/local/ImageMagick-6.4.0/bin

convert logo: logo.gif 
convert logo: logo.png 
convert logo: logo.jpg 
convert logo: logo.jpeg

可以拷贝生成的文件到本地后查看,应该如下图所示,则说明所有安装均正常:
8. 给用户赋权限
# chown –R username:groupname /usr/local/ImageMagick-6.4.0


注意:如果在生成jpg时报如下错误:
magick.MagickException: Unable to retrievehandle at magick.MagickImage.getDimension(Native Method) 
则说明jasper-1.900.1.zip包安装不正确,无法正确处理jpeg2000格式jp2,jpc,需要按照步骤重新安装。


注意:如果在生成jpg时报如下错误:
magick.MagickException: Unable to retrievehandle at magick.MagickImage.getDimension(Native Method) 
则说明jasper-1.900.1.zip包安装不正确,无法正确处理jpeg2000格式jp2,jpc,需要按照步骤重新安装。

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

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

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

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

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

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

记在最后:
Ubuntu系统已安装有ImageMagick,只是版本不是我须要的版本,
convert文件在放在了/usr/bin,所以我使用/usr/local/ImageMagick-6.4.0/bin目录里的convert覆盖了/usr/bin目录里的convert
cd /usr/local/ImageMagick-6.4.0/bin
cp ./convert /usr/bin

分享到:
评论

相关推荐

    ImageMagick-6.3.9+jmagick组合

    3. **易用性**:JMagick简化了在Java中进行复杂图像处理的工作,开发者无需了解ImageMagick的底层实现,只需使用Java API即可。 4. **性能**:虽然通过JNI调用C/C++代码会有一定的性能损失,但JMagick允许Java应用...

    JMagick图片处理

    **JMagick图片处理**是图像操作的重要工具,它是一个Java接口,用于ImageMagick库,使得在Java环境中可以方便地进行图像处理。这个技术涵盖了多个关键知识点,包括创建缩略图、添加水印、切图以及压缩图片,这些都是...

    Jmagick缩图 JAVA图片处理

    本文将深入探讨“Jmagick缩图”这一主题,它是一种基于Java的图片处理工具,用于快速有效地生成图片的缩略图。 JMagick是ImageMagick的一个Java接口,ImageMagick是一个强大的跨平台图像处理库。它允许Java开发者...

    jmagick-win-5.5.7-Q8.zip

    在实际应用中,JMagick可以用于各种场景,如网站的图像上传处理、图片格式转换、图片质量优化等。例如,一个常见的应用场景是用户上传一张大尺寸的照片,服务器端可以通过JMagick进行自动缩放,减少存储空间并加快...

    jmagick.zip

    JMagick与ImageMagick是两个在图像处理领域中广泛使用的开源库,尤其在Java环境中,它们为开发者提供了强大的图像处理功能。本文将深入探讨这两个工具的核心概念、功能以及如何在实际项目中应用。 首先,JMagick是...

    ImageMagick使用手册

    在使用JMagick进行图片处理时,例如生成缩略图,可以按照以下Java代码进行操作: ```java System.setProperty("jmagick.systemclassloader", "no"); // 创建ImageInfo对象,用于存储图片信息 ImageInfo info = new...

    jmagick-6.2.4-1-IM-6.2.5.jar,ImageMagick-6.2.5-4-Q16-windows-dll.exe

    **压缩包子文件的文件名称列表** 中,"ImageMagick 详细安装使用 linux (jmagick)_java.mht"可能是一个包含如何在Linux系统上安装和使用JavaMagick的教程文件,.mht是MHTML(多用途互联网邮件扩展)文件,通常用来...

    linux下安装ImageMagick-6.5+JMagick -6.4 经测试成功的

    ImageMagick 是一个功能很强的图片处理程序。可应用在多种操作系统平台上。 安装ImageMagick和JMagick 如果安装了老版本ImageMagick的rpm包,请先删除 安装环境要求: 确认已经安装了zlib、freetype、libpng和jpeg-...

    Jmagick32位的和Jmagick64位的Jmagick.dll,Jmagick.jar

    例如,一个Web应用可能使用Jmagick来动态生成缩略图,或者在上传图片时进行预处理,以确保符合规定的尺寸和格式。 总的来说,Jmagick提供了一种灵活且强大的方式,让Java开发者能够充分利用ImageMagick的图像处理...

    jmagick 软件、安装说明(window和linux两个版本)

    JMagick是一款强大的Java接口,它允许Java应用程序直接访问ImageMagick的图像处理功能。ImageMagick是一个广泛使用的跨平台图像处理库,能够读取、转换和写入多种图像格式。通过JMagick,开发者可以在Java环境中无缝...

    jmagick安装和配置

    JMagick是一款强大的Java接口,它允许Java应用程序与ImageMagick图像处理库进行交互,从而实现丰富的图像操作功能。本文将详细介绍如何在Java环境中安装和配置JMagick,以及如何使用提供的示例进行测试。 ### 1. ...

    jmagick.jar 用法

    JMagick 是一个 Java 包装器库,它提供了对 ImageMagick 图像处理库的访问。ImageMagick 是一个功能强大的跨平台图像处理工具,而 JMagick 则是将这些功能引入 Java 应用程序的桥梁。通过 JMagick,Java 开发者可以...

    64位Linux安装ImageMagick

    在64位Linux环境下安装ImageMagick,特别是与JMagick配合使用,是一个涉及多个步骤的过程,主要目的是为了实现Java应用程序对ImageMagick图像处理功能的调用。以下是详细的安装步骤和相关知识点: 1. **卸载旧版本*...

    jmagick6.4.0

    JMagick是ImageMagick图像处理库的一个Java接口,它为Java开发者提供了一种高效且灵活的方式来处理和操作图像。ImageMagick是一个功能丰富的开源跨平台工具集,能够读取、转换和写入多种图像格式。JMagick将这种能力...

    jmagick-win-6.3.9

    JMagick是ImageMagick的一个Java绑定,ImageMagick是一款强大的跨平台图像处理软件,支持超过100种不同的图像格式。通过JMagick,Java开发者可以直接在Java代码中调用ImageMagick的函数,进行图像的创建、编辑、合成...

    jmagick-win-6.3.9-Q16

    使用JMagick,你可以执行以下常见的图像处理操作: 1. 图像读取与写入:JMagick支持读取和写入各种图像格式,包括JPEG、PNG、GIF、BMP等。只需几行代码,就能轻松完成图像的导入和导出。 2. 图像缩放:通过设置...

    jmagick 用法

    JMagick 是一个 Java 的图像处理库,它提供了对 ImageMagick 图像处理库的 Java 接口。ImageMagick 是一个强大的跨平台命令行工具集,用于读取、转换和写入多种格式的图像。通过 JMagick,Java 开发者可以方便地在...

    java高清处理图片

    在实际项目开发中,图片处理是一项常见的需求,包括但不限于图片的压缩、尺寸调整以及添加水印等操作。传统的Java库虽然能够实现这些功能,但往往在图片质量方面不尽如人意,尤其是当图片尺寸被大幅度压缩时,画质...

    高质量图片处理Jmagick

    文件包含:ImageMagick-6.4.5-3-Q16-windows-dll.exe,jmagick.dll,jmagick.jar,压缩包中的版本统一,安装ImageMagick,复制ImageMagick安装目录的所有.dll文件和Jmagick.dll到,系统的system32下 即可使用,System.set...

    jmagick 例子

    Java作为一种广泛使用的编程语言,提供了多种图像处理库,其中JMagick是一个非常实用的工具,它为Java开发者提供了访问ImageMagick的强大功能。本文将深入探讨JMagick的使用实例以及如何在处理图像时防止内存泄露,...

Global site tag (gtag.js) - Google Analytics