<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    void

    ImageMagick & JMagick的使用(高品質高效率縮略圖的解決方案, 4 Windows & Linux)

    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(10080);//小圖片文件的大小.
           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目錄下。

     

    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

     

    ---------------------------------------------------------------------------------------------------------------------------------

     

    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 on 2008-07-19 11:54 void 閱讀(3922) 評論(1)  編輯  收藏 所屬分類: Jmagick

    Feedback

    # re: ImageMagick & JMagick的使用(高品質高效率縮略圖的解決方案, 4 Windows & Linux) 2011-10-19 11:20 易元

    嘿嘿,剛看的時候感覺很給力,然后再提高的時候發現問題了。
    原來你是復制、粘貼來的啊, 你還不如給個鏈接呢,幾篇相關的文章里好多重復內容。
    不好還是謝謝你了,加油,下次做個好的教程。  回復  更多評論   

    主站蜘蛛池模板: 亚洲宅男天堂a在线| 久久久久亚洲精品无码网址| 亚洲首页在线观看| 免费人成网站在线观看不卡 | www在线观看免费视频| 日韩视频在线免费| 亚洲精品宾馆在线精品酒店| 女人18毛片a级毛片免费| 亚洲乱亚洲乱妇24p| 日本一道本高清免费| 亚洲欧美在线x视频| 亚洲精品美女久久久久99小说| 理论片在线观看免费| 极品色天使在线婷婷天堂亚洲| 免费看AV毛片一区二区三区| 亚洲av永久中文无码精品| 国产一级特黄高清免费大片| 黄色毛片免费观看| 狠狠亚洲婷婷综合色香五月排名| 男人天堂免费视频| 亚洲视频免费在线播放| 高清国语自产拍免费视频国产 | 久久91亚洲人成电影网站| 精品一区二区三区免费毛片爱| 亚洲国产精品成人综合久久久 | 午夜成年女人毛片免费观看| 国产av无码专区亚洲av毛片搜| 国产啪亚洲国产精品无码| 永久在线观看免费视频| 亚洲嫩草影院在线观看| 国产精品美女自在线观看免费| 一级一黄在线观看视频免费| 久久久久亚洲精品天堂| 日韩激情淫片免费看| 中文字幕不卡高清免费| 亚洲国产成人久久| 亚洲国产精品激情在线观看| 久久狠狠躁免费观看| 亚洲精品美女久久7777777| 亚洲AV综合色区无码一区| 久久久www成人免费毛片|