GraphicsMagick+IM4JAVA图片处理

阅读更多

本文实例是基于Windows平台

首先下载GraphicsMagick,地址:

http://sourceforge.net/projects/graphicsmagick/files/graphicsmagick-binaries/1.3.18/

和所有应用程序安装一样,直接下一步到安装完成即可。

然后下载IM4JAVA,地址:http://sourceforge.net/projects/im4java/files/im4java-1.4.0/ 

下载后解压,复制里面的:im4java-1.4.0.jar到工程的lib里。

环境就安装完成了。下面是相关代码:

 

package com.yzr.utils;

import java.io.IOException;

import org.im4java.core.ConvertCmd;
import org.im4java.core.IM4JavaException;
import org.im4java.core.IMOperation;
import org.im4java.process.ProcessStarter;

public class PictureUtil {

	static {
		String osName = System.getProperty("os.name");
		// Windows需要进行路径的设置
		if (osName.toLowerCase().contains("windows")) {
			// 设置全局搜索路径(GraphicsMagick安装路径)
			String imPath = "D:\\Program Files (x86)\\GraphicsMagick-1.3.18-Q16";
			ProcessStarter.setGlobalSearchPath(imPath);
		}
	}

	/**
	 * 先缩放,后居中切割图片
	 * 
	 * @param srcPath
	 *            源图路径
	 * @param desPath
	 *            目标图保存路径
	 * @param rectw
	 *            待切割在宽度
	 * @param recth
	 *            待切割在高度
	 * @throws IM4JavaException
	 * @throws InterruptedException
	 * @throws IOException
	 */
	public static void cropImageCenter(final String srcPath, final String desPath, final int rectw, final int recth) throws IOException, InterruptedException, IM4JavaException {
		// create command(true表示使用GraphicsMagick,API上有说)
		ConvertCmd convert = new ConvertCmd(true);
		// create the operation, add images and operators/options
		IMOperation op = new IMOperation();
		op.addImage();
		// "^"代表缩放后裁剪,这个不知道在文档中的哪里。用的别人的代码
		op.resize(rectw, recth, '^').gravity("center").extent(rectw, recth);
		op.addImage();
		convert.run(op, srcPath, desPath);
	}

	/**
	 * 先缩放,后填充背景色,并加水印
	 * 
	 * @param srcPath
	 *            源图路径
	 * @param desPath
	 *            目标图路径
	 * @param rectw
	 *            目标图的宽度
	 * @param recth
	 *            目标图的高度
	 * @param bgColor
	 *            背景颜色
	 * @param text
	 *            水印文本
	 * @throws IOException
	 * @throws InterruptedException
	 * @throws IM4JavaException
	 */
	public static void cropImageCenter(final String srcPath, final String desPath, final int rectw, final int recth, final String bgColor, final String text) throws IOException, InterruptedException, IM4JavaException {
		// create command(true表示使用GraphicsMagick,API上有说)
		ConvertCmd convert = new ConvertCmd(true);
		// create the operation, add images and operators/options
		IMOperation op = new IMOperation();
		op.addImage();
		// 设置背景颜色
		op.background(bgColor);
		// 缩放后不足的地方填充背景颜色
		op.resize(rectw, recth).gravity("center").extent(rectw, recth);
		// 加水印,有中文乱码问题,我实验的时候用的英文。期待有人解决
		op.font("C:\\Windows\\Fonts\\simsun.ttc").gravity("southeast").pointsize(14).fill("red").draw("text 10,10 '" + text + "'");
		op.addImage();
		convert.run(op, srcPath, desPath);
	}
}

 测试代码:

 

public static void main(String[] args) throws Exception {
		// PictureUtil.cropImageCenter("E:/360download/2.jpg", "E:/360download/myimage_small.jpg", 800, 600, "#CCCCCC", "test");
		PictureUtil.cropImageCenter("E:/360download/2.jpg", "E:/360download/myimage_small.jpg", 800, 600);
	}

 实验的完成参考了别人的代码及文章。

你可能感兴趣的:(图像处理)