以前有寫過imageMagick壓縮圖片的文章,可是那篇文章中用到的是jmagick。 html
JMagick是一個開源API,利用JNI(Java Native Interface)技術實現了對ImageMagick API的Java訪問接口,所以也將比純Java實現的圖片操做函數在速度上要快。JMagick只實現了ImageMagicAPI的一部分功能,它的發行遵循LGPL協議。 java
並且jmagick有一個致命的缺點,在web應用中,部署在tomcat服務器中,過一陣子可能出現tomcat crash的問題。由此,我也不建議使用jmagick。 linux
後來參考了javaeye上的文章,發現imageMagick還有其餘的接口,那就是im4java。 web
im4java是ImageMagick的另外一個Java開源接口。與JMagick不一樣之處在於im4java只是生成與ImageMagick相對應的命令行,而後將生成的命令行傳至選中的IM-command(使用java.lang.ProcessBuilder.start()實現)來執行相應的操做。它支持大部分ImageMagick命令,能夠針對不一樣組的圖片屢次複用同一個命令行。
tomcat
這篇文章,我就是主要講解im4java。通過測試,im4java也是可以高清壓縮圖片,並且它也特別強大,至少一些基本常見的業務都是能夠完美實現的。 服務器
目前我只寫了一個壓縮方法,固然也是參照其餘大神的方法改進的,以符合本身的業務需求。 函數
用im4java,咱們須要安裝GraphicsMagick: 工具
GraphicsMagick 是一個用來讀寫、生成超過90種圖像格式的工具集合,支持包括 TIFF, JPEG, JPEG-2000,PNG, PDF, PhotoCD, SVG, 和GIF 等圖像格式。GraphicsMagick 是基於 ImageMagick 開發的。
測試
GraphicsMagick是ImageMagick的一個分支,相對於ImageMagick而言,TA處理速度更快,消耗資源更少。
ui
GraphicsMagick官網:http://www.graphicsmagick.org/index.html
GraphicsMagick-API:http://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,省卻了配置來配置去的問題。