im4java_im4java包处理图片

使用方法:首先要安装ImageMagick这个工具,安装好这个工具后,再下载im4java包放到项目lib目录里就行了。

packagecom.stu.util;importjava.io.IOException;importjava.util.ArrayList;importorg.im4java.core.CompositeCmd;importorg.im4java.core.ConvertCmd;importorg.im4java.core.IM4JavaException;importorg.im4java.core.IMOperation;importorg.im4java.core.IdentifyCmd;importorg.im4java.process.ArrayListOutputConsumer;public classImagesUtil {/*** 根据坐标裁剪图片

*

*@paramsrcPath 要裁剪图片的路径

*@paramnewPath 裁剪图片后的路径

*@paramx 起始横坐标

*@paramy 起始纵坐标

*@paramx1 结束横坐标

*@paramy1 结束纵坐标*/

public static void cutImage(String srcPath, String newPath, int x, int y, intx1,int y1) throwsException {int width = x1 -x;int height = y1 -y;

IMOperation op= newIMOperation();

op.addImage(srcPath);/**width:裁剪的宽度 * height:裁剪的高度 * x:裁剪的横坐标 * y:裁剪纵坐标*/op.crop(width, height, x, y);

op.addImage(newPath);

ConvertCmd convert= new ConvertCmd();

convert.run(op);

}/*** 根据尺寸缩放图片

*@paramwidth 缩放后的图片宽度

*@paramheight 缩放后的图片高度

*@paramsrcPath 源图片路径

*@paramnewPath 缩放后图片的路径*/

public static void zoomImage(Integer width, Integer height, String srcPath, String newPath) throwsException {

IMOperation op= newIMOperation();

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();

convert.run(op);

}/*** 给图片加水印

*@paramsrcPath 源图片路径*/

public static void addImgText(String srcPath,String content) throwsException {

IMOperation op= newIMOperation();

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();try{

convert.run(op,srcPath,srcPath);

}catch(Exception e) {

e.printStackTrace();

}

}/*** 图片水印

*

*@paramsrcImagePath 源图片

*@paramwaterImagePath 水印

*@paramdestImagePath 生成图片

*@paramgravity 图片位置

*@paramdissolve 水印透明度*/

public static void waterMark(String waterImagePath, String srcImagePath, String destImagePath, String gravity, intdissolve) {

IMOperation op= newIMOperation();

op.gravity(gravity);

op.dissolve(dissolve);

op.addImage(waterImagePath);

op.addImage(srcImagePath);

op.addImage(destImagePath);

CompositeCmd cmd= new CompositeCmd();try{

cmd.run(op);

}catch(IOException e) {

e.printStackTrace();

}catch(InterruptedException e) {

e.printStackTrace();

}catch(IM4JavaException e) {

e.printStackTrace();

}

}/*** 图片旋转

*

*@paramsrcImagePath

*@paramdestImagePath

*@paramangle*/

public static void rotate(String srcImagePath, String destImagePath, doubleangle) {try{

IMOperation op= newIMOperation();

op.rotate(angle);

op.addImage(srcImagePath);

op.addImage(destImagePath);

ConvertCmd cmd= new ConvertCmd();

cmd.run(op);

}catch(Exception e) {

e.printStackTrace();

}

}/*** 图片信息

*

*@paramimagePath

*@return

*/

public staticString showImageInfo(String imagePath) {

String line= null;try{

IMOperation op= newIMOperation();

op.format("width:%w,height:%h,path:%d%f,size:%b%[EXIF:DateTimeOriginal]");

op.addImage(1);

IdentifyCmd identifyCmd= new IdentifyCmd(true);

ArrayListOutputConsumer output= newArrayListOutputConsumer();

identifyCmd.setOutputConsumer(output);

identifyCmd.run(op, imagePath);

ArrayList cmdOutput =output.getOutput();assert cmdOutput.size() == 1;

line= cmdOutput.get(0);

}catch(Exception e) {

e.printStackTrace();

}returnline;

}/*** 图片合成

*@paramargs

*@parammaxWidth

*@parammaxHeight

*@paramnewpath

*@parammrg

*@paramtype 1:横,2:竖*/

public static voidmontage(String[] args,Integer maxWidth,Integer maxHeight,String newpath,Integer mrg,String type) {

IMOperation op= newIMOperation();

ConvertCmd cmd= new ConvertCmd();

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) throwsException{//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);

}

}

//如果是在windows下运行,则需要配置ImageMagick的路径(),如果找不到convert的话,把目录下的magick.exe拷贝一份命名convert.exe

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值