- 浏览: 2151 次
- 性别:
- 来自: 上海
文章分类
最新评论
Pure java的图片操作,不依赖操作系统的功能,图片运算量比较大,如果批处理图片或图片size较大的话(如1M左右的图片)的话,性能肯定不能满足;用JNI(java本地调用),依赖操作系统提供的功能, 操作批量、大图片,就成为首选方案。
我在winxp环境下安装调试JMagick,并成功运行了测试code,实现了图片的多种操作,缩略图、旋转、设置边框、设置背景等等...,下面记录安装及配置历史,分享给大家:
ImageMagick, JMagick安装、配置及使用:
平台:winXP
1. 安装ImageMagick(ImageMagick website:http://www.imagemagick.org/script/index.php)
下载并安装ImageMagick。file name: ImageMagick-6.2.6-8-Q16-windows-dll.exe
download address: http://prdownloads.sourceforge.net/imagemagick/ImageMagick-6.2.6-8-Q16-windows-dll.exe?download
安装成功后,
把install path加入系统path(有些版本自己会默认添加),以便能调用dll.保险起见,
然后再把安装目录下的所有dll文件复制到C:\WINDOWS\system32下(因为我出现过只添加路径而不复制这些文件到C:\WINDOWS\system32,程序运行提示出错的情况)
2. 安装JMagick(JMagick website: http://www.yeo.id.au/jmagick/)
下载JMatick。file name: jmagick-6.2.6-win.zip
download address: http://www.yeo.id.au/jmagick/quickload/win-6.2.6/jmagick-6.2.6-win.zip
解压后
把jmagick-6.2.6-win\q16\jmagick.dll copy 到c:\windows\system32目录下,如果程序在运行的时候提示:找不到jmagick路径,用System.out.println(System.getProperty("java.library.path")). 打印出当前环境的路径,然后再把jmagick.dll 复制到其中的一个路径文件夹中
notes: If you are using Tomcat, or other java applications which have their own classloaders,
方法1: 把jmagick-6.2.6-win\jar\jmagick.jar copy到项目的WEB-INF\lib目录下,然后在服务启动初始化的时候,System.setProperty("jmagick.systemclassloader","no"); (可以在过滤器的那个类里面加上这句话,也可以自己手动建立一个初始化的serverlet,然后加上这句话)
方法2:简单的方法,把jmagick-6.2.6-win\jar\jmagick.jar 复制到%JAVA_HOME%\jre\lib\ext.就ok了
下面总结下windows + tomcat环境的安装配置
1:下载安装ImageMagick-6.3.4-10-Q16-windows-dll.exe
2:把install path加入系统path,然后把install path下的dll文件复制到C:\WINDOWS\system32
3:下载JMatick。file name:jmagick-6.2.6-win-im-6.2.9.zip
4:把q16目录下的jmagick.dll复制到D:\Tomcat5.0\bin下(D:\tomcat是安装路径)
5:把jar_15目录下的jmagick.jar复制到%JAVA_HOME%\jre\lib\ext.
6:完毕,测试
PS:
web应用如果部署到tomcat下,那么最好在catalina.bat文件中改变如下设置
set JAVA_OPTS=%JAVA_OPTS% -Xms256M -Xmx768M -XX:MaxPermSize=128M -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="${catalina.base}\conf\logging.properties"
避免heap溢出的问题,参数看你自己的机器而定。( -Xms256M -Xmx768M -XX:MaxPermSize=128M )
下面把jmagick-6.2.6-win-im-6.2.9目录下的说明文档附在这里,注意看他的Getting Started和Notes部分
This archive contains jmagick.dll 6.2.6 compiled against
ImageMagick 6.2.9.
q8 contains jmagick.dll compiled against ImageMagick 6.2.9-Q8
http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q8-windows-dll.exe
q16 contains jmagick.dll compiled against ImageMagick 6.2.9-Q16
http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q16-windows-dll.exe
It was built with gcc mingw 3.4.2 on Windows 2000 and Sun JDK 1.5.0 release 5.
Getting Started:
1. Install ImageMagick
2. Copy the jmagick.dll corresponding with the Q8 or Q16 ImageMagick you installed to
somewhere in your PATH. I would put it in the same directory as ImageMagick.
3. Put jmagick.jar in your java classpath. If you are using Tomcat, or other java
applications which have their own classloaders, move the jar up to a more global scope.
If you had placed the jar in WEB-INF/lib and reload the webapp, java will attempt to
reload jmagick.dll twice, and it will fail. By moving the jar up, the library will only
be loaded once per jvm lifetime. I place mine in %JAVA_HOME%\jre\lib\ext.
Notes:
-------------------------------------------------------------------------------------------------
If you see exceptions such as UnsatisfiedLinkError, you did one of the above steps incorrectly
or you are not using the JVM/ImageMagick versions you think you are. Have your java code
print out the java.library.path -- System.getProperty("java.library.path"). Check to ensure
that jmagick.dll is in one of those directories.
-------------------------------------------------------------------------------------------------
If you run your java application as a service, any changes to the PATH environment variable will
not be visible to java until you reboot.
-------------------------------------------------------------------------------------------------
This is the first time I have built jmagick.dll using gcc/mingw. Let me know if you have any issues.
Mark Deneen
mdeneen at gmail dot com
---------------------------------------------------------------------------------------------------------------------------------
例子:
/**
* 以正方形比例输出缩放图片
*
* MaxBorderLen : 正方形边长
*/
public void CoutImage4Square(String srcImage, String DestImage, int MaxBorderLen){
System.setProperty("jmagick.systemclassloader","no");
try{
ImageInfo info = new ImageInfo(srcImage);
MagickImage image = new MagickImage(info);
//取长宽
Dimension dim = image.getDimension();
double wImage = dim.getWidth();
double hImage = dim.getHeight();
Boolean bWBig = wImage > hImage? true:false ;
if (bWBig)
{//长大过高
hImage = MaxBorderLen * ( hImage / wImage);
wImage = MaxBorderLen;
}
else
{//反之
wImage = MaxBorderLen * ( wImage / hImage);
hImage = MaxBorderLen;
}
//输出
MagickImage scaled = image.scaleImage((int)wImage, (int)hImage);
scaled.setFileName(DestImage);
scaled.writeImage(info);
}catch(MagickApiException ex){
}catch(MagickException ex){
}
}
-------------------------------------------------------------------------------------------------------------------------
jmagicklogo.png JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对ImageMagickAPI的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。JMagick只实现了ImageMagicAPI的一部分功能,它的发行遵循LGPL协议。
ImageMagick请参考其官方网站或ImageMagick学习。
下载安装
安装要求:
1. 如果通过CVS下载的源码,则需要GNU Autoconf
2. GNU Make 3.77或更新版本(我用的是3.7.9).
3. 一个ANSI C 编译器,建议用 GNU 或 EGCS 的编译器
4. ImageMagick 5.5.6或更新版本
5. Java2 JDK( JMagick是在 Sun JDK 1.4.1上开发,但运行好象不用那么高,我用的是1.3.1)
下载过程如下:
用CVS取源码:
cvs -d :pserver:anonymous@jmagick.yeo.nu:/var/cvs/jmagick login
Password: jmagick
cvs -d :pserver:anonymous@jmagick.yeo.nu:/var/cvs/jmagick checkout Jmagick
也可以直接下载JMagick-5.5.6-X.tar.gz包。
根据INSTALL文档指示,编译如下:
对下载包:
tar zxvf Jmagick-5.5.6-X.tar.gz
cd Jmagick-5.5.6-X
对CVS取回来的源码
cd JMagick
autoconf
以下为两种情况都相同的部分
./configure
make all
su
make install
make javadoc
make test <--如果x-win没有启动,大部分测试是成功的,但也会显示一些错误信息,因为没法显示图片。
通过JMagick,实现JSP上传图片文件后生成缩略图的功能
Jmagick自身带的Test.java程序,演示了如何使用JMagick来实现图片的复制、信息获取、斜角、特效、组合、改变大小、加边框、旋转、切片、改变格式、去色等等功能,编程的重要参考。
下面主要描述如何实现将用JSP上传的图片,进行压缩生成缩略图。用jsp上传文件的全部代码,参见利用apache-commons-fileupload写jsp上传文件,下面只描述图片压缩的实现。
$TOMCATHOME/webapps/yourproject/WEB-INF/classes/com/hedong/JMagick/PicResize.java
package com.hedong.JMagick;
import org.apache.log4j.*;
import java.awt.Dimension;
import java.awt.Rectangle;
import magick.ImageInfo;
import magick.MagickImage;
import magick.MagickException;
import magick.QuantizeInfo;
import magick.ColorspaceType;
import magick.MagickApiException;
import magick.PixelPacket;
import magick.DrawInfo;
import magick.ResolutionType;
import magick.ProfileInfo;
import magick.MontageInfo;
import magick.Magick;
import magick.MagickInfo;
import java.io.IOException;
import java.io.FileOutputStream;
public class PicResize {
static Logger logger = Logger.getLogger(PicResize.class.getName());
public void resize(String picFrom,String picTo) {
try {
// Resize
ImageInfo info = new ImageInfo(picFrom);
MagickImage image = new MagickImage(new ImageInfo(picFrom));
MagickImage scaled = image.scaleImage(100, 80);//小图片文件的大小.
scaled.setFileName(picTo);
scaled.writeImage(info);
logger.info("alter pic form "+picFrom +" to "+picTo);
} catch(MagickApiException ex) {
logger.error("MagickException: " + ex + ": " + ex.getReason() + ", " + ex.getDescription());
} catch(MagickException ex) {
logger.error("MagickException: " + ex);
}
}
}
注意,需要将编译JMagick生成的lib/jmagick.jar包,复制到$TOMCATHOME/webapps/yourproject/WEB-INF/lib目录下。
******************************************************************************************************************************
---------------------------------------------------------------------------------------------------------------------------------
MagickImage大家可能都用过,它主要处理一些图片,它可以处理90多种的图片类型.它的功能非常强大,而我们在实际的应用中,主要用到它的缩放,截取,复制功能。其他的一些如写入文字,加背景色,旋转。。。用的少。
第一个常用的功能缩放(scaleImage)。
首先初始化一个ImageInfo对象,就是加载要处理的图片路径.
ImageInfo info= new ImageInfo(“F:\\images\\1.jpg”);
然后再把图片信息ImageInfo作为构造MagickImage的参数传入。 MagickImage 是处理图片的主要类。
MagickImage image= new MagickImage(info);
再对MagickImage的对象选取方法。进行缩放。scaleImage(w, h),第一个参数指按比例缩放后的宽度,第二个就是高度了。
MagickImage cropped= image .scaleImage(40, 80);
最后把处理完的图片命名(1_scale.jpg)存放到指定的目录下(F:/images)。
cropped.setFileName("F:\\images\\1_scale.jpg");
writeImage指定源图片的ImageInfo 对象。
cropped.writeImage(info);
这样就简单的把原来的图片缩放成40X80的1_scale.jpg新图片了。
第二个常用的功能截取(cropImage)。
首先初始化一个ImageInfo对象,就是加载要处理的图片路径.
ImageInfo info= new ImageInfo(“F:\\images\\1.jpg”);
再初始化一个合适的宽度和高度,以及起始坐标。就是要处理后图片的大小形状(矩形)。
Rectangle rect = new Rectangle(0, 0, 40, 80);
x,y就是起始点的坐标,一般从图片的左上角开始,默认为0.w,h就是实际的宽度和高度了,不是按比例截取后的宽度和高度。
这一点与上面的不同。
然后再把图片信息ImageInfo作为构造MagickImage的参数传入。 MagickImage 是处理图片的主要类。
MagickImage image= new MagickImage(info);
再对MagickImage的对象选取方法。进行实际大小的截取。cropImage(rect),参数指图片的范围。
MagickImage cropped = image.cropImage(rect);
最后把处理完的图片命名(1_crop.jpg)存放到指定的目录下(F:/images)。
cropped.setFileName("F:\\images\\1_crop.jpg");
writeImage指定源图片的ImageInfo 对象。
cropped.writeImage(info);
这样就简单的把原来的图片截取成40X80的1_crop.jpg新图片了。原图片的规格一定大于40X80,要不然截取的有空白了。自己试试就知道了。
最后一个常用的功能复制(copy),这个最简单了。
首先初始化一个ImageInfo对象,就是加载要处理的图片路径.
ImageInfo info= new ImageInfo(“F:\\images\\1.jpg”);
然后再把图片信息ImageInfo作为构造MagickImage的参数传入。 MagickImage 是处理图片的主要类。
MagickImage image= new MagickImage(info);
最后把处理完的图片命名(1_copy.jpg)存放到指定的目录下(F:/images)。
image.setFileName("F:\\images\\1_copy.jpg");
writeImage指定源图片的ImageInfo 对象。
image.writeImage(info);
这个没有用到(cloneImage)方法,简单的理解为改变图片的存放路径就可以了,这样就很轻松的实现了copy了,比它自带的cloneImage简单多了。
******************************************************************************************************************************
Posted by Hilton at October 29, 2003 12:13 AM | TrackBack
Comments
然后我把所有的*.dll文件全部COPY到system32目录下,结果,它不报错了,直接把WEB服务器给搞停了。
Posted by: rosen at April 27, 2004 01:42 PM
已经按照各位的方法,但还是不行,报错:无法找到动态链接库CORE_RL_magick_.dll。
Posted by: rosen at April 27, 2004 01:21 PM
Sorry 心急看错了!!!
Posted by: rosen at April 27, 2004 12:32 PM
JMagick包内没有PicResize.java类,而我恰恰需要缩略图功能!
Posted by: rosen at April 27, 2004 12:24 PM
to Hilton
我装了imagemagick6,然后也把jmagick.dll拷到system32下,但是为什么运行时还是报错啊。报错:无法定位程序输入点DestroyMagickInfo于动态链接库CORE_RL_magick_.dll上
Posted by: heyq at April 21, 2004 02:40 PM
today is my birthday
Posted by: t-shirts-man at April 6, 2004 05:20 PM
我明明在windowsXP的 cmd 中 运行 class文件,是可以处理图片的,但是为什么放到 tomcat 里面去运行,就报Internal error() 呢???
而且internal error() 那一大串的东西,我根本看部懂,又不是说找不到 什么其他的类,
啊!! 烦啊!!! 大哥指教一下好吗???
Posted by: Sean CWJ at April 3, 2004 06:42 PM
楼上这位朋友我现在正在看imageJ的东西,但一下子没有搞好,想得到你的帮助呀!
联系一下!QQ 4414155
Posted by: david at March 23, 2004 11:07 AM
先装ImageMagick.
Posted by: Hilton at February 18, 2004 01:19 PM
我在LINUX下安装他出现Unable to find ImageMagick header files
这是怎么回事?然后跳出安装。我是在他主页上下载了安装的。试了两个版本都如此。
Posted by: huifei at February 18, 2004 01:15 PM
To Hilton :
谢谢你的帮助。
BTW,与初用者分享一点:win环境下,只下载jmagick.jar和jmagick.dll是不够的,还需要下载其他的dll一起使用才可以,给大家一个链接http://www.infomall.cn /cgi-bin/mallgate/20040514/http://www.yeo.id.au/jmagick/quickload/win- 5.5.7/ImageMagick-5.5.7-Q8-windows-dll.exe,安装后记得要重新启动pc。我听从下面前辈的也将 jmagick.dll放在了system32目录下面了。
Posted by: ryan at January 13, 2004 10:56 AM
To ryan;
在$JAMGICKHOME/src/test目录下。我把它打了个包,你也可以从 http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/archives/docs/test.tar.gz 下载。
Posted by: Hilton at January 12, 2004 11:52 AM
你们说的Test.java在哪儿?
Posted by: ryan at January 12, 2004 11:44 AM
//…………………………………………………………
我在JmagicK的主页上找不到JmagicK实现的API的有关文档,所以还是不知道具体怎么用JmagicK,请问版主那里有文档吗?或者有其他助于学JmagicK的好东东。
Posted by: zhm at December 12, 2003 08:39 AM
//…………………………………………………………
zhm,你可以去下载http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.yeo.id.au/jmagick/quickload/JMagick-5.5.1-bin-win32.zip
这个包,里面包括了doc。
Posted by: at January 12, 2004 11:39 AM
about java.lang.UnsatisfiedLinkError: no JMagick in java.library.path.
copy libJMagick.so $resin_home/lib
Posted by: 汤汤 at January 2, 2004 12:14 PM
imagesj
应用
Posted by: QQ吧精彩 at December 30, 2003 01:12 PM
老板又要我研究用JMagicK做动画,又要研究了。。。。。
Posted by: zhm at December 24, 2003 06:48 PM
To zhm;
祝贺你安装jmagick成功!
去http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.dependencywalker.com/ 下载这个程序,安装运行它,然后利用其"open"功能打开要看的程序就可以了。
Hilton
Posted by: Hilton at December 19, 2003 01:32 PM
问一下版主,怎么用depends看一个dll依赖于哪些文件?谢谢。
Posted by: zhm at December 19, 2003 10:22 AM
呵呵,我的也是在Windows下运行的,折腾了一个星期,总算成功了,要把那个jmagick.dll考到系统的System32目录下面,然后下载一个ImageMagick-5.5.7-Q16-windows-dll.exe安装了,一切都OK了。
Posted by: zhm at December 19, 2003 10:21 AM
呵呵,我的也是在Windows下运行的,折腾了一个星期,总算成功了,要把那个jmagick.dll考到系统的System32目录下面,然后下载一个ImageMagick-5.5.7-Q16-windows-dll.exe安装了,一切都OK了。
Posted by: zhm at December 19, 2003 10:21 AM
是不是需要装imagemagick?
你用depends看看,这个dll依赖于哪些文件?
真不好意思,我用jmagick是在linux下的,所以对windows下的东东不是很熟悉。
Hilton
Posted by: Hilton at December 13, 2003 09:39 PM
我把jmagick.dll和jmagick.jar都放到system32下但出现 java.lang.UnsatisfiedLinkError: C:\WINDOWS\system32\JMagick.dll: Can't find dependent libraries。我是在IDEA开发中调用的,总是不成功,为什么jmagick还要有dll?不象其他java的工具包?
Posted by: at December 13, 2003 11:59 AM
To zhm,
JMagick的文档确实很少,你可以参考http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.yeo.id.au/cgi-bin/jmagick/fom 。或去ImageMagick的主页看一下,因为jmagick仅是对imagemagick的一个java包装。
另外,这个包中的Test.java,把几乎所有的功能都演示了一下,也可以看看。
Hilton
Posted by: Hilton at December 12, 2003 08:45 AM
我在JmagicK的主页上找不到JmagicK实现的API的有关文档,所以还是不知道具体怎么用JmagicK,请问版主那里有文档吗?或者有其他助于学JmagicK的好东东。
Posted by: zhm at December 12, 2003 08:39 AM
放在运行程序时的当前目录,或者放到windows的system32目录下试试。
Posted by: Hilton at December 11, 2003 10:00 PM
请问我在运行是出现java.lang.UnsatisfiedLinkError: no JMagick in java.library.path错误。jmagick.dll应该怎么用?
Posted by: at December 11, 2003 06:11 PM
你好,我最近也在看基于JAVA的图像处理:
你看看这个如何:ImageJ
http://www.infomall.cn/cgi-bin/mallgate/20040514/http://rsb.info.nih.gov/ij/
我想利用这个包将图片动态生成各种幅面的缩略图(包含站点水印)。然后图片可以通过PATH_INFO解析参数,比如生成一个200*150的水印:
http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.chedong.com/thumb/200/150/orig.jpg
我在winxp环境下安装调试JMagick,并成功运行了测试code,实现了图片的多种操作,缩略图、旋转、设置边框、设置背景等等...,下面记录安装及配置历史,分享给大家:
ImageMagick, JMagick安装、配置及使用:
平台:winXP
1. 安装ImageMagick(ImageMagick website:http://www.imagemagick.org/script/index.php)
下载并安装ImageMagick。file name: ImageMagick-6.2.6-8-Q16-windows-dll.exe
download address: http://prdownloads.sourceforge.net/imagemagick/ImageMagick-6.2.6-8-Q16-windows-dll.exe?download
安装成功后,
把install path加入系统path(有些版本自己会默认添加),以便能调用dll.保险起见,
然后再把安装目录下的所有dll文件复制到C:\WINDOWS\system32下(因为我出现过只添加路径而不复制这些文件到C:\WINDOWS\system32,程序运行提示出错的情况)
2. 安装JMagick(JMagick website: http://www.yeo.id.au/jmagick/)
下载JMatick。file name: jmagick-6.2.6-win.zip
download address: http://www.yeo.id.au/jmagick/quickload/win-6.2.6/jmagick-6.2.6-win.zip
解压后
把jmagick-6.2.6-win\q16\jmagick.dll copy 到c:\windows\system32目录下,如果程序在运行的时候提示:找不到jmagick路径,用System.out.println(System.getProperty("java.library.path")). 打印出当前环境的路径,然后再把jmagick.dll 复制到其中的一个路径文件夹中
notes: If you are using Tomcat, or other java applications which have their own classloaders,
方法1: 把jmagick-6.2.6-win\jar\jmagick.jar copy到项目的WEB-INF\lib目录下,然后在服务启动初始化的时候,System.setProperty("jmagick.systemclassloader","no"); (可以在过滤器的那个类里面加上这句话,也可以自己手动建立一个初始化的serverlet,然后加上这句话)
方法2:简单的方法,把jmagick-6.2.6-win\jar\jmagick.jar 复制到%JAVA_HOME%\jre\lib\ext.就ok了
下面总结下windows + tomcat环境的安装配置
1:下载安装ImageMagick-6.3.4-10-Q16-windows-dll.exe
2:把install path加入系统path,然后把install path下的dll文件复制到C:\WINDOWS\system32
3:下载JMatick。file name:jmagick-6.2.6-win-im-6.2.9.zip
4:把q16目录下的jmagick.dll复制到D:\Tomcat5.0\bin下(D:\tomcat是安装路径)
5:把jar_15目录下的jmagick.jar复制到%JAVA_HOME%\jre\lib\ext.
6:完毕,测试
PS:
web应用如果部署到tomcat下,那么最好在catalina.bat文件中改变如下设置
set JAVA_OPTS=%JAVA_OPTS% -Xms256M -Xmx768M -XX:MaxPermSize=128M -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="${catalina.base}\conf\logging.properties"
避免heap溢出的问题,参数看你自己的机器而定。( -Xms256M -Xmx768M -XX:MaxPermSize=128M )
下面把jmagick-6.2.6-win-im-6.2.9目录下的说明文档附在这里,注意看他的Getting Started和Notes部分
This archive contains jmagick.dll 6.2.6 compiled against
ImageMagick 6.2.9.
q8 contains jmagick.dll compiled against ImageMagick 6.2.9-Q8
http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q8-windows-dll.exe
q16 contains jmagick.dll compiled against ImageMagick 6.2.9-Q16
http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q16-windows-dll.exe
It was built with gcc mingw 3.4.2 on Windows 2000 and Sun JDK 1.5.0 release 5.
Getting Started:
1. Install ImageMagick
2. Copy the jmagick.dll corresponding with the Q8 or Q16 ImageMagick you installed to
somewhere in your PATH. I would put it in the same directory as ImageMagick.
3. Put jmagick.jar in your java classpath. If you are using Tomcat, or other java
applications which have their own classloaders, move the jar up to a more global scope.
If you had placed the jar in WEB-INF/lib and reload the webapp, java will attempt to
reload jmagick.dll twice, and it will fail. By moving the jar up, the library will only
be loaded once per jvm lifetime. I place mine in %JAVA_HOME%\jre\lib\ext.
Notes:
-------------------------------------------------------------------------------------------------
If you see exceptions such as UnsatisfiedLinkError, you did one of the above steps incorrectly
or you are not using the JVM/ImageMagick versions you think you are. Have your java code
print out the java.library.path -- System.getProperty("java.library.path"). Check to ensure
that jmagick.dll is in one of those directories.
-------------------------------------------------------------------------------------------------
If you run your java application as a service, any changes to the PATH environment variable will
not be visible to java until you reboot.
-------------------------------------------------------------------------------------------------
This is the first time I have built jmagick.dll using gcc/mingw. Let me know if you have any issues.
Mark Deneen
mdeneen at gmail dot com
---------------------------------------------------------------------------------------------------------------------------------
例子:
/**
* 以正方形比例输出缩放图片
*
* MaxBorderLen : 正方形边长
*/
public void CoutImage4Square(String srcImage, String DestImage, int MaxBorderLen){
System.setProperty("jmagick.systemclassloader","no");
try{
ImageInfo info = new ImageInfo(srcImage);
MagickImage image = new MagickImage(info);
//取长宽
Dimension dim = image.getDimension();
double wImage = dim.getWidth();
double hImage = dim.getHeight();
Boolean bWBig = wImage > hImage? true:false ;
if (bWBig)
{//长大过高
hImage = MaxBorderLen * ( hImage / wImage);
wImage = MaxBorderLen;
}
else
{//反之
wImage = MaxBorderLen * ( wImage / hImage);
hImage = MaxBorderLen;
}
//输出
MagickImage scaled = image.scaleImage((int)wImage, (int)hImage);
scaled.setFileName(DestImage);
scaled.writeImage(info);
}catch(MagickApiException ex){
}catch(MagickException ex){
}
}
-------------------------------------------------------------------------------------------------------------------------
jmagicklogo.png JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对ImageMagickAPI的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。JMagick只实现了ImageMagicAPI的一部分功能,它的发行遵循LGPL协议。
ImageMagick请参考其官方网站或ImageMagick学习。
下载安装
安装要求:
1. 如果通过CVS下载的源码,则需要GNU Autoconf
2. GNU Make 3.77或更新版本(我用的是3.7.9).
3. 一个ANSI C 编译器,建议用 GNU 或 EGCS 的编译器
4. ImageMagick 5.5.6或更新版本
5. Java2 JDK( JMagick是在 Sun JDK 1.4.1上开发,但运行好象不用那么高,我用的是1.3.1)
下载过程如下:
用CVS取源码:
cvs -d :pserver:anonymous@jmagick.yeo.nu:/var/cvs/jmagick login
Password: jmagick
cvs -d :pserver:anonymous@jmagick.yeo.nu:/var/cvs/jmagick checkout Jmagick
也可以直接下载JMagick-5.5.6-X.tar.gz包。
根据INSTALL文档指示,编译如下:
对下载包:
tar zxvf Jmagick-5.5.6-X.tar.gz
cd Jmagick-5.5.6-X
对CVS取回来的源码
cd JMagick
autoconf
以下为两种情况都相同的部分
./configure
make all
su
make install
make javadoc
make test <--如果x-win没有启动,大部分测试是成功的,但也会显示一些错误信息,因为没法显示图片。
通过JMagick,实现JSP上传图片文件后生成缩略图的功能
Jmagick自身带的Test.java程序,演示了如何使用JMagick来实现图片的复制、信息获取、斜角、特效、组合、改变大小、加边框、旋转、切片、改变格式、去色等等功能,编程的重要参考。
下面主要描述如何实现将用JSP上传的图片,进行压缩生成缩略图。用jsp上传文件的全部代码,参见利用apache-commons-fileupload写jsp上传文件,下面只描述图片压缩的实现。
$TOMCATHOME/webapps/yourproject/WEB-INF/classes/com/hedong/JMagick/PicResize.java
package com.hedong.JMagick;
import org.apache.log4j.*;
import java.awt.Dimension;
import java.awt.Rectangle;
import magick.ImageInfo;
import magick.MagickImage;
import magick.MagickException;
import magick.QuantizeInfo;
import magick.ColorspaceType;
import magick.MagickApiException;
import magick.PixelPacket;
import magick.DrawInfo;
import magick.ResolutionType;
import magick.ProfileInfo;
import magick.MontageInfo;
import magick.Magick;
import magick.MagickInfo;
import java.io.IOException;
import java.io.FileOutputStream;
public class PicResize {
static Logger logger = Logger.getLogger(PicResize.class.getName());
public void resize(String picFrom,String picTo) {
try {
// Resize
ImageInfo info = new ImageInfo(picFrom);
MagickImage image = new MagickImage(new ImageInfo(picFrom));
MagickImage scaled = image.scaleImage(100, 80);//小图片文件的大小.
scaled.setFileName(picTo);
scaled.writeImage(info);
logger.info("alter pic form "+picFrom +" to "+picTo);
} catch(MagickApiException ex) {
logger.error("MagickException: " + ex + ": " + ex.getReason() + ", " + ex.getDescription());
} catch(MagickException ex) {
logger.error("MagickException: " + ex);
}
}
}
注意,需要将编译JMagick生成的lib/jmagick.jar包,复制到$TOMCATHOME/webapps/yourproject/WEB-INF/lib目录下。
******************************************************************************************************************************
---------------------------------------------------------------------------------------------------------------------------------
MagickImage大家可能都用过,它主要处理一些图片,它可以处理90多种的图片类型.它的功能非常强大,而我们在实际的应用中,主要用到它的缩放,截取,复制功能。其他的一些如写入文字,加背景色,旋转。。。用的少。
第一个常用的功能缩放(scaleImage)。
首先初始化一个ImageInfo对象,就是加载要处理的图片路径.
ImageInfo info= new ImageInfo(“F:\\images\\1.jpg”);
然后再把图片信息ImageInfo作为构造MagickImage的参数传入。 MagickImage 是处理图片的主要类。
MagickImage image= new MagickImage(info);
再对MagickImage的对象选取方法。进行缩放。scaleImage(w, h),第一个参数指按比例缩放后的宽度,第二个就是高度了。
MagickImage cropped= image .scaleImage(40, 80);
最后把处理完的图片命名(1_scale.jpg)存放到指定的目录下(F:/images)。
cropped.setFileName("F:\\images\\1_scale.jpg");
writeImage指定源图片的ImageInfo 对象。
cropped.writeImage(info);
这样就简单的把原来的图片缩放成40X80的1_scale.jpg新图片了。
第二个常用的功能截取(cropImage)。
首先初始化一个ImageInfo对象,就是加载要处理的图片路径.
ImageInfo info= new ImageInfo(“F:\\images\\1.jpg”);
再初始化一个合适的宽度和高度,以及起始坐标。就是要处理后图片的大小形状(矩形)。
Rectangle rect = new Rectangle(0, 0, 40, 80);
x,y就是起始点的坐标,一般从图片的左上角开始,默认为0.w,h就是实际的宽度和高度了,不是按比例截取后的宽度和高度。
这一点与上面的不同。
然后再把图片信息ImageInfo作为构造MagickImage的参数传入。 MagickImage 是处理图片的主要类。
MagickImage image= new MagickImage(info);
再对MagickImage的对象选取方法。进行实际大小的截取。cropImage(rect),参数指图片的范围。
MagickImage cropped = image.cropImage(rect);
最后把处理完的图片命名(1_crop.jpg)存放到指定的目录下(F:/images)。
cropped.setFileName("F:\\images\\1_crop.jpg");
writeImage指定源图片的ImageInfo 对象。
cropped.writeImage(info);
这样就简单的把原来的图片截取成40X80的1_crop.jpg新图片了。原图片的规格一定大于40X80,要不然截取的有空白了。自己试试就知道了。
最后一个常用的功能复制(copy),这个最简单了。
首先初始化一个ImageInfo对象,就是加载要处理的图片路径.
ImageInfo info= new ImageInfo(“F:\\images\\1.jpg”);
然后再把图片信息ImageInfo作为构造MagickImage的参数传入。 MagickImage 是处理图片的主要类。
MagickImage image= new MagickImage(info);
最后把处理完的图片命名(1_copy.jpg)存放到指定的目录下(F:/images)。
image.setFileName("F:\\images\\1_copy.jpg");
writeImage指定源图片的ImageInfo 对象。
image.writeImage(info);
这个没有用到(cloneImage)方法,简单的理解为改变图片的存放路径就可以了,这样就很轻松的实现了copy了,比它自带的cloneImage简单多了。
******************************************************************************************************************************
Posted by Hilton at October 29, 2003 12:13 AM | TrackBack
Comments
然后我把所有的*.dll文件全部COPY到system32目录下,结果,它不报错了,直接把WEB服务器给搞停了。
Posted by: rosen at April 27, 2004 01:42 PM
已经按照各位的方法,但还是不行,报错:无法找到动态链接库CORE_RL_magick_.dll。
Posted by: rosen at April 27, 2004 01:21 PM
Sorry 心急看错了!!!
Posted by: rosen at April 27, 2004 12:32 PM
JMagick包内没有PicResize.java类,而我恰恰需要缩略图功能!
Posted by: rosen at April 27, 2004 12:24 PM
to Hilton
我装了imagemagick6,然后也把jmagick.dll拷到system32下,但是为什么运行时还是报错啊。报错:无法定位程序输入点DestroyMagickInfo于动态链接库CORE_RL_magick_.dll上
Posted by: heyq at April 21, 2004 02:40 PM
today is my birthday
Posted by: t-shirts-man at April 6, 2004 05:20 PM
我明明在windowsXP的 cmd 中 运行 class文件,是可以处理图片的,但是为什么放到 tomcat 里面去运行,就报Internal error() 呢???
而且internal error() 那一大串的东西,我根本看部懂,又不是说找不到 什么其他的类,
啊!! 烦啊!!! 大哥指教一下好吗???
Posted by: Sean CWJ at April 3, 2004 06:42 PM
楼上这位朋友我现在正在看imageJ的东西,但一下子没有搞好,想得到你的帮助呀!
联系一下!QQ 4414155
Posted by: david at March 23, 2004 11:07 AM
先装ImageMagick.
Posted by: Hilton at February 18, 2004 01:19 PM
我在LINUX下安装他出现Unable to find ImageMagick header files
这是怎么回事?然后跳出安装。我是在他主页上下载了安装的。试了两个版本都如此。
Posted by: huifei at February 18, 2004 01:15 PM
To Hilton :
谢谢你的帮助。
BTW,与初用者分享一点:win环境下,只下载jmagick.jar和jmagick.dll是不够的,还需要下载其他的dll一起使用才可以,给大家一个链接http://www.infomall.cn /cgi-bin/mallgate/20040514/http://www.yeo.id.au/jmagick/quickload/win- 5.5.7/ImageMagick-5.5.7-Q8-windows-dll.exe,安装后记得要重新启动pc。我听从下面前辈的也将 jmagick.dll放在了system32目录下面了。
Posted by: ryan at January 13, 2004 10:56 AM
To ryan;
在$JAMGICKHOME/src/test目录下。我把它打了个包,你也可以从 http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/archives/docs/test.tar.gz 下载。
Posted by: Hilton at January 12, 2004 11:52 AM
你们说的Test.java在哪儿?
Posted by: ryan at January 12, 2004 11:44 AM
//…………………………………………………………
我在JmagicK的主页上找不到JmagicK实现的API的有关文档,所以还是不知道具体怎么用JmagicK,请问版主那里有文档吗?或者有其他助于学JmagicK的好东东。
Posted by: zhm at December 12, 2003 08:39 AM
//…………………………………………………………
zhm,你可以去下载http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.yeo.id.au/jmagick/quickload/JMagick-5.5.1-bin-win32.zip
这个包,里面包括了doc。
Posted by: at January 12, 2004 11:39 AM
about java.lang.UnsatisfiedLinkError: no JMagick in java.library.path.
copy libJMagick.so $resin_home/lib
Posted by: 汤汤 at January 2, 2004 12:14 PM
imagesj
应用
Posted by: QQ吧精彩 at December 30, 2003 01:12 PM
老板又要我研究用JMagicK做动画,又要研究了。。。。。
Posted by: zhm at December 24, 2003 06:48 PM
To zhm;
祝贺你安装jmagick成功!
去http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.dependencywalker.com/ 下载这个程序,安装运行它,然后利用其"open"功能打开要看的程序就可以了。
Hilton
Posted by: Hilton at December 19, 2003 01:32 PM
问一下版主,怎么用depends看一个dll依赖于哪些文件?谢谢。
Posted by: zhm at December 19, 2003 10:22 AM
呵呵,我的也是在Windows下运行的,折腾了一个星期,总算成功了,要把那个jmagick.dll考到系统的System32目录下面,然后下载一个ImageMagick-5.5.7-Q16-windows-dll.exe安装了,一切都OK了。
Posted by: zhm at December 19, 2003 10:21 AM
呵呵,我的也是在Windows下运行的,折腾了一个星期,总算成功了,要把那个jmagick.dll考到系统的System32目录下面,然后下载一个ImageMagick-5.5.7-Q16-windows-dll.exe安装了,一切都OK了。
Posted by: zhm at December 19, 2003 10:21 AM
是不是需要装imagemagick?
你用depends看看,这个dll依赖于哪些文件?
真不好意思,我用jmagick是在linux下的,所以对windows下的东东不是很熟悉。
Hilton
Posted by: Hilton at December 13, 2003 09:39 PM
我把jmagick.dll和jmagick.jar都放到system32下但出现 java.lang.UnsatisfiedLinkError: C:\WINDOWS\system32\JMagick.dll: Can't find dependent libraries。我是在IDEA开发中调用的,总是不成功,为什么jmagick还要有dll?不象其他java的工具包?
Posted by: at December 13, 2003 11:59 AM
To zhm,
JMagick的文档确实很少,你可以参考http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.yeo.id.au/cgi-bin/jmagick/fom 。或去ImageMagick的主页看一下,因为jmagick仅是对imagemagick的一个java包装。
另外,这个包中的Test.java,把几乎所有的功能都演示了一下,也可以看看。
Hilton
Posted by: Hilton at December 12, 2003 08:45 AM
我在JmagicK的主页上找不到JmagicK实现的API的有关文档,所以还是不知道具体怎么用JmagicK,请问版主那里有文档吗?或者有其他助于学JmagicK的好东东。
Posted by: zhm at December 12, 2003 08:39 AM
放在运行程序时的当前目录,或者放到windows的system32目录下试试。
Posted by: Hilton at December 11, 2003 10:00 PM
请问我在运行是出现java.lang.UnsatisfiedLinkError: no JMagick in java.library.path错误。jmagick.dll应该怎么用?
Posted by: at December 11, 2003 06:11 PM
你好,我最近也在看基于JAVA的图像处理:
你看看这个如何:ImageJ
http://www.infomall.cn/cgi-bin/mallgate/20040514/http://rsb.info.nih.gov/ij/
我想利用这个包将图片动态生成各种幅面的缩略图(包含站点水印)。然后图片可以通过PATH_INFO解析参数,比如生成一个200*150的水印:
http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.chedong.com/thumb/200/150/orig.jpg
相关推荐
《使用ImageMagick通过phpthumb生成缩略图详解》 在网页开发中,生成缩略图是一项常见的需求,尤其在处理用户上传的图片或者构建图片展示平台时。PHP作为常用的服务器端脚本语言,有着丰富的图像处理库。本文将重点...
在使用JMagick进行图片处理时,例如生成缩略图,可以按照以下Java代码进行操作: ```java System.setProperty("jmagick.systemclassloader", "no"); // 创建ImageInfo对象,用于存储图片信息 ImageInfo info = new...
4. **性能**:虽然通过JNI调用C/C++代码会有一定的性能损失,但JMagick允许Java应用利用ImageMagick的高性能图像处理能力。 5. **应用范围**:JMagick常用于Web服务器上的动态图像生成、图像处理服务或需要在Java...
Jmagick包中的Changelog.txt中有ImageMagick与JMagick版本对应的关系的说明 ) 安装说明: ================================== cd /usr/bin/ rm java rm javac ln -s /usr/java/jdk6/bin/java java ln -s /usr/java/...
例如,一个Web应用可能使用Jmagick来动态生成缩略图,或者在上传图片时进行预处理,以确保符合规定的尺寸和格式。 总的来说,Jmagick提供了一种灵活且强大的方式,让Java开发者能够充分利用ImageMagick的图像处理...
Java 图片处理解决方案中,ImageMagick 是一个免费的创建、编辑、合成图片的软件,可以实现图片切割、颜色替换、图片缩略图、图片水印等各种效果。ImageMagick 是免费开源软件,支持大多数操作系统,包括 Linux、...
**压缩包子文件的文件名称列表** 中,"ImageMagick 详细安装使用 linux (jmagick)_java.mht"可能是一个包含如何在Linux系统上安装和使用JavaMagick的教程文件,.mht是MHTML(多用途互联网邮件扩展)文件,通常用来...
网页缩略图生成技术是一种常见的Web开发功能,它允许用户通过输入网址、设定目标宽度和高度,快速获取网站页面的预览图片。这种技术在许多应用场景中非常实用,例如社交媒体分享、搜索引擎结果展示、网站目录索引等...
JMagick通过提供便捷的API调用来实现这一目标,使得开发人员能够快速地对大量图片进行缩放处理,生成一致的、高质量的缩略图。 使用JMagick进行缩图生成的步骤通常包括以下几个方面: 1. **初始化JMagick**:首先...
在使用JMagick之前,通常需要先安装ImageMagick库,如提供的`ImageMagick-6.4.6-4-Q16-windows-dll.exe`文件,这是一个跨平台的图像处理工具,包含了许多底层的图像操作功能。安装完成后,可以将JMagick(如`jmagick...
在64位Linux环境下安装ImageMagick,特别是与JMagick配合使用,是一个涉及多个步骤的过程,主要目的是为了实现Java应用程序对ImageMagick图像处理功能的调用。以下是详细的安装步骤和相关知识点: 1. **卸载旧版本*...
使用 phantomjs 和 im4java 生成网页缩略图,切图用的是ImageMagick,附送im4java调用ImageMagick处理图片代码,包括剪切、调整大小、调整到指定比例大小不足部分补白边。包含 phantomjs 包,不包含ImageMagick。
安装完成后,你可以使用ImageMagick的`convert`命令来转换图像或生成缩略图。 二、Imagick (PHP扩展) Imagick是PHP的一个扩展,它提供了对ImageMagick库的接口,允许你在PHP代码中直接处理图像。安装Imagick的步骤...
通过 JMagick,Java 开发者可以利用 C++ 编写的 ImageMagick 库的强大功能,无需直接编写原生代码或使用 JNI(Java Native Interface)。 **JMagick 的安装与配置** 在使用 JMagick 之前,需要先确保已经正确安装...
近期用到在服务器上对图片进行缩略图操作,增加水印的功能。在网上找了N多个ImageMagick与相关的Jmaigck,结果CSDN上面其他下载的配合起来总是会有问题,要么JVM崩溃,要么找不到DLL文件。自己去官网问了很久,才...
这个系统既解决了大数据量文件的存储问题,又能快速响应用户对缩略图的需求,是互联网应用中常见的图片服务解决方案。在具体实施过程中,需要根据业务需求调整配置参数,优化性能,确保系统的稳定运行。
本文将详细介绍三种显示DWG文件缩略图的方法,并重点阐述第三种方法——一种无需依赖任何第三方控件、适用于任何编程语言的高效解决方案。 #### 一、利用第三方软件插件预览 最简单直接的方式之一是通过安装第三方...
JMagick是一款强大的Java接口,它允许Java应用程序与ImageMagick图像处理库进行交互,从而实现丰富的图像操作功能。本文将详细介绍如何在Java环境中安装和配置JMagick,以及如何使用提供的示例进行测试。 ### 1. ...
使用ImageMagick进行缩略图生成可以得到更好的质量和更丰富的功能。ImageMagick库可以通过命令行接口或者PHP的Imagick扩展来调用。 "php 缩略图生成类"应该包含以下核心功能: 1. **按比例缩小/放大**:这是最基本...
jspSmartUpload.jar很可能是一个用于文件上传的库,如SmartUpload,这是一个Java组件,提供了一套完整的文件上传解决方案,包括上传进度显示、文件大小限制、多文件上传等功能。开发者可以将其集成到JSP页面中,通过...