im4java包处理图片
Posted 技术记录
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了im4java包处理图片相关的知识,希望对你有一定的参考价值。
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); } }
原文转自:http://blog.csdn.net/xielibohoudi/article/details/7986908
- 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);
- }
- }
以上是关于im4java包处理图片的主要内容,如果未能解决你的问题,请参考以下文章