void

          ImageMagick & JMagick的使用

          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){
              }
          }

           

           

          posted on 2011-07-10 10:53 void 閱讀(1012) 評論(0)  編輯  收藏 所屬分類: Jmagick

          My Links

          Blog Stats

          隨筆分類

          最新評論

          主站蜘蛛池模板: 广河县| 清苑县| 翁牛特旗| 连州市| 襄樊市| 徐水县| 沐川县| 长寿区| 宕昌县| 临猗县| 苍山县| 固原市| 盐池县| 多伦县| 安新县| 景宁| 汉源县| 赤水市| 增城市| 界首市| 嘉荫县| 兰州市| 广水市| 同江市| 阿拉尔市| 璧山县| 大石桥市| 广汉市| 喀喇沁旗| 胶州市| 德令哈市| 南阳市| 错那县| 新沂市| 泌阳县| 垫江县| 北碚区| 定结县| 扶绥县| 贞丰县| 潜江市|