ImageMagick高清壓縮圖片-GraphicsMagick+im4java

以前有寫過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-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,省卻了配置來配置去的問題。

相關文章
相關標籤/搜索