ImageMagick和im4java

来源:互联网 发布:防抄袭软件 编辑:程序博客网 时间:2024/05/29 06:48

原文:http://www.juziku.com/sunlightcs/wiki/2104.htm

ImageMagick和im4java处理图片,im4java是ImageMagick的一个Java开源接口,使用起来非常方便。
很多网站都会用到对图片的一些处理,包括图片的裁剪、给图片加水印、按比例缩放图片等操作,用ImageMagick实现这些功能,性能非常好,图片还不会失真,聚资库网站,上传图片的时候,就是用的这个实现的。
首先要安装ImageMagick这个工具,安装好这个工具后,再下载im4java包放到项目lib目录里就行了。

注意:如果命令放到CMD中去执行正确,但是在JAVA代码中却执行不了,例如报错说:找不到indentfy这个命令。那么错误可能是你没有设置你工具的路径。

例如:

目的:这个命令是为了获取传入图片的高和宽。

结果:600x480

环境:linux。

需要加的命令:

ProcessStarter.setGlobalSearchPath(globalSearchPath);

/**     * Executes the Image Magick Identify command with format of Width x Height     *     * @param imagePath     *            String     * @return String format of Image's Width x Height     */public static String findImageSize(String imagePath,long companyId,long siteId) {imagePath = imagePath.replaceAll("//", "/");String response = null;try {IdentifyCmd cmd = new IdentifyCmd();ArrayListOutputConsumer output = new ArrayListOutputConsumer(); cmd.setOutputConsumer(output); IMOperation imOperation = new IMOperation();imOperation.format("%[fx:w]x%[fx:h]");imOperation.addImage(imagePath);/*ProcessTask p = cmd.getProcessTask(imOperation);p.getProcessStarter().getSearchPath();*/String globalSearchPath = ImageToolUtil.getGlobalSearchPath(companyId,siteId);ProcessStarter.setGlobalSearchPath(globalSearchPath);cmd.run(imOperation);ArrayList<String> cmdOutput = output.getOutput();                 response = cmdOutput.get(0);     } catch (Exception e) {_log.error(e);} return response;}

下面是通过im4java调用ImageMagick工具处理图片的代码:

 

/** *  * ImageMagick和im4java处理图片 *  * @author sunlightcs *  *         2011-6-1 *  *         http://hi.juziku.com/sunlightcs/ */public class ImageTools {/** *  * ImageMagick的路径 */// public static String imageMagickPath = null;static {/** *  * 获取ImageMagick的路径 */// Properties prop = new PropertiesFile().getPropertiesFile();// linux下不要设置此值,不然会报错// imageMagickPath = prop.getProperty("imageMagickPath");}/** *  * 根据坐标裁剪图片 *  * @param srcPath   要裁剪图片的路径 * @param newPath   裁剪图片后的路径 * @param x         起始横坐标 * @param y         起始挫坐标 * @param x1                结束横坐标 * @param y1                结束挫坐标 */public static void cutImage(String srcPath, String newPath, int x, int y, int x1,int y1) throws Exception {int width = x1 - x;int height = y1 - y;IMOperation op = new IMOperation();op.addImage(srcPath);/** * width:  裁剪的宽度 * height:裁剪的高度 * x:          裁剪的横坐标 * y:          裁剪的挫坐标 */op.crop(width, height, x, y);op.addImage(newPath);ConvertCmd convert = new ConvertCmd();// linux下不要设置此值,不然会报错// convert.setSearchPath(imageMagickPath);convert.run(op);}/** *  * 根据尺寸缩放图片 * @param width             缩放后的图片宽度 * @param height            缩放后的图片高度 * @param srcPath           源图片路径 * @param newPath           缩放后图片的路径 */public static void cutImage(int width, int height, String srcPath,String newPath) throws Exception {IMOperation op = new IMOperation();op.addImage(srcPath);op.resize(width, height);op.addImage(newPath);ConvertCmd convert = new ConvertCmd();// linux下不要设置此值,不然会报错// convert.setSearchPath(imageMagickPath);convert.run(op);}/** * 根据宽度缩放图片 *  * @param width            缩放后的图片宽度 * @param srcPath          源图片路径 * @param newPath          缩放后图片的路径 */public static void cutImage(int width, String srcPath, String newPath)throws Exception {IMOperation op = new IMOperation();op.addImage(srcPath);op.resize(width, null);op.addImage(newPath);ConvertCmd convert = new ConvertCmd();// linux下不要设置此值,不然会报错// convert.setSearchPath(imageMagickPath);convert.run(op);}/** * 给图片加水印 * @param srcPath            源图片路径 */public static void addImgText(String srcPath) throws Exception {IMOperation op = new IMOperation();op.font("宋体").gravity("southeast").pointsize(18).fill("#BCBFC8").draw("text 5,5 juziku.com");op.addImage();op.addImage();ConvertCmd convert = new ConvertCmd();// linux下不要设置此值,不然会报错// convert.setSearchPath(imageMagickPath);convert.run(op, srcPath, srcPath);}public static void main(String[] args) throws Exception {// cutImage("D:\\apple870.jpg", "D:\\apple870eee.jpg", 98, 48, 370,// 320);// cutImage(200,300, "/home/steven/a.jpg", "/home/steven/aa.jpg");addImgText("//home//steven//a.jpg");}}


 

原创粉丝点击