﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-void-随笔分类-Jmagick</title><link>http://www.blogjava.net/void241/category/33139.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 11 Jul 2011 21:23:43 GMT</lastBuildDate><pubDate>Mon, 11 Jul 2011 21:23:43 GMT</pubDate><ttl>60</ttl><item><title>MagickImage的功能缩放、功能截取、复制</title><link>http://www.blogjava.net/void241/archive/2011/07/10/354033.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Sun, 10 Jul 2011 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2011/07/10/354033.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/354033.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2011/07/10/354033.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/354033.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/354033.html</trackback:ping><description><![CDATA[<div>MagickImage大家可能都用过,它主要处理一些图片,它可以处理90多种的图片类型.它的功能非常强大,而我们在实际的应用中,主要用到它的缩放，截取，复制功能。其他的一些如写入文字，加背景色，旋转。。。用的少。<br /><br /><br /><br /><br />第一个常用的功能缩放（scaleImage）。<br /><br />首先初始化一个ImageInfo对象,就是加载要处理的图片路径.<br />ImageInfo info= new ImageInfo(&#8220;F:\\images\\1.jpg&#8221;);<br />然后再把图片信息ImageInfo作为构造MagickImage的参数传入。 MagickImage 是处理图片的主要类。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />MagickImage image= new MagickImage(info);<br />再对MagickImage的对象选取方法。进行缩放。scaleImage(w, h),第一个参数指按比例缩放后的宽度，第二个就是高度了。<br />MagickImage cropped= image .scaleImage(40, 80);<br />最后把处理完的图片命名(1_scale.jpg)存放到指定的目录下(F:/images)。<br />cropped.setFileName("F:\\images\\1_scale.jpg");<br />writeImage指定源图片的ImageInfo 对象。<br />cropped.writeImage(info);<br /><br />这样就简单的把原来的图片缩放成40X80的1_scale.jpg新图片了。<br /><br /><br /><br /><br />第二个常用的功能截取（cropImage）。<br /><br />首先初始化一个ImageInfo对象,就是加载要处理的图片路径.<br />ImageInfo info= new ImageInfo(&#8220;F:\\images\\1.jpg&#8221;);<br />再初始化一个合适的宽度和高度，以及起始坐标。就是要处理后图片的大小形状(矩形)。<br />Rectangle rect = new Rectangle(0, 0, 40, 80);<br />x,y就是起始点的坐标，一般从图片的左上角开始，默认为0.w,h就是实际的宽度和高度了，不是按比例截取后的宽度和高度。<br />这一点与上面的不同。<br />然后再把图片信息ImageInfo作为构造MagickImage的参数传入。 MagickImage 是处理图片的主要类。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />MagickImage image= new MagickImage(info);<br />再对MagickImage的对象选取方法。进行实际大小的截取。cropImage(rect),参数指图片的范围。<br />MagickImage cropped = image.cropImage(rect);<br />最后把处理完的图片命名(1_crop.jpg)存放到指定的目录下(F:/images)。<br />cropped.setFileName("F:\\images\\1_crop.jpg");<br />writeImage指定源图片的ImageInfo 对象。<br />cropped.writeImage(info);<br /><br />这样就简单的把原来的图片截取成40X80的1_crop.jpg新图片了。原图片的规格一定大于40X80，要不然截取的有空白了。自己试试就知道了。<br /><br /><br /><br /><br />最后一个常用的功能复制（copy），这个最简单了。<br /><br />首先初始化一个ImageInfo对象,就是加载要处理的图片路径.<br />ImageInfo info= new ImageInfo(&#8220;F:\\images\\1.jpg&#8221;);<br /><br />然后再把图片信息ImageInfo作为构造MagickImage的参数传入。 MagickImage 是处理图片的主要类。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />MagickImage image= new MagickImage(info);<br /><br />最后把处理完的图片命名(1_copy.jpg)存放到指定的目录下(F:/images)。<br />image.setFileName("F:\\images\\1_copy.jpg");<br />writeImage指定源图片的ImageInfo 对象。<br />image.writeImage(info);<br />这个没有用到(cloneImage)方法，简单的理解为改变图片的存放路径就可以了，这样就很轻松的实现了copy了，比它自带的cloneImage简单多了。<br /></div><img src ="http://www.blogjava.net/void241/aggbug/354033.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2011-07-10 10:57 <a href="http://www.blogjava.net/void241/archive/2011/07/10/354033.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ImageMagick &amp; JMagick的使用</title><link>http://www.blogjava.net/void241/archive/2011/07/10/354032.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Sun, 10 Jul 2011 02:53:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2011/07/10/354032.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/354032.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2011/07/10/354032.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/354032.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/354032.html</trackback:ping><description><![CDATA[<div><p>Pure java的图片操作，不依赖操作系统的功能，图片运算量比较大，如果批处理图片或图片size较大的话（如1M左右的图片）的话，性能肯定不能满足；用JNI(java本地调用)，依赖操作系统提供的功能， 操作批量、大图片，就成为首选方案。<br /> <br /> 我在winxp环境下安装调试JMagick，并成功运行了测试code，实现了图片的多种操作，缩略图、旋转、设置边框、设置背景等等...,下面记录安装及配置历史，分享给大家：<br /> ImageMagick, JMagick安装、配置及使用：<br /> 平台：winXP <br /> <strong>1.</strong> 安装ImageMagick（ImageMagick website:http://www.imagemagick.org/script/index.php）<br /> &nbsp;&nbsp;&nbsp; 下载并安装ImageMagick。file name: ImageMagick-6.2.6-8-Q16-windows-dll.exe<br /> &nbsp;&nbsp;&nbsp;&nbsp; download address: <a href="http://prdownloads.sourceforge.net/imagemagick/ImageMagick-6.2.6-8-Q16-windows-dll.exe?download">http://prdownloads.sourceforge.net/imagemagick/ImageMagick-6.2.6-8-Q16-windows-dll.exe?download</a><br /> &nbsp;&nbsp;&nbsp; 安装成功后，</p> <p>把install path加入系统path(有些版本自己会默认添加)，以便能调用dll.保险起见，</p> <p>然后再把安装目录下的所有dll文件复制到C:\WINDOWS\system32下（因为我出现过只添加路径而不复制这些文件到C:\WINDOWS\system32，程序运行提示出错的情况）</p> <p><strong>2.</strong> 安装JMagick（JMagick website: <a href="http://www.yeo.id.au/jmagick/">http://www.yeo.id.au/jmagick/</a>）<br /> &nbsp;&nbsp;&nbsp; 下载JMatick。file name: jmagick-6.2.6-win.zip <br /> &nbsp;&nbsp;&nbsp; download address: <a href="http://www.yeo.id.au/jmagick/quickload/win-6.2.6/jmagick-6.2.6-win.zip">http://www.yeo.id.au/jmagick/quickload/win-6.2.6/jmagick-6.2.6-win.zip</a><br /> &nbsp;&nbsp;&nbsp; 解压后</p> <p>把jmagick-6.2.6-win\q16\jmagick.dll copy 到c:\windows\system32目录下，如果程序在运行的时候提示：找不到jmagick路径，用System.out.println(System.getProperty("java.library.path")). 打印出当前环境的路径，然后再把jmagick.dll 复制到其中的一个路径文件夹中</p> <p>&nbsp;</p> <p><strong>notes：</strong> If you are using Tomcat, or other java applications which have their own classloaders，</p> <p>方法1： 把jmagick-6.2.6-win\jar\jmagick.jar copy到项目的WEB-INF\lib目录下，然后在服务启动初始化的时候，<strong>System.setProperty("jmagick.systemclassloader","no");</strong>&nbsp;&nbsp; （可以在过滤器的那个类里面加上这句话，也可以自己手动建立一个初始化的serverlet，然后加上这句话）</p> <p>方法2：简单的方法，把jmagick-6.2.6-win\jar\jmagick.jar 复制到%JAVA_HOME%\jre\lib\ext.就ok了</p> <p>&nbsp;</p> <p>下面总结下windows + tomcat环境的安装配置</p> <p>1：下载安装ImageMagick-6.3.4-10-Q16-windows-dll.exe</p> <p>2：把install path加入系统path，然后把install path下的dll文件复制到C:\WINDOWS\system32</p> <p>3：下载JMatick。file name:jmagick-6.2.6-win-im-6.2.9.zip</p> <p>4：把q16目录下的jmagick.dll复制到D:\Tomcat5.0\bin下（D:\tomcat是安装路径）</p> <p>5：把jar_15目录下的jmagick.jar复制到%JAVA_HOME%\jre\lib\ext.</p> <p>6：完毕，测试</p> <p>&nbsp;</p> <p>PS:</p> <p>web应用如果部署到tomcat下，那么最好在catalina.bat文件中改变如下设置<br /> <br /> 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"<br /> <br /> 避免heap溢出的问题，参数看你自己的机器而定。（ -Xms256M -Xmx768M -XX:MaxPermSize=128M ）</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>下面把jmagick-6.2.6-win-im-6.2.9目录下的说明文档附在这里，注意看他的Getting Started和Notes部分</p> <p>This archive contains jmagick.dll 6.2.6 compiled against <br /> ImageMagick 6.2.9.</p> <p>q8 contains jmagick.dll compiled against ImageMagick 6.2.9-Q8<br /> <a href="http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q8-windows-dll.exe">http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q8-windows-dll.exe</a></p> <p>q16 contains jmagick.dll compiled against ImageMagick 6.2.9-Q16<br /> <a href="http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q16-windows-dll.exe">http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q16-windows-dll.exe</a></p> <p>It was built with gcc mingw 3.4.2 on Windows 2000 and Sun JDK 1.5.0 release 5.</p> <p><br /> Getting Started:</p> <p>1. Install ImageMagick<br /> 2. Copy the jmagick.dll corresponding with the Q8 or Q16 ImageMagick you installed to <br /> &nbsp;&nbsp;&nbsp; somewhere in your PATH. I would put it in the same directory as ImageMagick.<br /> 3. Put jmagick.jar in your java classpath. If you are using Tomcat, or other java<br /> &nbsp;&nbsp;&nbsp; applications which have their own classloaders, move the jar up to a more global scope.<br /> &nbsp;&nbsp;&nbsp; If you had placed the jar in WEB-INF/lib and reload the webapp, java will attempt to <br /> &nbsp;&nbsp;&nbsp; reload jmagick.dll twice, and it will fail. By moving the jar up, the library will only<br /> &nbsp;&nbsp;&nbsp; be loaded once per jvm lifetime. I place mine in %JAVA_HOME%\jre\lib\ext.</p> <p>Notes:<br /> -------------------------------------------------------------------------------------------------<br /> If you see exceptions such as UnsatisfiedLinkError, you did one of the above steps incorrectly<br /> or you are not using the JVM/ImageMagick versions you think you are. Have your java code<br /> print out the java.library.path -- System.getProperty("java.library.path"). Check to ensure<br /> that jmagick.dll is in one of those directories.<br /> -------------------------------------------------------------------------------------------------<br /> If you run your java application as a service, any changes to the PATH environment variable will<br /> not be visible to java until you reboot.<br /> -------------------------------------------------------------------------------------------------<br /> This is the first time I have built jmagick.dll using gcc/mingw. Let me know if you have any issues.</p> <p>Mark Deneen<br /> mdeneen at gmail dot com</p> <p>&nbsp;</p> <p>&nbsp;</p><div>-------------------------------------------------------------------------------------------------<br /><br /><br /><br /><br /></div><p>例子:</p><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;*&nbsp;以正方形比例输出缩放图片<br />&nbsp;*<br />&nbsp;*&nbsp;MaxBorderLen&nbsp;:&nbsp;正方形边长<br /></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;CoutImage4Square(String&nbsp;srcImage,&nbsp;String&nbsp;DestImage,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;MaxBorderLen){<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;System.setProperty(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jmagick.systemclassloader</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">no</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">{&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageInfo&nbsp;info&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ImageInfo(srcImage);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MagickImage&nbsp;image&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;MagickImage(info);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">取长宽</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dimension&nbsp;dim&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;image.getDimension();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;wImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dim.getWidth();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;hImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dim.getHeight();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Boolean&nbsp;bWBig&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;wImage&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;hImage</span><span style="color: #000000; ">?</span>&nbsp;<span style="color: #0000FF; ">true</span><span style="color: #000000; ">:</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(bWBig)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="color: #008000; ">//</span><span style="color: #008000; ">长大过高</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;MaxBorderLen&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(&nbsp;hImage&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;wImage);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;MaxBorderLen;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="color: #008000; ">//</span><span style="color: #008000; ">反之</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;MaxBorderLen&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(&nbsp;wImage&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;hImage);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;MaxBorderLen;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">输出</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MagickImage&nbsp;scaled&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;image.scaleImage((</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">)wImage,&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">)hImage);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaled.setFileName(DestImage);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaled.writeImage(info);&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(MagickApiException&nbsp;ex){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(MagickException&nbsp;ex){<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div><p>&nbsp;</p> <p>&nbsp;</p></div><img src ="http://www.blogjava.net/void241/aggbug/354032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2011-07-10 10:53 <a href="http://www.blogjava.net/void241/archive/2011/07/10/354032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMagick</title><link>http://www.blogjava.net/void241/archive/2011/07/10/354031.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Sun, 10 Jul 2011 02:51:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2011/07/10/354031.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/354031.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2011/07/10/354031.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/354031.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/354031.html</trackback:ping><description><![CDATA[<div><a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.yeo.nu/jmagick/">JMagick</a>是一个开源API，利用JNI(Java Native Interface)技术实现了对<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.imagemagick.org/">ImageMagick</a>API的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。JMagick只实现了ImageMagicAPI的一部分功能，它的发行遵循<a>LGPL协议</a>。<br /> ImageMagick请参考其<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.imagemagick.org/">官方网站</a>或<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/archives/000339.html">ImageMagick学习</a>。 <a name="more"></a> <p>&nbsp;</p> <h4>下载安装</h4> <p>　　安装要求：</p> <ol><li>如果通过CVS下载的源码，则需要GNU Autoconf     </li><li>GNU Make 3.77或更新版本(我用的是3.7.9).     </li><li>一个ANSI C 编译器，建议用 GNU 或 EGCS 的编译器     </li><li>ImageMagick 5.5.6或更新版本     </li><li>Java2 JDK( JMagick是在 Sun JDK 1.4.1上开发，但运行好象不用那么高，我用的是1.3.1) </li></ol> <p><br /> 下载过程如下：<br /> 用CVS取源码：</p> <div>cvs -d :pserver:anonymous@jmagick.yeo.nu:/var/cvs/jmagick login<br /> Password: jmagick<br /> cvs -d :pserver:anonymous@jmagick.yeo.nu:/var/cvs/jmagick checkout Jmagick</div> <p><br /> 也可以直接下载JMagick-5.5.6-X.tar.gz包。<br /> 根据INSTALL文档指示，编译如下：</p> <div>对下载包：<br /> tar zxvf Jmagick-5.5.6-X.tar.gz<br /> cd Jmagick-5.5.6-X<br /> 对CVS取回来的源码<br /> cd JMagick<br /> autoconf<br /> 以下为两种情况都相同的部分<br /> ./configure<br /> make all<br /> su<br /> make install<br /> make javadoc<br /> make test &lt;--如果x-win没有启动，大部分测试是成功的，但也会显示一些错误信息，因为没法显示图片。</div> <p>&nbsp;</p> <h4>通过JMagick,实现JSP上传图片文件后生成缩略图的功能</h4> <p><br /> 　　Jmagick自身带的Test.java程序，演示了如何使用JMagick来实现图片的复制、信息获取、斜角、特效、组合、改变大小、加边框、旋转、切片、改变格式、去色等等功能，编程的重要参考。<br /> 　　下面主要描述如何实现将用JSP上传的图片，进行压缩生成缩略图。用jsp上传文件的全部代码，参见<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/archives/000192.html">利用apache-commons-fileupload写jsp上传文件</a>,下面只描述图片压缩的实现。</p> <div><br /> <br /> <br /> <br /> </div> <p><br /> $TOMCATHOME/webapps/yourproject/WEB-INF/classes/com/hedong/JMagick/PicResize.java</p> <div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.hedong.JMagick;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.log4j.</span><span style="color: #000000; ">*</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.Dimension;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.Rectangle;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.ImageInfo;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.MagickImage;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.MagickException;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.QuantizeInfo;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.ColorspaceType;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.MagickApiException;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.PixelPacket;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.DrawInfo;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.ResolutionType;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.ProfileInfo;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.MontageInfo;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.Magick;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.MagickInfo;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.IOException;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.FileOutputStream;<br /></span><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;PicResize&nbsp;{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;Logger&nbsp;logger&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Logger.getLogger(PicResize.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">.getName());<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;resize(String&nbsp;picFrom,String&nbsp;picTo)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Resize</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageInfo&nbsp;info&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ImageInfo(picFrom);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MagickImage&nbsp;image&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;MagickImage(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ImageInfo(picFrom));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MagickImage&nbsp;scaled&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;image.scaleImage(</span><span style="color: #000000; ">100</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">80</span><span style="color: #000000; ">);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">小图片文件的大小.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaled.setFileName(picTo);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaled.writeImage(info);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">alter&nbsp;pic&nbsp;form&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">picFrom&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;to&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">picTo);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(MagickApiException&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">MagickException:&nbsp;</span><span style="color: #000000; ">"</span>&nbsp;<span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;ex&nbsp;</span><span style="color: #000000; ">+</span>&nbsp;<span style="color: #000000; ">"</span><span style="color: #000000; ">:&nbsp;</span><span style="color: #000000; ">"</span>&nbsp;<span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;ex.getReason()&nbsp;</span><span style="color: #000000; ">+</span>&nbsp;<span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span>&nbsp;<span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;ex.getDescription());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(MagickException&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">MagickException:&nbsp;</span><span style="color: #000000; ">"</span>&nbsp;<span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;ex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />}</span></div></div> <p><br /> 注意，需要将编译JMagick生成的lib/jmagick.jar包，复制到$TOMCATHOME/webapps/yourproject/WEB-INF/lib目录下。</p></div><img src ="http://www.blogjava.net/void241/aggbug/354031.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2011-07-10 10:51 <a href="http://www.blogjava.net/void241/archive/2011/07/10/354031.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMagick示例</title><link>http://www.blogjava.net/void241/archive/2008/07/19/216000.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Sat, 19 Jul 2008 04:15:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2008/07/19/216000.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/216000.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2008/07/19/216000.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/216000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/216000.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JMagickTest.java 实现图片的各种操作示例,如旋转,加边框，设置背景，提升质量，加盖文字说明等等... Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->package&nbsp;images;import&nbsp;java.awt....&nbsp;&nbsp;<a href='http://www.blogjava.net/void241/archive/2008/07/19/216000.html'>阅读全文</a><img src ="http://www.blogjava.net/void241/aggbug/216000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2008-07-19 12:15 <a href="http://www.blogjava.net/void241/archive/2008/07/19/216000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ImageMagick &amp; JMagick的使用(高品质高效率缩略图的解决方案, 4 Windows &amp; Linux)</title><link>http://www.blogjava.net/void241/archive/2008/07/19/215990.html</link><dc:creator>void</dc:creator><author>void</author><pubDate>Sat, 19 Jul 2008 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/void241/archive/2008/07/19/215990.html</guid><wfw:comment>http://www.blogjava.net/void241/comments/215990.html</wfw:comment><comments>http://www.blogjava.net/void241/archive/2008/07/19/215990.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/void241/comments/commentRss/215990.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/void241/services/trackbacks/215990.html</trackback:ping><description><![CDATA[<p>Pure java的图片操作，不依赖操作系统的功能，图片运算量比较大，如果批处理图片或图片size较大的话（如1M左右的图片）的话，性能肯定不能满足；用JNI(java本地调用)，依赖操作系统提供的功能， 操作批量、大图片，就成为首选方案。<br />
<br />
我在winxp环境下安装调试JMagick，并成功运行了测试code，实现了图片的多种操作，缩略图、旋转、设置边框、设置背景等等...,下面记录安装及配置历史，分享给大家：<br />
ImageMagick, JMagick安装、配置及使用：<br />
平台：winXP <br />
<strong>1.</strong> 安装ImageMagick（ImageMagick website:http://www.imagemagick.org/script/index.php）<br />
&nbsp;&nbsp;&nbsp; 下载并安装ImageMagick。file name: ImageMagick-6.2.6-8-Q16-windows-dll.exe<br />
&nbsp;&nbsp;&nbsp;&nbsp; download address: <a href="http://prdownloads.sourceforge.net/imagemagick/ImageMagick-6.2.6-8-Q16-windows-dll.exe?download">http://prdownloads.sourceforge.net/imagemagick/ImageMagick-6.2.6-8-Q16-windows-dll.exe?download</a><br />
&nbsp;&nbsp;&nbsp; 安装成功后，</p>
<p>把install path加入系统path(有些版本自己会默认添加)，以便能调用dll.保险起见，</p>
<p>然后再把安装目录下的所有dll文件复制到C:\WINDOWS\system32下（因为我出现过只添加路径而不复制这些文件到C:\WINDOWS\system32，程序运行提示出错的情况）</p>
<p><strong>2.</strong> 安装JMagick（JMagick website: <a href="http://www.yeo.id.au/jmagick/">http://www.yeo.id.au/jmagick/</a>）<br />
&nbsp;&nbsp;&nbsp; 下载JMatick。file name: jmagick-6.2.6-win.zip <br />
&nbsp;&nbsp;&nbsp; download address: <a href="http://www.yeo.id.au/jmagick/quickload/win-6.2.6/jmagick-6.2.6-win.zip">http://www.yeo.id.au/jmagick/quickload/win-6.2.6/jmagick-6.2.6-win.zip</a><br />
&nbsp;&nbsp;&nbsp; 解压后</p>
<p>把jmagick-6.2.6-win\q16\jmagick.dll copy 到c:\windows\system32目录下，如果程序在运行的时候提示：找不到jmagick路径，用<font color="#ff0000">System.out.println(System.getProperty("java.library.path")).</font> 打印出当前环境的路径，然后再把jmagick.dll 复制到其中的一个路径文件夹中</p>
<p>&nbsp;</p>
<p><strong>notes：</strong> If you are using Tomcat, or other java applications which have their own classloaders，</p>
<p>方法1： 把jmagick-6.2.6-win\jar\jmagick.jar copy到项目的WEB-INF\lib目录下，然后在服务启动初始化的时候，<strong><font color="#ff0000">System.setProperty("jmagick.systemclassloader","no");</font></strong>&nbsp;&nbsp; （可以在过滤器的那个类里面加上这句话，也可以自己手动建立一个初始化的serverlet，然后加上这句话）</p>
<p>方法2：简单的方法，把jmagick-6.2.6-win\jar\jmagick.jar 复制到%JAVA_HOME%\jre\lib\ext.就ok了</p>
<p>&nbsp;</p>
<p>下面总结下windows + tomcat环境的安装配置</p>
<p>1：下载安装ImageMagick-6.3.4-10-Q16-windows-dll.exe</p>
<p>2：把install path加入系统path，然后把install path下的dll文件复制到C:\WINDOWS\system32</p>
<p>3：下载JMatick。file name:jmagick-6.2.6-win-im-6.2.9.zip</p>
<p>4：把q16目录下的jmagick.dll复制到D:\Tomcat5.0\bin下（D:\tomcat是安装路径）</p>
<p>5：把jar_15目录下的jmagick.jar复制到%JAVA_HOME%\jre\lib\ext.</p>
<p>6：完毕，测试</p>
<p>&nbsp;</p>
<p>PS:</p>
<p>web应用如果部署到tomcat下，那么最好在catalina.bat文件中改变如下设置<br />
<br />
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"<br />
<br />
避免heap溢出的问题，参数看你自己的机器而定。（ -Xms256M -Xmx768M -XX:MaxPermSize=128M ）</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>下面把jmagick-6.2.6-win-im-6.2.9目录下的说明文档附在这里，注意看他的Getting Started和Notes部分</p>
<p>This archive contains jmagick.dll 6.2.6 compiled against <br />
ImageMagick 6.2.9.</p>
<p>q8 contains jmagick.dll compiled against ImageMagick 6.2.9-Q8<br />
<a href="http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q8-windows-dll.exe">http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q8-windows-dll.exe</a></p>
<p>q16 contains jmagick.dll compiled against ImageMagick 6.2.9-Q16<br />
<a href="http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q16-windows-dll.exe">http://www.imagemagick.org/download/binaries/ImageMagick-6.2.9-4-Q16-windows-dll.exe</a></p>
<p>It was built with gcc mingw 3.4.2 on Windows 2000 and Sun JDK 1.5.0 release 5.</p>
<p><br />
Getting Started:</p>
<p><font color="#0000ff">1. Install ImageMagick<br />
2. Copy the jmagick.dll corresponding with the Q8 or Q16 ImageMagick you installed to <br />
&nbsp;&nbsp;&nbsp; somewhere in your PATH. I would put it in the same directory as ImageMagick.<br />
3. Put jmagick.jar in your java classpath. If you are using Tomcat, or other java<br />
&nbsp;&nbsp;&nbsp; applications which have their own classloaders, move the jar up to a more global scope.<br />
&nbsp;&nbsp;&nbsp; If you had placed the jar in WEB-INF/lib and reload the webapp, java will attempt to <br />
&nbsp;&nbsp;&nbsp; reload jmagick.dll twice, and it will fail. By moving the jar up, the library will only<br />
&nbsp;&nbsp;&nbsp; be loaded once per jvm lifetime. I place mine in %JAVA_HOME%\jre\lib\ext.</font></p>
<p>Notes:<br />
-------------------------------------------------------------------------------------------------<br />
<font color="#0000ff">If you see exceptions such as UnsatisfiedLinkError, you did one of the above steps incorrectly<br />
or you are not using the JVM/ImageMagick versions you think you are. Have your java code<br />
print out the java.library.path -- System.getProperty("java.library.path"). Check to ensure<br />
that jmagick.dll is in one of those directories.</font><br />
-------------------------------------------------------------------------------------------------<br />
<font color="#0000ff">If you run your java application as a service, any changes to the PATH environment variable will<br />
not be visible to java until you reboot.</font><br />
-------------------------------------------------------------------------------------------------<br />
This is the first time I have built jmagick.dll using gcc/mingw. Let me know if you have any issues.</p>
<p>Mark Deneen<br />
mdeneen at gmail dot com</p>
<p>&nbsp;</p>
<p>---------------------------------------------------------------------------------------------------------------------------------</p>
<p>例子:</p><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;*&nbsp;以正方形比例输出缩放图片<br />&nbsp;*<br />&nbsp;*&nbsp;MaxBorderLen&nbsp;:&nbsp;正方形边长<br /></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;CoutImage4Square(String&nbsp;srcImage,&nbsp;String&nbsp;DestImage,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;MaxBorderLen){<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;System.setProperty(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">jmagick.systemclassloader</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">no</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">{&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageInfo&nbsp;info&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ImageInfo(srcImage);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MagickImage&nbsp;image&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;MagickImage(info);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">取长宽</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dimension&nbsp;dim&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;image.getDimension();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;wImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dim.getWidth();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;hImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dim.getHeight();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Boolean&nbsp;bWBig&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;wImage&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;hImage</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">:</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(bWBig)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="color: #008000; ">//</span><span style="color: #008000; ">长大过高</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;MaxBorderLen&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(&nbsp;hImage&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;wImage);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;MaxBorderLen;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="color: #008000; ">//</span><span style="color: #008000; ">反之</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;MaxBorderLen&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(&nbsp;wImage&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;hImage);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hImage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;MaxBorderLen;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">输出</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MagickImage&nbsp;scaled&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;image.scaleImage((</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">)wImage,&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">)hImage);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaled.setFileName(DestImage);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaled.writeImage(info);&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(MagickApiException&nbsp;ex){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(MagickException&nbsp;ex){<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div><p>&nbsp;</p>
<p>&nbsp;</p>
<p>-------------------------------------------------------------------------------------------------------------------------</p>
<p><img alt="jmagicklogo.png" src="http://hedong.3322.org/archives/pics/jmagicklogo.png" align="left" border="0" height="80" width="216" />　　<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.yeo.nu/jmagick/">JMagick</a>是一个开源API，利用JNI(Java Native Interface)技术实现了对<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.imagemagick.org/">ImageMagick</a>API的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。JMagick只实现了ImageMagicAPI的一部分功能，它的发行遵循<a>LGPL协议</a>。<br />
　　ImageMagick请参考其<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.imagemagick.org/">官方网站</a>或<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/archives/000339.html">ImageMagick学习</a>。</p>
<a name="more"></a>
<p>&nbsp;</p>
<h4>下载安装</h4>
<p>　　安装要求：</p>
<ol>
    <li>如果通过CVS下载的源码，则需要GNU Autoconf
    </li><li>GNU Make 3.77或更新版本(我用的是3.7.9).
    </li><li>一个ANSI C 编译器，建议用 GNU 或 EGCS 的编译器
    </li><li>ImageMagick 5.5.6或更新版本
    </li><li>Java2 JDK( JMagick是在 Sun JDK 1.4.1上开发，但运行好象不用那么高，我用的是1.3.1) </li>
</ol>
<p><br />
下载过程如下：<br />
用CVS取源码：</p>
<div class="code">cvs -d :pserver:anonymous@jmagick.yeo.nu:/var/cvs/jmagick login<br />
Password: jmagick<br />
cvs -d :pserver:anonymous@jmagick.yeo.nu:/var/cvs/jmagick checkout Jmagick</div>
<p><br />
也可以直接下载JMagick-5.5.6-X.tar.gz包。<br />
根据INSTALL文档指示，编译如下：</p>
<div class="code">对下载包：<br />
tar zxvf Jmagick-5.5.6-X.tar.gz<br />
cd Jmagick-5.5.6-X<br />
对CVS取回来的源码<br />
cd JMagick<br />
autoconf<br />
以下为两种情况都相同的部分<br />
./configure<br />
make all<br />
su<br />
make install<br />
make javadoc<br />
make test <ins>&lt;--如果x-win没有启动，大部分测试是成功的，但也会显示一些错误信息，因为没法显示图片。</ins></div>
<p>&nbsp;</p>
<h4>通过JMagick,实现JSP上传图片文件后生成缩略图的功能</h4>
<p><br />
　　Jmagick自身带的Test.java程序，演示了如何使用JMagick来实现图片的复制、信息获取、斜角、特效、组合、改变大小、加边框、旋转、切片、改变格式、去色等等功能，编程的重要参考。<br />
　　下面主要描述如何实现将用JSP上传的图片，进行压缩生成缩略图。用jsp上传文件的全部代码，参见<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/archives/000192.html">利用apache-commons-fileupload写jsp上传文件</a>,下面只描述图片压缩的实现。</p>
<div class="code"><br />
<br />
<br />
<br />
<jsp:usebean class="com.hedong.JMagick.PicResize" scope="application"></jsp:usebean></div>
<p><br />
$TOMCATHOME/webapps/yourproject/WEB-INF/classes/com/hedong/JMagick/PicResize.java</p>
<div class="code"><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.hedong.JMagick;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.log4j.</span><span style="color: #000000; ">*</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.Dimension;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.Rectangle;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.ImageInfo;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.MagickImage;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.MagickException;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.QuantizeInfo;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.ColorspaceType;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.MagickApiException;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.PixelPacket;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.DrawInfo;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.ResolutionType;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.ProfileInfo;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.MontageInfo;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.Magick;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;magick.MagickInfo;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.IOException;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.FileOutputStream;<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;PicResize&nbsp;{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;Logger&nbsp;logger&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Logger.getLogger(PicResize.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">.getName());<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;resize(String&nbsp;picFrom,String&nbsp;picTo)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Resize</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImageInfo&nbsp;info&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ImageInfo(picFrom);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MagickImage&nbsp;image&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;MagickImage(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ImageInfo(picFrom));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MagickImage&nbsp;scaled&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;image.scaleImage(</span><span style="color: #000000; ">100</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">80</span><span style="color: #000000; ">);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">小图片文件的大小.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaled.setFileName(picTo);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaled.writeImage(info);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">alter&nbsp;pic&nbsp;form&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">picFrom&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;to&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">picTo);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(MagickApiException&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">MagickException:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;ex&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;ex.getReason()&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;ex.getDescription());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(MagickException&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">MagickException:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;ex);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />}</span></div></div>
<p><br />
注意，需要将编译JMagick生成的lib/jmagick.jar包，复制到$TOMCATHOME/webapps/yourproject/WEB-INF/lib目录下。</p>
<p>&nbsp;</p>
<p><span class="posted">Posted by Hilton at October 29, 2003 12:13 AM | <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/mt/mt-tb.cgi?__mode=view&amp;entry_id=341">TrackBack</a> <br />
</span></p>
<div class="comments-head"><a name="comments"></a>Comments</div>
<div class="comments-body">
<p>然后我把所有的*.dll文件全部COPY到system32目录下，结果，它不报错了，直接把WEB服务器给搞停了。</p>
<span class="comments-post">Posted by: rosen at April 27, 2004 01:42 PM</span></div>
<div class="comments-body">
<p>已经按照各位的方法，但还是不行，报错：无法找到动态链接库CORE_RL_magick_.dll。</p>
<span class="comments-post">Posted by: rosen at April 27, 2004 01:21 PM</span></div>
<div class="comments-body">
<p>Sorry 心急看错了！！！</p>
<span class="comments-post">Posted by: rosen at April 27, 2004 12:32 PM</span></div>
<div class="comments-body">
<p>JMagick包内没有PicResize.java类，而我恰恰需要缩略图功能！</p>
<span class="comments-post">Posted by: rosen at April 27, 2004 12:24 PM</span></div>
<div class="comments-body">
<p>to Hilton<br />
我装了imagemagick6,然后也把jmagick.dll拷到system32下，但是为什么运行时还是报错啊。报错：无法定位程序输入点DestroyMagickInfo于动态链接库CORE_RL_magick_.dll上</p>
<span class="comments-post">Posted by: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#104;&#101;&#121;&#113;&#64;&#115;&#105;&#110;&#111;&#115;&#111;&#102;&#116;&#46;&#99;&#111;&#109;&#46;&#99;&#110;">heyq</a> at April 21, 2004 02:40 PM</span></div>
<div class="comments-body">
<p>today is my birthday :)</p>
<span class="comments-post">Posted by: <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.shirts-t-shirts.com/">t-shirts-man</a> at April 6, 2004 05:20 PM</span></div>
<div class="comments-body">
<p>我明明在windowsXP的 cmd 中 运行 class文件，是可以处理图片的，但是为什么放到 tomcat 里面去运行，就报Internal error() 呢？？？<br />
而且internal error() 那一大串的东西，我根本看部懂，又不是说找不到 什么其他的类， <br />
啊！！ 烦啊！！！ 大哥指教一下好吗？？？</p>
<span class="comments-post">Posted by: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#101;&#120;&#95;&#99;&#104;&#111;&#105;&#51;&#51;&#64;&#104;&#111;&#116;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">Sean CWJ</a> at April 3, 2004 06:42 PM</span></div>
<div class="comments-body">
<p>楼上这位朋友我现在正在看imageJ的东西，但一下子没有搞好，想得到你的帮助呀！<br />
联系一下！QQ 4414155</p>
<span class="comments-post">Posted by: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#119;&#111;&#114;&#108;&#100;&#108;&#105;&#102;&#101;&#95;&#121;&#97;&#110;&#103;&#102;&#97;&#110;&#64;&#104;&#111;&#116;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">david</a> at March 23, 2004 11:07 AM</span></div>
<div class="comments-body">
<p>先装ImageMagick.</p>
<span class="comments-post">Posted by: <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/">Hilton</a> at February 18, 2004 01:19 PM</span></div>
<div class="comments-body">
<p>我在LINUX下安装他出现Unable to find ImageMagick header files <br />
这是怎么回事？然后跳出安装。我是在他主页上下载了安装的。试了两个版本都如此。</p>
<span class="comments-post">Posted by: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#104;&#105;&#122;&#104;&#105;&#64;&#115;&#105;&#110;&#97;&#46;&#99;&#111;&#109;">huifei</a> at February 18, 2004 01:15 PM</span></div>
<div class="comments-body">
<p>To Hilton :</p>
<p>谢谢你的帮助。</p>
<p>BTW，与初用者分享一点：win环境下，只下载jmagick.jar和jmagick.dll是不够的，还需要下载其他的dll一起使用才可以，给大家一个链接<a href="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目录下面了.">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目录下面了。</a></p>
<span class="comments-post">Posted by: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#121;&#97;&#110;&#46;&#108;&#101;&#101;&#64;&#98;&#110;&#115;&#108;&#105;&#110;&#107;&#46;&#99;&#111;&#109;">ryan</a> at January 13, 2004 10:56 AM</span></div>
<div class="comments-body">
<p>To ryan;</p>
<p>　　在$JAMGICKHOME/src/test目录下。我把它打了个包，你也可以从 <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/archives/docs/test.tar.gz">http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/archives/docs/test.tar.gz</a> 下载。</p>
<span class="comments-post">Posted by: <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/">Hilton</a> at January 12, 2004 11:52 AM</span></div>
<div class="comments-body">
<p>你们说的Test.java在哪儿？</p>
<span class="comments-post">Posted by: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#121;&#97;&#110;&#46;&#108;&#101;&#101;&#64;&#98;&#110;&#115;&#108;&#105;&#110;&#107;&#46;&#99;&#111;&#109;">ryan</a> at January 12, 2004 11:44 AM</span></div>
<div class="comments-body">
<p>//&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;<br />
我在JmagicK的主页上找不到JmagicK实现的API的有关文档，所以还是不知道具体怎么用JmagicK，请问版主那里有文档吗？或者有其他助于学JmagicK的好东东。</p>
<p>Posted by: zhm at December 12, 2003 08:39 AM <br />
//&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</p>
<p>zhm，你可以去下载<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.yeo.id.au/jmagick/quickload/JMagick-5.5.1-bin-win32.zip">http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.yeo.id.au/jmagick/quickload/JMagick-5.5.1-bin-win32.zip</a><br />
这个包，里面包括了doc。</p>
<span class="comments-post">Posted by: at January 12, 2004 11:39 AM</span></div>
<div class="comments-body">
<p>about java.lang.UnsatisfiedLinkError: no JMagick in java.library.path.<br />
copy libJMagick.so $resin_home/lib</p>
<span class="comments-post">Posted by: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#106;&#98;&#107;&#99;&#64;&#115;&#105;&#110;&#97;&#46;&#99;&#111;&#109;">汤汤</a> at January 2, 2004 12:14 PM</span></div>
<div class="comments-body">
<p>imagesj<br />
应用</p>
<span class="comments-post">Posted by: <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.qqba.com/">QQ吧精彩</a> at December 30, 2003 01:12 PM</span></div>
<div class="comments-body">
<p>老板又要我研究用JMagicK做动画，又要研究了。。。。。</p>
<span class="comments-post">Posted by: <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.it315.org/">zhm</a> at December 24, 2003 06:48 PM</span></div>
<div class="comments-body">
<p>To zhm;</p>
<p>　　祝贺你安装jmagick成功！</p>
<p>　　去<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.dependencywalker.com/">http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.dependencywalker.com/</a> 下载这个程序，安装运行它，然后利用其"open"功能打开要看的程序就可以了。</p>
<p>Hilton</p>
<span class="comments-post">Posted by: <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/">Hilton</a> at December 19, 2003 01:32 PM</span></div>
<div class="comments-body">
<p>问一下版主，怎么用depends看一个dll依赖于哪些文件？谢谢。</p>
<span class="comments-post">Posted by: <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.it315.org/">zhm</a> at December 19, 2003 10:22 AM</span></div>
<div class="comments-body">
<p>呵呵，我的也是在Windows下运行的，折腾了一个星期，总算成功了，要把那个jmagick.dll考到系统的System32目录下面，然后下载一个ImageMagick-5.5.7-Q16-windows-dll.exe安装了，一切都OK了。</p>
<span class="comments-post">Posted by: <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.it315.org/">zhm</a> at December 19, 2003 10:21 AM</span></div>
<div class="comments-body">
<p>呵呵，我的也是在Windows下运行的，折腾了一个星期，总算成功了，要把那个jmagick.dll考到系统的System32目录下面，然后下载一个ImageMagick-5.5.7-Q16-windows-dll.exe安装了，一切都OK了。</p>
<span class="comments-post">Posted by: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#122;&#104;&#97;&#110;&#103;&#104;&#109;&#64;&#99;&#104;&#105;&#110;&#97;&#98;&#121;&#116;&#101;&#46;&#99;&#111;&#109;">zhm</a> at December 19, 2003 10:21 AM</span></div>
<div class="comments-body">
<p>是不是需要装imagemagick?<br />
你用depends看看，这个dll依赖于哪些文件？</p>
<p>真不好意思，我用jmagick是在linux下的，所以对windows下的东东不是很熟悉。</p>
<p>Hilton</p>
<span class="comments-post">Posted by: <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/">Hilton</a> at December 13, 2003 09:39 PM</span></div>
<div class="comments-body">
<p>我把jmagick.dll和jmagick.jar都放到system32下但出现java.lang.UnsatisfiedLinkError: C:\WINDOWS\system32\JMagick.dll: Can't find dependent libraries。我是在IDEA开发中调用的，总是不成功，为什么jmagick还要有dll？不象其他java的工具包？</p>
<span class="comments-post">Posted by: at December 13, 2003 11:59 AM</span></div>
<div class="comments-body">
<p>To zhm,</p>
<p>JMagick的文档确实很少，你可以参考<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.yeo.id.au/cgi-bin/jmagick/fom">http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.yeo.id.au/cgi-bin/jmagick/fom</a> 。或去ImageMagick的主页看一下，因为jmagick仅是对imagemagick的一个java包装。</p>
<p>　　另外，这个包中的Test.java，把几乎所有的功能都演示了一下，也可以看看。</p>
<p>Hilton</p>
<span class="comments-post">Posted by: <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/">Hilton</a> at December 12, 2003 08:45 AM</span></div>
<div class="comments-body">
<p>我在JmagicK的主页上找不到JmagicK实现的API的有关文档，所以还是不知道具体怎么用JmagicK，请问版主那里有文档吗？或者有其他助于学JmagicK的好东东。</p>
<span class="comments-post">Posted by: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#122;&#104;&#97;&#110;&#103;&#104;&#109;&#64;&#99;&#104;&#105;&#110;&#97;&#98;&#121;&#116;&#101;&#46;&#99;&#111;&#109;">zhm</a> at December 12, 2003 08:39 AM</span></div>
<div class="comments-body">
<p>放在运行程序时的当前目录，或者放到windows的system32目录下试试。</p>
<span class="comments-post">Posted by: <a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/">Hilton</a> at December 11, 2003 10:00 PM</span></div>
<div class="comments-body">
<p>请问我在运行是出现java.lang.UnsatisfiedLinkError: no JMagick in java.library.path错误。jmagick.dll应该怎么用？</p>
<span class="comments-post">Posted by: at December 11, 2003 06:11 PM</span></div>
<div class="comments-body">
<p>你好，我最近也在看基于JAVA的图像处理：<br />
你看看这个如何：ImageJ<br />
<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://rsb.info.nih.gov/ij/">http://www.infomall.cn/cgi-bin/mallgate/20040514/http://rsb.info.nih.gov/ij/</a></p>
<p>我想利用这个包将图片动态生成各种幅面的缩略图（包含站点水印）。然后图片可以通过PATH_INFO解析参数，比如生成一个200*150的水印：<br />
<a href="http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.chedong.com/thumb/200/150/orig.jpg">http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.chedong.com/thumb/200/150/orig.jpg</a></p>
<p>&nbsp;</p>
<p>---------------------------------------------------------------------------------------------------------------------------------</p>
<p>&nbsp;</p>
<p>MagickImage大家可能都用过,它主要处理一些图片,它可以处理90多种的图片类型.它的功能非常强大,而我们在实际的应用中,主要用到它的缩放，截取，复制功能。其他的一些如写入文字，加背景色，旋转。。。用的少。</p>
<p>&nbsp;&nbsp;&nbsp; 第一个常用的功能缩放（scaleImage）。</p>
<p>&nbsp;&nbsp;&nbsp; 首先初始化一个ImageInfo对象,就是加载要处理的图片路径.<br />
&nbsp;&nbsp;&nbsp; ImageInfo info= new ImageInfo(&#8220;F:\\images\\1.jpg&#8221;); <br />
&nbsp;&nbsp;&nbsp; 然后再把图片信息ImageInfo作为构造MagickImage的参数传入。 MagickImage 是处理图片的主要类。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; MagickImage image= new MagickImage(info);<br />
&nbsp;&nbsp;&nbsp; 再对MagickImage的对象选取方法。进行缩放。scaleImage(w, h),第一个参数指按比例缩放后的宽度，第二个就是高度了。<br />
&nbsp;&nbsp;&nbsp; MagickImage cropped= image .scaleImage(40, 80);<br />
&nbsp;&nbsp;&nbsp; 最后把处理完的图片命名(1_scale.jpg)存放到指定的目录下(F:/images)。 <br />
&nbsp;&nbsp;&nbsp; cropped.setFileName("F:\\images\\1_scale.jpg");<br />
&nbsp;&nbsp;&nbsp; writeImage指定源图片的ImageInfo 对象。<br />
&nbsp;&nbsp;&nbsp; cropped.writeImage(info);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 这样就简单的把原来的图片缩放成40X80的1_scale.jpg新图片了。</p>
<p><br />
&nbsp;&nbsp;&nbsp; 第二个常用的功能截取（cropImage）。</p>
<p>&nbsp;&nbsp;&nbsp; 首先初始化一个ImageInfo对象,就是加载要处理的图片路径.<br />
&nbsp;&nbsp;&nbsp; ImageInfo info= new ImageInfo(&#8220;F:\\images\\1.jpg&#8221;); <br />
&nbsp;&nbsp;&nbsp; 再初始化一个合适的宽度和高度，以及起始坐标。就是要处理后图片的大小形状(矩形)。<br />
&nbsp;&nbsp;&nbsp; Rectangle rect = new Rectangle(0, 0, 40, 80);<br />
&nbsp;&nbsp;&nbsp; x,y就是起始点的坐标，一般从图片的左上角开始，默认为0.w,h就是实际的宽度和高度了，不是按比例截取后的宽度和高度。<br />
&nbsp;&nbsp;&nbsp; 这一点与上面的不同。<br />
&nbsp;&nbsp;&nbsp; 然后再把图片信息ImageInfo作为构造MagickImage的参数传入。 MagickImage 是处理图片的主要类。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; MagickImage image= new MagickImage(info);<br />
&nbsp;&nbsp;&nbsp; 再对MagickImage的对象选取方法。进行实际大小的截取。cropImage(rect),参数指图片的范围。<br />
&nbsp;&nbsp;&nbsp; MagickImage cropped = image.cropImage(rect);<br />
&nbsp;&nbsp;&nbsp; 最后把处理完的图片命名(1_crop.jpg)存放到指定的目录下(F:/images)。 <br />
&nbsp;&nbsp;&nbsp; cropped.setFileName("F:\\images\\1_crop.jpg");<br />
&nbsp;&nbsp;&nbsp; writeImage指定源图片的ImageInfo 对象。<br />
&nbsp;&nbsp;&nbsp; cropped.writeImage(info);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 这样就简单的把原来的图片截取成40X80的1_crop.jpg新图片了。原图片的规格一定大于40X80，要不然截取的有空白了。自己试试就知道了。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 最后一个常用的功能复制（copy），这个最简单了。<br />
<br />
&nbsp;&nbsp;&nbsp; 首先初始化一个ImageInfo对象,就是加载要处理的图片路径.<br />
&nbsp;&nbsp;&nbsp; ImageInfo info= new ImageInfo(&#8220;F:\\images\\1.jpg&#8221;); <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 然后再把图片信息ImageInfo作为构造MagickImage的参数传入。 MagickImage 是处理图片的主要类。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; MagickImage image= new MagickImage(info);</p>
<p>&nbsp;&nbsp;&nbsp; 最后把处理完的图片命名(1_copy.jpg)存放到指定的目录下(F:/images)。 <br />
&nbsp;&nbsp;&nbsp; image.setFileName("F:\\images\\1_copy.jpg");<br />
&nbsp;&nbsp;&nbsp; writeImage指定源图片的ImageInfo 对象。<br />
&nbsp;&nbsp;&nbsp; image.writeImage(info);<br />
&nbsp;&nbsp;&nbsp; 这个没有用到(cloneImage)方法，简单的理解为改变图片的存放路径就可以了，这样就很轻松的实现了copy了，比它自带的cloneImage简单多了。</p>
</div><img src ="http://www.blogjava.net/void241/aggbug/215990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/void241/" target="_blank">void</a> 2008-07-19 11:54 <a href="http://www.blogjava.net/void241/archive/2008/07/19/215990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>