ImageMagick高清壓縮圖片-GraphicsMagick+im4java

jopen 11年前發布 | 51K 次閱讀 圖形/圖像處理 ImageMagick

之前有寫過imageMagick壓縮圖片的文章,但是那篇文章中用到的是jmagick。

JMagick是一個開源API,利用JNI(Java Native Interface)技術實現了對ImageMagick API的Java訪問接口,因此也將比純Java實現的圖片操作函數在速度上要快。JMagick只實現了ImageMagicAPI的一部分功能,它的發行遵循LGPL協議

而且jmagick有一個致命的缺點,在web應用中,部署在tomcat服務器中,過一陣子可能出現tomcat crash的問題。由此,我也不建議使用jmagick。

后來參考了javaeye上的文章,發現imageMagick還有其他的接口,那就是im4java。

im4java是ImageMagick的另一個Java開源接口。與JMagick不同之處在于im4java只是生成與ImageMagick相對應的命令行,然后將生成的命令行傳至選中的IM-command(使用java.lang.ProcessBuilder.start()實現)來執行相應的操作。它支持大部分ImageMagick命令,可以針對不同組的圖片多次復用同一個命令行。

這篇文章,我就是主要講解im4java。經過測試,im4java也是能夠高清壓縮圖片,而且它也特別強大,至少一些基本常見的業務都是可以完美實現的。

目前我只寫了一個壓縮方法,當然也是參照其他大神的方法改進的,以符合自己的業務需求。

用im4java,我們需要安裝GraphicsMagick:

GraphicsMagick 是一個用來讀寫、生成超過90種圖像格式的工具集合,支持包括 TIFF, JPEG, JPEG-2000,PNG, PDF, PhotoCD, SVG, 和GIF 等圖像格式。GraphicsMagick 是基于 ImageMagick 開發的。

GraphicsMagick是ImageMagick的一個分支,相對于ImageMagick而言,TA處理速度更快,消耗資源更少。

GraphicsMagick官網:http://www.graphicsmagick.org/index.html

GraphicsMagick-APIhttp://www.graphicsmagick.org/convert.html

直接下載最新版的GraphicsMagick,安裝即可。

在你的程序里,我們只要調用im4java壓縮的工具類就行。

返回值你可以自定義,一般返回壓縮后的路徑。

附上源碼:

/* 根據尺寸縮放圖片
     * 
     * @author tanjun
     * @date 2013年9月6日  
     * @param path 
     *           源圖路徑
     * @param width
     *           壓縮后寬度
     * @param height
     *          壓縮后高度
     * @param type 
     *          1為像素,2為百分比處理,如(像素大小:1024x1024,百分比:50%x50%)
     * @return
     * @throws Exception
     */
    public static String createThumbnail(String path,int width, int height,String type) throws Exception {

        IMOperation op = new IMOperation();
        ConvertCmd cmd = new ConvertCmd(true);
        String newFileName=null;
        //文件名前綴
        String prevFileName=null;
        try {
            op.addImage();
            String raw = "";
            if("1".equals(type)){
               //按像素
               raw = width+"x"+height+"!";
               prevFileName=width + "x" + height + "_";
            }else{
               //按百分比
               raw = width+"%x"+height+"%";
               prevFileName=width + "%x" + height + "%_";
            } 
            //壓縮
            op.addRawArgs("-thumbnail", raw);
            //圖片質量
            op.addRawArgs("-quality", "100");
            op.addImage();
            //系統類型
            String osName = System.getProperty("os.name").toLowerCase();
            if (osName.indexOf("win") != -1) {
                // linux下不要設置此值,不然會報錯
                cmd.setSearchPath(DspConfigHolder.getProperty("imageMagickPath"));
            }
            //讀取配置文件:工程路徑
            String filePath = DspConfigHolder.getProjectAbsPath() + path;
            String fpath[]=filePath.split("/");
            //原圖名稱
            String oldFileName=fpath[fpath.length-1];
            //壓縮圖名稱
            String fileName=IdCreater.newId()+getImgSuffix(oldFileName);;
            //壓縮后的新文件名
            newFileName= prevFileName+ fileName;
            //新文件路徑
            String newfile=filePath.replace(oldFileName, newFileName);
            //壓縮
            cmd.run(op, filePath, newfile);
        } catch (Exception e) {
            e.printStackTrace();
            throw new Exception(MessageUtil.getMessage("thumbnailimage.error"));
        }
        return DspConfigHolder.getImgUploadPath()+newFileName;
    }
你的 GraphicsMagick安裝路徑:

DspConfigHolder.getProperty("imageMagickPath");//我這里是配置在properties文件中

##image安裝路徑(linux下不需要此項)
imageMagickPath=C:\\Program Files\\GraphicsMagick-1.3.18-Q8
好了,以上就是利用 GraphicsMagick+im4java 來高清壓縮圖片。

我們不再使用jmagick,省卻了配置來配置去的問題。


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!