GraphicsMagick+im4java与ImageMagick+JMagick
...
开发非要用到convert命令,这个是要安装了ImageMagick 才有的;
# yum install -y ImageMagick ImageMagick-devel
==============================================
[root@gg yum.repos.d]# yum install -y libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libtiff
[root@gg yum.repos.d]# wget http://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/1.3.18/GraphicsMagick-1.3.18.tar.gz/download
[root@gg yum.repos.d]# wget http://sourceforge.net/projects/im4java/files/im4java-1.4.0/im4java-1.4.0-bin.tar.bz2/download
[root@gg yum.repos.d]# wget http://sourceforge.net/projects/im4java/files/im4java-1.4.0/im4java-1.4.0-src.tar.bz2/download
[root@gg yum.repos.d]#./configure --prefix=/usr/local/GraphicsMagick --with-quantum-depth=8 --enable-share && make && make install
===============================================
convert命令是 imagemagick的;我在242上安装了imagemagick后;
convert命令有了;
GraphicsMagick安装已经是成功的了;
GraphicsMagick安装成功后,是用的gm命令,
通过下面的命令可以查看他们的版本;
=================================
[root@2 GraphicsMagick-1.3.18]# convert -version
Version: ImageMagick 6.5.4-7 2012-05-07 Q16 OpenMP http://www.imagemagick.org
Copyright: Copyright (C) 1999-2009 ImageMagick Studio LLC
[root@2 GraphicsMagick-1.3.18]# gm version
GraphicsMagick 1.3.18 2013-03-10 Q8 http://www.GraphicsMagick.org/
Copyright (C) 2002-2013 Gra
phicsMagick Group.
Additional copyrights and licenses apply to this software.
See http://www.GraphicsMagick.org/www/Copyright.html for details.
##################################################################
http://blog.sina.com.cn/s/blog_872758480100xufm.html
#安装GraphicsMagick
tar xvf GraphicsMagick-1.3.12.tar
./configure --without-prel --enable-shared --disable-openmp
make
make install
#安装IM4JAVA
直接下载个JAR包放在项目
http://blog.csdn.net/tangpengtao/article/details/9208047
最近团队内部分享GraphicsMagick+im4java 图片处理 就把如何安装,运行都统一整理一下。
详细如下:
在windows上安装ImageMagick:
download 地址:http://ftp.icm.edu.pl/pub/unix/graphics/GraphicsMagick/windows/
关于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
配置 环境变量加入PATH:E:\Program Files\GraphicsMagick-1.3.18-Q8(个人习惯放在E盘)
二. Linux下的安装与配置(下载时请注意 有32位系统包,有64位系统包,根据情况选择。这里是centos 64位的)
1、先查看所需的包是否安装
rpm -q libjpeg libjpeg-devel libpng libpng-devel freetype freetype- devel libtiff
先把一些图片补丁包安装。
download地址:http://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/1.3.18/GraphicsMagick-1.3.18.tar.gz/download
解压tar zvxf GraphicsMagick-1.3.18.tar.gz
cd GraphicsMagick-1.3.18
./configure --prefix=/usr/local/GraphicsMagick --with-quantum-depth=8 --enable-share
下载 im4java
downlaod 地址:http://sourceforge.net/projects/im4java/?source=directory
im4java的思路是通过线程或者进程执行graphicsmagick的命令,它的api只是为了能生成命令,而不是调用graphicsmagick的库。
我使用的最新的jar :im4java-1.4.0-1.5.jar
http://blog.csdn.net/whf102611/article/details/9223111
下载 .tar.gz 的源码包,进行解压
tar -xvzf GraphicsMagick-1.3.12.tar.gz
解压后,原来在的gz文件就变成了tar文件,进入文件夹
cd GraphicsMagick-1.3.12
安装之前,因为是图片处理,所以需要系统中安装了libpng和libjpeg的开发包,否则的话不会安装这两种文件的支持。
使用 configure 来进行自动的配置、build和安装
./configure
当然,可以通过 –prefix=PATH 来指定参数,还可以指定其他编译时的变量,这里使用了一个经过测试的 configure 配置,同时添加了 enable-sybol-prefix ,这样就避免了和系统中已有的 ImageMagick 的冲突,下面是完成的配置参数:
./configure '--build=i686-redhat-linux-gnu' '--host=i686-redhat-linux-gnu' '--target=i386-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr/local/sinasrv2' '--exec-prefix=/usr/local/sinasrv2' '--bindir=/usr/local/sinasrv2/bin' '--sbindir=/usr/local/sinasrv2/sbin' '--sysconfdir=/usr/local/sinasrv2/etc' '--datadir=/usr/local/sinasrv2/share' '--includedir=/usr/local/sinasrv2/include' '--libdir=/usr/local/sinasrv2/lib' '--libexecdir=/usr/local/sinasrv2/libexec' '--localstatedir=/usr/local/sinasrv2/var' '--sharedstatedir=/usr/local/sinasrv2/share/com' '--mandir=/usr/local/sinasrv2/share/man' '--infodir=/usr/local/sinasrv2/share/info' '--enable-libtool-verbose' '--with-included-ltdl' '--enable-shared' '--disable-static' '--with-modules' '--with-frozenpaths' '--without-perl' '--without-magick-plus-plus' '--with-quantum-depth=8' --enable-symbol-prefix
接下来就是安装
make
make install
###################################################################
http://xlogin.blog.51cto.com/3473583/717321
今天忙了一天就给系统安装了个ImageMagick和jmagick,为了下次不再走弯路,记录下安装的过程,也可以方便大家安装!
一、下载JMagick和ImageMagick
- wget http://downloads.jmagick.org/6.4.0/jmagick-6.4.0-src.tar.gz
- wget http://downloads.jmagick.org/6.4.0/ImageMagick-6.4.0-0.tar.gz
二、安装依赖包
- yum install libpng
- yum install libpng-devel
- yum install libjpeg
- yum install libjpeg-devel
- yum install gd
- yum install gd-devel
- yum install libtiff
- yum install libtiff-devel
三、安装ImageMagick
tar zxf ImageMagick/ImageMagick-6.4.0-0.tar.gz
cd ImageMagick-6.4.0/
./configure --prefix=/usr/local/ImageMagick --enable-shared --without-perl
make && make install
由于ImageMagic被安装在我们自行指定的/usr/local/ImageMagick,后面安装JMagic会找不到需要用到的ImageMagic的命令和库,因此需要配置一下操作系统:
编辑/etc/profile里面的PATH环境变量,在最后面加入:
export PATH=/usr/local/ImageMagick/bin:$PATH
编辑/etc/ld.so.conf,加入: /usr/local/ImageMagick/lib
执行命令: ldconfig
将ImageMagick的库加入系统联接库,重新链接服务器即可!
运行convert --version
[root@BeeEye logs]# convert --version
Version: ImageMagick 6.4.0 12/27/11 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2008 ImageMagick Studio LLC
四、安装并配置JMagick
tar xzvf jmagick-6.4.0-src.tar.gz
mv 6.4.0/ /usr/local/jmagick
cd /usr/local/jmagick/
env
./configure --with-java-home=/usr/java/jdk1.7.0/ --with-magick-home=/usr/local/ImageMagick
make && make install
cp /usr/local/jmagick/lib/libJMagick-6.4.0.so $JAVA_HOME/jre/lib/amd64/libJMagick.so
cp /usr/local/jmagick/lib/jmagick-6.4.0.jar $JRE_HOME/lib/jmagick.jar
备注:$JAVA_HOME=/usr/java/jdk1.7.0/
$JRE_HOME=$JAVA_HOME/jre
- 懒人是这么干的:
- yum install libpng libpng-devel libjpeg libjpeg-devel gd gd-devel libtiff libtiff-devel
- yum install ImageMagick ImageMagick-devel
本文出自 “虫子的博客” 博客,请务必保留此出处http://xlogin.blog.51cto.com/3473583/717321
#################################################################
http://my.oschina.net/u/1245614/blog/160051
之前有写过imageMagick压缩图片的文章,但是那篇文章中用到的是jmagick。
JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对ImageMagick API的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。JMagick只实现了ImageMagicAPI的一部分功能,它的发行遵循LGPL协议。
而且jmagick有一个致命的缺点,在web应用中,部署在tomcat服务器中,过一阵子可能出现tomcat crash的问题。由此,我也不建议使用jmagick。
后来参考了javaeye上的文章,发现imageMagick还有其他的接口,那就是im4java。
im4java是ImageMagick的另一个Java开源接口。与JMagick不同之处在于im4java只是生成与ImageMagick相对应的命令行,然后将生成的命令行传至选中的IM-command(使用java.lang.ProcessBuilder.start()实现)来执行相应的操作。它支持大部分ImageMagick命令,可以针对不同组的图片多次复用同一个命令行。
这篇文章,我就是主要讲解im4java。经过测试,im4java也是能够高清压缩图片,而且它也特别强大,至少一些基本常见的业务都是可以完美实现的。
http://blog.chinaunix.net/uid-23012478-id-2573919.html
现在做的网站需要保存用户上传的图片,同时需要进行压缩和图片切割等特殊效果的处理。
一开始我们用的是JMagick+ ImageMagick处理用户上传的图片,但是存在一个非常严重的问题,Tomcat在跑了大概10天左右后会crash掉,异常内容为:
- magick.MagickException: Unable to retrieve handle
从表象看,应该是没有释放ImageMagick的句柄导致的,查找API后发现程序中没有调用
- magick.MagickImage.destroyImages() Called by finalize to deallocate the image handle.
在程序加上本方法,情况有所改善,大概在40天左右后出现了一次tomcat进程crash。
似乎并没有从本质上找到问题的根本。。。
在JMagick的邮件列表中找到一份我认为有价值的邮件,http://sourceforge.net/mailarchive/message.php?msg_name=20cf28cd1002231148s33c99843q875f59906dd32b8b%40mail.gmail.com
里面讲到了JMagick作为应用服务的缺点,并建议可以使用IM4JAVA:
- The "JNI hazard" here is that if something you use (f.ex libtiff for reading
- TIFF files) has a memory bug then it can make your whole JVM crash. Thats of
- course frustrating and therefore its great to have im4java around, which
- starts IM as an external process, so JVM crashes are avoided.
- * *
- Coolest thing would be if JMagick and im4java could have the same API so it
- was easy to switch depending on luckyness. Ive asked the author of im4java
- to attemt to be as compatible as possible, but as im4java is very much
- different internally its limited how much can be done in that direction.
- If you don't like the risk, stick to im4java. If your want optimal
- performance give JMagick a try.
- And, its not JMagick that is buggy, its what it depends on (hereunder IM)
- that is not always (memory) bug free on long running processes.
- I also have never seen a mismatch between JMagick binary and ImageMagick
- binaries leading to crashes.
所以我把思路转向了IM4Java。
IM4Java的官网 http://im4java.sourceforge.net/index.html 。
在 Developer's Guide 中提到im4java支持ImageMagick和GraphicsMagick。GraphicsMagick是ImageMagick的一个分支,相对于ImageMagick而言,TA处理速度更快,消耗资源更少,并且大的图片处理网站,如 Flickr and Etsy 已经在使用TA了。
下载GraphicsMagick的Q8版本(还有Q16、Q32的,版本见的区别可以查看ImageMagick的官网,大致意思是每像素用多少bit来存储信息,16、32要比8消耗更多的内存^_^)。
下面这段话是在GraphicsMagick的邮件列表中找到的:
- > I've got question about IM Q16 & Q8. What's a difference between that two versions?
- I know, that Q16 version takes 2 times more memory than Q8.
- But is that so great precision in algorithm is needed in converting jpegs, gif or pngs
- (I need IM for converting that types of formats)
- & JPEG and GIF only have 8-bit versions, so there will almost certainly be no benefit to using Q16.
- It is possible to have 16-bit PNGs, but if you have to ask, you probably don't have to worry about it
安装GraphicsMagick和IM4Java非常简单,按照官网做就ok了,下面是一个简单的例子:
http://deeplyloving.iteye.com/blog/1867002
结论,放弃jmagick吧。im4java 是正确的选择
http://xiaonanzhi.com/?p=76313
记得以前做图片相关需求的时候,使用的是Jmagick+ImageMagick,一直有一个难以解决的问题,就是使用Jmagick之后,往往运行数天后就会导致jboss的jvm崩溃掉。
这几天发现了一个新东西,或能解决这个老问题,记录一下,留备后用,那就是ImageMagick的另外一种java接口:IM4java。
IM4Java和Jmagick不同之处,在于前者不是通过JNI的方式来调用ImageMagick,而是生成命令来调用,据官网上说的,这样做有几个好处,
Advantages of im4java: the interface of the IM commandline is quite stable, so your java program (and the im4java-library) will work across many versions of IM. im4java also provides a better OO interface (the “language” of the IM-commandline with it’s postfix-operation notation translates very easily into OO-notation). And most important: you can use im4java everywhere JMagick can’t be used because of the JNI hazard (e.g. java application servers).
im4java的优点:im命令行接口相当稳定,可以适应多种版本的IM,它还提供了友好的OO接口,最重要的是,它不存在“JNI风险”
about JNI hazard
Running native code using JNI from within java always imposes additional risks. The JVM is no longer sandboxed, so there might be some security issues. In addition, there could be errors like memory leaks or memory corruption within the JNI-layer (JMagick) or within the native code (ImageMagick).
使用JNI运行本地代码始终面临额外风险,JVM不在被封闭于沙箱内,因此有可能会有一些安全问题,此外,还有可能会在JNI层引起内存泄漏和内存破坏。
This is especially dangerous for long running processes (typically web-application-servers). Memory corruption or a segmentation fault (maybe triggered by a intentionally manipulated image) might bring down the whole server.
特别是对于一些要长期运行的进程(典型如web 服务器),因为操作图片啥的有可能引起的内存错误可能会把整个服务给down掉。
ps:
配合im4java使用的,也可以是GraphicsMagick,这是从ImageMagick的分支发展而来的图片处理工具,据它官网上自豪的说,它是处理图片的瑞士军刀(GraphicsMagick is the swiss army knife of image processing. ),看来相当值得一试。
ps2:
windows下使用的话,安装好GraphicsMagick后,需要重启电脑才行哦,这点问题也折腾了我一个小时,呵呵,给后来人一点提示。
http://hejianke83.blog.163.com/blog/static/6076516201231105816964/
做网站往往需要处理各种各样的图片,对于jdk自带的一套图片处理库,他的特点是稳定简单,但是对图片处理来说,性能确实很不咋的!
于是我转向了以C++处理为核心的java处理包—— JMagick+ ImageMagick 。jmagick是一个开源的API,利用JNI(Java Native Interface)技术实现了对ImageMagickAPI 的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。实地测试后发现,速度果然提高了不少,但是质量却大大下降了,在大量测试数据下,每生成100张图片约会有5张图片生成出现错误,还会出现down机的情况。对于一个商业应用来说,这个是绝对不可以接受的,于是对jmagick的研究暂放一段时间。
经过韩boss指导,我转向了 GraphicsMagick+im4java 的研究,输入关键词google一下,很容易就可以找到http://javantsky.iteye.com/blog/747807 ,这篇博客,文章介绍GraphicsMagick+im4java 性能高,运行稳定!
注意事项:如果是在windows下运行,则需要配置ImageMagick的安装路径:
我是配置在config.properties文件里了,比如内容如下所示:
imageMagickPath=C://Program Files//GraphicsMagick-1.3.14-Q16
如果是在linux平台下,则不需要配置。
....