使用方法:首先要安装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