im4java包处理图片

来源:互联网 发布:长沙国安网络网上缴费 编辑:程序博客网 时间:2024/04/28 01:30
package com.stu.util;import java.io.IOException;import java.util.ArrayList;import org.im4java.core.CompositeCmd;import org.im4java.core.ConvertCmd;import org.im4java.core.IM4JavaException;import org.im4java.core.IMOperation;import org.im4java.core.IdentifyCmd;import org.im4java.process.ArrayListOutputConsumer;public class ImagesUtil {    /**      * 根据坐标裁剪图片      *      * @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(true);          convert.run(op);      }      /**      * 根据尺寸缩放图片      * @param width  缩放后的图片宽度      * @param height  缩放后的图片高度      * @param srcPath   源图片路径      * @param newPath   缩放后图片的路径      */      public static void zoomImage(Integer width, Integer height, String srcPath, String newPath) throws Exception {          IMOperation op = new IMOperation();          op.addImage(srcPath);          if(width == null){//根据高度缩放图片        op.resize(null, height);        }else if(height == null){//根据宽度缩放图片        op.resize(width, null);        }else {        op.resize(width, height);        }        op.addImage(newPath);          ConvertCmd convert = new ConvertCmd(true);          convert.run(op);      }             /**      * 给图片加水印      * @param srcPath   源图片路径      */      public static void addImgText(String srcPath,String content) throws Exception {          IMOperation op = new IMOperation();          op.font("微软雅黑");        op.gravity("southeast");        op.pointsize(18).fill("#BCBFC8").draw("text 0,0 "+content);   //("x1 x2 x3 x4") x1 格式,x2 x轴距离 x3 y轴距离  x4名称            op.addImage();          op.addImage();          ConvertCmd convert = new ConvertCmd(true);          try {  convert.run(op,srcPath,srcPath);} catch (Exception e) {e.printStackTrace();}    }      /**     * 图片水印     *     * @param srcImagePath   源图片     * @param waterImagePath 水印     * @param destImagePath  生成图片     * @param gravity  图片位置     * @param dissolve 水印透明度     */    public static void waterMark(String waterImagePath, String srcImagePath, String destImagePath, String gravity, int dissolve) {    IMOperation op = new IMOperation();    op.gravity(gravity);    op.dissolve(dissolve);    op.addImage(waterImagePath);    op.addImage(srcImagePath);    op.addImage(destImagePath);    CompositeCmd cmd = new CompositeCmd(true);    try {cmd.run(op);} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();} catch (IM4JavaException e) {e.printStackTrace();}    }    /**     * 图片旋转     *     * @param srcImagePath     * @param destImagePath     * @param angle     */    public static void rotate(String srcImagePath, String destImagePath, double angle) {        try {            IMOperation op = new IMOperation();            op.rotate(angle);            op.addImage(srcImagePath);            op.addImage(destImagePath);            ConvertCmd cmd = new ConvertCmd(true);            cmd.run(op);        } catch (Exception e) {            e.printStackTrace();        }    }        /**     * 图片信息     *     * @param imagePath     * @return     */    public static String showImageInfo(String imagePath) {        String line = null;        try {            IMOperation op = new IMOperation();            op.format("width:%w,height:%h,path:%d%f,size:%b%[EXIF:DateTimeOriginal]");            op.addImage(1);            IdentifyCmd identifyCmd = new IdentifyCmd(true);            ArrayListOutputConsumer output = new ArrayListOutputConsumer();            identifyCmd.setOutputConsumer(output);            identifyCmd.run(op, imagePath);            ArrayList<String> cmdOutput = output.getOutput();            assert cmdOutput.size() == 1;            line = cmdOutput.get(0);         } catch (Exception e) {            e.printStackTrace();        }        return line;    }    /**     * 图片合成     * @param args     * @param maxWidth     * @param maxHeight     * @param newpath     * @param mrg     * @param type 1:横,2:竖     */    public static void montage(String[] args,Integer maxWidth,Integer maxHeight,String newpath,Integer mrg,String type) {IMOperation op = new IMOperation();ConvertCmd cmd = new ConvertCmd(true);String thumb_size = maxWidth+"x"+maxHeight+"^";String extent = maxWidth+"x"+maxHeight;if("1".equals(type)){op.addRawArgs("+append");}else if("2".equals(type)){op.addRawArgs("-append");}op.addRawArgs("-thumbnail",thumb_size);op.addRawArgs("-gravity","center");op.addRawArgs("-extent",extent);Integer border_w = maxWidth / 40;op.addRawArgs("-border",border_w+"x"+border_w);op.addRawArgs("-bordercolor","#ccc");op.addRawArgs("-border",1+"x"+1);op.addRawArgs("-bordercolor","#fff");for(String img : args){op.addImage(img);}if("1".equals(type)){Integer whole_width = ((mrg / 2) +1 + border_w + maxWidth + border_w + (mrg / 2) +1)*args.length - mrg;Integer whole_height = maxHeight + border_w + 1;op.addRawArgs("-extent",whole_width + "x" +whole_height);}else if("2".equals(type)){Integer whole_width = maxWidth + border_w + 1;Integer whole_height = ((mrg / 2) +1 + border_w + maxHeight + border_w + (mrg / 2) +1)*args.length - mrg;op.addRawArgs("-extent",whole_width + "x" +whole_height);}op.addImage(newpath);try {cmd.run(op);} catch (Exception e) {e.printStackTrace();}}    public static void main(String[] args) throws Exception{        //addImgText("e://a2.jpg");      //zoomImage(300, 150, "e://a.jpg", "e://a1.jpg");    //zoomImage(300, 150, "e://b.jpg", "e://b1.jpg");    //zoomImage(300, 150, "e://c.jpg", "e://c1.jpg");    //zoomImage(300, 150, "e://d.jpg", "e://d1.jpg");    //zoomImage(300, 150, "e://e.jpg", "e://e1.jpg");    //zoomImage(300, 150, "e://f.jpg", "e://f1.jpg");     //waterMark("e://cc.jpg", "e://aa.jpg", "e://bb.jpg", "southeast", 30);    //rotate("e://aa.jpg", "e://ee.jpg", 90);    //System.out.println(showImageInfo("e://aa.jpg"));String[] files = new String[5];files[0] = "e://a1.jpg";files[1] = "e://b1.jpg";files[2] = "e://c1.jpg";files[3] = "e://d1.jpg";files[4] = "e://e1.jpg";    //montage(files, 280, 200, "e://liboy1.jpg", 0,"2");//cropImage("e://a.jpg", "e://liboy22.jpg", 1024, 727, 500, 350);cutImage("e://a.jpg", "e://liboy222.jpg", 5, 10, 100, 120);    }  }

原创粉丝点击