JAVA对图片的操作

package org.review;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;


public class OperateImage {

 public OperateImage() {
  super();
 }

 
 public void cropImage(String srcPath, String toPath, int x, int y,
   int width, int height, String readImageFormat,
   String writeImageFormat) throws IOException {
  FileInputStream fis = null;
  ImageInputStream iis = null;
  try {
   //读取图片文件
   fis = new FileInputStream(srcPath);
   Iterator it = ImageIO.getImageReadersByFormatName(readImageFormat);
   ImageReader reader = (ImageReader) it.next();
   //获取图片流
   iis = ImageIO.createImageInputStream(fis);
   reader.setInput(iis, true);
   ImageReadParam param = reader.getDefaultReadParam();
   //定义一个矩形
   Rectangle rect = new Rectangle(x, y, width, height);
   //提供一个 BufferedImage,将其用作解码像素数据的目标。
   param.setSourceRegion(rect);
   BufferedImage bi = reader.read(0, param);
   //保存新图片
   ImageIO.write(bi, writeImageFormat, new File(toPath));
  } finally {
   if (fis != null)
    fis.close();
   if (iis != null)
    iis.close();
  }
 }

 
 public void reduceImageByRatio(String srcImagePath, String toImagePath,
   int widthRatio, int heightRatio) throws IOException {
  FileOutputStream out = null;
  try {
   //读入文件 
   File file = new File(srcImagePath);
   // 构造Image对象 
   BufferedImage src = javax.imageio.ImageIO.read(file);
   int width = src.getWidth();
   int height = src.getHeight();
   // 缩小边长
   BufferedImage tag = new BufferedImage(width / widthRatio, height
     / heightRatio, BufferedImage.TYPE_INT_RGB);
   // 绘制 缩小  后的图片
   tag.getGraphics().drawImage(src, 0, 0, width / widthRatio,
     height / heightRatio, null);
   out = new FileOutputStream(toImagePath);
   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
   encoder.encode(tag);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (out != null) {
    out.close();
   }
  }
 }

 
 public void reduceImageEqualProportion(String srcImagePath,
   String toImagePath, int ratio) throws IOException {
  FileOutputStream out = null;
  try {
   //读入文件 
   File file = new File(srcImagePath);
   // 构造Image对象 
   BufferedImage src = javax.imageio.ImageIO.read(file);
   int width = src.getWidth();
   int height = src.getHeight();
   // 缩小边长
   BufferedImage tag = new BufferedImage(width / ratio,
     height / ratio, BufferedImage.TYPE_INT_RGB);
   // 绘制 缩小  后的图片
   tag.getGraphics().drawImage(src, 0, 0, width / ratio,
     height / ratio, null);
   out = new FileOutputStream(toImagePath);
   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
   encoder.encode(tag);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (out != null) {
    out.close();
   }
  }
 }

 
 public void enlargementImageByRatio(String srcImagePath,
   String toImagePath, int widthRatio, int heightRatio)
   throws IOException {
  FileOutputStream out = null;
  try {
   //读入文件 
   File file = new File(srcImagePath);
   // 构造Image对象 
   BufferedImage src = javax.imageio.ImageIO.read(file);
   int width = src.getWidth();
   int height = src.getHeight();
   // 放大边长
   BufferedImage tag = new BufferedImage(width * widthRatio, height
     * heightRatio, BufferedImage.TYPE_INT_RGB);
   //绘制放大后的图片
   tag.getGraphics().drawImage(src, 0, 0, width * widthRatio,
     height * heightRatio, null);
   out = new FileOutputStream(toImagePath);
   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
   encoder.encode(tag);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (out != null) {
    out.close();
   }
  }
 }

 
 public void enlargementImageEqualProportion(String srcImagePath,
   String toImagePath, int ratio) throws IOException {
  FileOutputStream out = null;
  try {
   //读入文件 
   File file = new File(srcImagePath);
   // 构造Image对象 
   BufferedImage src = javax.imageio.ImageIO.read(file);
   int width = src.getWidth();
   int height = src.getHeight();
   // 放大边长
   BufferedImage tag = new BufferedImage(width * ratio,
     height * ratio, BufferedImage.TYPE_INT_RGB);
   //绘制放大后的图片
   tag.getGraphics().drawImage(src, 0, 0, width * ratio,
     height * ratio, null);
   out = new FileOutputStream(toImagePath);
   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
   encoder.encode(tag);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (out != null) {
    out.close();
   }
  }
 }

 
 public void resizeImage(String srcImagePath, String toImagePath, int width,
   int height) throws IOException {
  FileOutputStream out = null;
  try {
   //读入文件 
   File file = new File(srcImagePath);
   // 构造Image对象 
   BufferedImage src = javax.imageio.ImageIO.read(file);
   // 放大边长
   BufferedImage tag = new BufferedImage(width, height,
     BufferedImage.TYPE_INT_RGB);
   //绘制放大后的图片
   tag.getGraphics().drawImage(src, 0, 0, width, height, null);
   out = new FileOutputStream(toImagePath);
   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
   encoder.encode(tag);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (out != null) {
    out.close();
   }
  }
 }

 
 public void joinImagesHorizontal(String firstSrcImagePath,
   String secondSrcImagePath, String imageFormat, String toPath) {
  try {
   //读取第一张图片   
   File fileOne = new File(firstSrcImagePath);
   BufferedImage imageOne = ImageIO.read(fileOne);
   int width = imageOne.getWidth();//图片宽度   
   int height = imageOne.getHeight();//图片高度   
   //从图片中读取RGB   
   int[] imageArrayOne = new int[width * height];
   imageArrayOne = imageOne.getRGB(0, 0, width, height, imageArrayOne,
     0, width);

   //对第二张图片做相同的处理   
   File fileTwo = new File(secondSrcImagePath);
   BufferedImage imageTwo = ImageIO.read(fileTwo);
   int width2 = imageTwo.getWidth();
   int height2 = imageTwo.getHeight();
   int[] ImageArrayTwo = new int[width2 * height2];
   ImageArrayTwo = imageTwo.getRGB(0, 0, width, height, ImageArrayTwo,
     0, width);
   //ImageArrayTwo  imageTwo.getRGB(0,0,width2,height2,ImageArrayTwo,0,width2);

   //生成新图片
   //int height3 = (height>height2 || height==height2)?height:height2;
   BufferedImage imageNew = new BufferedImage(width * 2, height,
     BufferedImage.TYPE_INT_RGB);
   //BufferedImage  imageNew  new  BufferedImage(width+width2,height3,BufferedImage.TYPE_INT_RGB);   
   imageNew.setRGB(0, 0, width, height, imageArrayOne, 0, width);//设置左半部分的RGB 
   imageNew.setRGB(width, 0, width, height, ImageArrayTwo, 0, width);//设置右半部分的RGB
   //imageNew.setRGB(width,0,width2,height2,ImageArrayTwo,0,width2);//设置右半部分的RGB   

   File outFile = new File(toPath);
   ImageIO.write(imageNew, imageFormat, outFile);//写图片
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 
 public boolean joinImageListHorizontal(String[] pics, String type,
   String dst_pic) {
  try {
   int len = pics.length;
   if (len < 1) {
    System.out.println("pics len < 1");
    return false;
   }
   File[] src = new File[len];
   BufferedImage[] images = new BufferedImage[len];
   int[][] imageArrays = new int[len][];
   for (int i = 0; i < len; i++) {
    src[i] = new File(pics[i]);
    images[i] = ImageIO.read(src[i]);
    int width = images[i].getWidth();
    int height = images[i].getHeight();
    imageArrays[i] = new int[width * height];// 从图片中读取RGB   
    imageArrays[i] = images[i].getRGB(0, 0, width, height,
      imageArrays[i], 0, width);
   }

   int dst_width = 0;
   int dst_height = images[0].getHeight();
   for (int i = 0; i < images.length; i++) {
    dst_height = dst_height > images[i].getHeight() ? dst_height
      : images[i].getHeight();
    dst_width += images[i].getWidth();
   }
   //System.out.println(dst_width); 
   //System.out.println(dst_height); 
   if (dst_height < 1) {
    System.out.println("dst_height < 1");
    return false;
   }
   
   BufferedImage ImageNew = new BufferedImage(dst_width, dst_height,
     BufferedImage.TYPE_INT_RGB);
   int width_i = 0;
   for (int i = 0; i < images.length; i++) {
    ImageNew.setRGB(width_i, 0, images[i].getWidth(), dst_height,
      imageArrays[i], 0, images[i].getWidth());
    width_i += images[i].getWidth();
   }
   File outFile = new File(dst_pic);
   ImageIO.write(ImageNew, type, outFile);// 写图片  
  } catch (Exception e) {
   e.printStackTrace();
   return false;
  }
  return true;
 }

 
 public void joinImagesVertical(String firstSrcImagePath,
   String secondSrcImagePath, String imageFormat, String toPath) {
  try {
   //读取第一张图片   
   File fileOne = new File(firstSrcImagePath);
   BufferedImage imageOne = ImageIO.read(fileOne);
   int width = imageOne.getWidth();//图片宽度   
   int height = imageOne.getHeight();//图片高度   
   //从图片中读取RGB   
   int[] imageArrayOne = new int[width * height];
   imageArrayOne = imageOne.getRGB(0, 0, width, height, imageArrayOne,
     0, width);

   //对第二张图片做相同的处理   
   File fileTwo = new File(secondSrcImagePath);
   BufferedImage imageTwo = ImageIO.read(fileTwo);
   int width2 = imageTwo.getWidth();
   int height2 = imageTwo.getHeight();
   int[] ImageArrayTwo = new int[width2 * height2];
   ImageArrayTwo = imageTwo.getRGB(0, 0, width, height, ImageArrayTwo,
     0, width);
   //ImageArrayTwo  imageTwo.getRGB(0,0,width2,height2,ImageArrayTwo,0,width2);

   //生成新图片
   //int width3 = (width>width2 || width==width2)?width:width2;
   BufferedImage imageNew = new BufferedImage(width, height * 2,
     BufferedImage.TYPE_INT_RGB);
   //BufferedImage  imageNew  new  BufferedImage(width3,height+height2,BufferedImage.TYPE_INT_RGB);   
   imageNew.setRGB(0, 0, width, height, imageArrayOne, 0, width);//设置上半部分的RGB   
   imageNew.setRGB(0, height, width, height, ImageArrayTwo, 0, width);//设置下半部分的RGB
   //imageNew.setRGB(0,height,width2,height2,ImageArrayTwo,0,width2);//设置下半部分的RGB   

   File outFile = new File(toPath);
   ImageIO.write(imageNew, imageFormat, outFile);//写图片
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 
 public boolean joinImageListVertical(String[] pics, String type,
   String dst_pic) {
  try {
   int len = pics.length;
   if (len < 1) {
    System.out.println("pics len < 1");
    return false;
   }
   File[] src = new File[len];
   BufferedImage[] images = new BufferedImage[len];
   int[][] imageArrays = new int[len][];
   for (int i = 0; i < len; i++) {
    //System.out.println(i);
    src[i] = new File(pics[i]);
    images[i] = ImageIO.read(src[i]);
    int width = images[i].getWidth();
    int height = images[i].getHeight();
    imageArrays[i] = new int[width * height];// 从图片中读取RGB  
    imageArrays[i] = images[i].getRGB(0, 0, width, height,
      imageArrays[i], 0, width);
   }

   int dst_height = 0;
   int dst_width = images[0].getWidth();
   for (int i = 0; i < images.length; i++) {
    dst_width = dst_width > images[i].getWidth() ? dst_width
      : images[i].getWidth();
    dst_height += images[i].getHeight();
   }
   //System.out.println(dst_width); 
   //System.out.println(dst_height); 
   if (dst_height < 1) {
    System.out.println("dst_height < 1");
    return false;
   }
   
   BufferedImage ImageNew = new BufferedImage(dst_width, dst_height,
     BufferedImage.TYPE_INT_RGB);
   int height_i = 0;
   for (int i = 0; i < images.length; i++) {
    ImageNew.setRGB(0, height_i, dst_width, images[i].getHeight(),
      imageArrays[i], 0, dst_width);
    height_i += images[i].getHeight();
   }
   File outFile = new File(dst_pic);
   ImageIO.write(ImageNew, type, outFile);// 写图片  
  } catch (Exception e) {
   e.printStackTrace();
   return false;
  }
  return true;
 }

 
 public void mergeBothImage(String negativeImagePath,
   String additionImagePath, int x, int y, String toPath)
   throws IOException {
  InputStream is = null;
  InputStream is2 = null;
  OutputStream os = null;
  try {

   is = new FileInputStream(negativeImagePath);
   is2 = new FileInputStream(additionImagePath);

   BufferedImage image = ImageIO.read(is);
   BufferedImage image2 = ImageIO.read(is2);
   System.out.println(image2);
   Graphics g = image.getGraphics();

   g.drawImage(image2, 0, 0, null);
   os = new FileOutputStream(toPath);

   JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(os);
   enc.encode(image);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (os != null) {
    os.close();
   }
   if (is2 != null) {
    is2.close();
   }
   if (is != null) {
    is.close();
   }
  }
 }

 
 public void mergeImageList(String negativeImagePath,
   List additionImageList, String imageFormat, String toPath)
   throws IOException {
  InputStream is = null;
  InputStream is2 = null;
  OutputStream os = null;
  try {
   is = new FileInputStream(negativeImagePath);
   BufferedImage image = ImageIO.read(is);
   //Graphics g=image.getGraphics();
   Graphics2D g = image.createGraphics();
   ;
   BufferedImage image2 = null;
   if (additionImageList != null) {
    for (int i = 0; i < additionImageList.size(); i++) {
     //解析附加图片信息:x坐标、 y坐标、 additionImagePath附加图片路径
     //图片信息存储在一个数组中
     String[] additionImageInfo = (String[]) additionImageList
       .get(i);
     int x = Integer.parseInt(additionImageInfo[0]);
     int y = Integer.parseInt(additionImageInfo[1]);
     String additionImagePath = additionImageInfo[2];
     //读取文件输入流,并合并图片
     is2 = new FileInputStream(additionImagePath);
     //System.out.println(x+"  "+y+"  "+additionImagePath);
     image2 = ImageIO.read(is2);
     g.drawImage(image2, x, y, null);
    }
   }
   os = new FileOutputStream(toPath);
   ImageIO.write(image, imageFormat, os);//写图片
   //JPEGImageEncoder enc=JPEGCodec.createJPEGEncoder(os);
   //enc.encode(image);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (os != null) {
    os.close();
   }
   if (is2 != null) {
    is2.close();
   }
   if (is != null) {
    is.close();
   }
  }
 }

 
 public void mergeBothImageTopleftcorner(String negativeImagePath,
   String additionImagePath, String toPath) throws IOException {
  InputStream is = null;
  InputStream is2 = null;
  OutputStream os = null;
  try {
   is = new FileInputStream(negativeImagePath);
   is2 = new FileInputStream(additionImagePath);
   BufferedImage image = ImageIO.read(is);
   BufferedImage image2 = ImageIO.read(is2);
   Graphics g = image.getGraphics();
   g.drawImage(image2, 0, 0, null);
   os = new FileOutputStream(toPath);
   JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(os);
   enc.encode(image);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (os != null) {
    os.close();
   }
   if (is2 != null) {
    is2.close();
   }
   if (is != null) {
    is.close();
   }
  }
 }

 
 public void mergeBothImageToprightcorner(String negativeImagePath,
   String additionImagePath, String toPath) throws IOException {
  InputStream is = null;
  InputStream is2 = null;
  OutputStream os = null;
  try {
   is = new FileInputStream(negativeImagePath);
   is2 = new FileInputStream(additionImagePath);
   BufferedImage image = ImageIO.read(is);
   BufferedImage image2 = ImageIO.read(is2);
   Graphics g = image.getGraphics();
   g.drawImage(image2, image.getWidth() - image2.getWidth(), 0, null);
   os = new FileOutputStream(toPath);
   JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(os);
   enc.encode(image);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (os != null) {
    os.close();
   }
   if (is2 != null) {
    is2.close();
   }
   if (is != null) {
    is.close();
   }
  }
 }

 
 public void mergeBothImageLeftbottom(String negativeImagePath,
   String additionImagePath, String toPath) throws IOException {
  InputStream is = null;
  InputStream is2 = null;
  OutputStream os = null;
  try {
   is = new FileInputStream(negativeImagePath);
   is2 = new FileInputStream(additionImagePath);
   BufferedImage image = ImageIO.read(is);
   BufferedImage image2 = ImageIO.read(is2);
   Graphics g = image.getGraphics();
   g
     .drawImage(image2, 0, image.getHeight()
       - image2.getHeight(), null);
   os = new FileOutputStream(toPath);
   JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(os);
   enc.encode(image);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (os != null) {
    os.close();
   }
   if (is2 != null) {
    is2.close();
   }
   if (is != null) {
    is.close();
   }
  }
 }

 
 public void mergeBothImageRightbottom(String negativeImagePath,
   String additionImagePath, String toPath) throws IOException {
  InputStream is = null;
  InputStream is2 = null;
  OutputStream os = null;
  try {
   is = new FileInputStream(negativeImagePath);
   is2 = new FileInputStream(additionImagePath);
   BufferedImage image = ImageIO.read(is);
   BufferedImage image2 = ImageIO.read(is2);
   Graphics g = image.getGraphics();
   g.drawImage(image2, image.getWidth() - image2.getWidth(), image
     .getHeight()
     - image2.getHeight(), null);
   os = new FileOutputStream(toPath);
   JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(os);
   enc.encode(image);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (os != null) {
    os.close();
   }
   if (is2 != null) {
    is2.close();
   }
   if (is != null) {
    is.close();
   }
  }
 }

 
 public void mergeBothImageCenter(String negativeImagePath,
   String additionImagePath, String toPath) throws IOException {
  InputStream is = null;
  InputStream is2 = null;
  OutputStream os = null;
  try {
   is = new FileInputStream(negativeImagePath);
   is2 = new FileInputStream(additionImagePath);
   BufferedImage image = ImageIO.read(is);
   BufferedImage image2 = ImageIO.read(is2);
   Graphics g = image.getGraphics();
   g.drawImage(image2, image.getWidth() / 2 - image2.getWidth() / 2,
     image.getHeight() / 2 - image2.getHeight() / 2, null);
   os = new FileOutputStream(toPath);
   JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(os);
   enc.encode(image);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (os != null) {
    os.close();
   }
   if (is2 != null) {
    is2.close();
   }
   if (is != null) {
    is.close();
   }
  }
 }

 
 public void mergeBothImageTopcenter(String negativeImagePath,
   String additionImagePath, String toPath) throws IOException {
  InputStream is = null;
  InputStream is2 = null;
  OutputStream os = null;
  try {
   is = new FileInputStream(negativeImagePath);
   is2 = new FileInputStream(additionImagePath);
   BufferedImage image = ImageIO.read(is);
   BufferedImage image2 = ImageIO.read(is2);
   Graphics g = image.getGraphics();
   g.drawImage(image2, image.getWidth() / 2 - image2.getWidth() / 2,
     0, null);
   os = new FileOutputStream(toPath);
   JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(os);
   enc.encode(image);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (os != null) {
    os.close();
   }
   if (is2 != null) {
    is2.close();
   }
   if (is != null) {
    is.close();
   }
  }
 }

 
 public void mergeBothImageBottomcenter(String negativeImagePath,
   String additionImagePath, String toPath) throws IOException {
  InputStream is = null;
  InputStream is2 = null;
  OutputStream os = null;
  try {
   is = new FileInputStream(negativeImagePath);
   is2 = new FileInputStream(additionImagePath);
   BufferedImage image = ImageIO.read(is);
   BufferedImage image2 = ImageIO.read(is2);
   Graphics g = image.getGraphics();
   g.drawImage(image2, image.getWidth() / 2 - image2.getWidth() / 2,
     image.getHeight() - image2.getHeight(), null);
   os = new FileOutputStream(toPath);
   JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(os);
   enc.encode(image);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (os != null) {
    os.close();
   }
   if (is2 != null) {
    is2.close();
   }
   if (is != null) {
    is.close();
   }
  }
 }

 
 public void mergeBothImageLeftcenter(String negativeImagePath,
   String additionImagePath, String toPath) throws IOException {
  InputStream is = null;
  InputStream is2 = null;
  OutputStream os = null;
  try {
   is = new FileInputStream(negativeImagePath);
   is2 = new FileInputStream(additionImagePath);
   BufferedImage image = ImageIO.read(is);
   BufferedImage image2 = ImageIO.read(is2);
   Graphics g = image.getGraphics();
   g.drawImage(image2, 0, image.getHeight() / 2 - image2.getHeight()
     / 2, null);
   os = new FileOutputStream(toPath);
   JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(os);
   enc.encode(image);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (os != null) {
    os.close();
   }
   if (is2 != null) {
    is2.close();
   }
   if (is != null) {
    is.close();
   }
  }
 }

 
 public void mergeBothImageRightcenter(String negativeImagePath,
   String additionImagePath, String toPath) throws IOException {
  InputStream is = null;
  InputStream is2 = null;
  OutputStream os = null;
  try {
   is = new FileInputStream(negativeImagePath);
   is2 = new FileInputStream(additionImagePath);
   BufferedImage image = ImageIO.read(is);
   BufferedImage image2 = ImageIO.read(is2);
   Graphics g = image.getGraphics();
   g.drawImage(image2, image.getWidth() - image2.getWidth(), image
     .getHeight()
     / 2 - image2.getHeight() / 2, null);
   os = new FileOutputStream(toPath);
   JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(os);
   enc.encode(image);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (os != null) {
    os.close();
   }
   if (is2 != null) {
    is2.close();
   }
   if (is != null) {
    is.close();
   }
  }
 }

 
 public void grayImage(String srcImage, String toPath, String imageFormat) {
  try {
   BufferedImage src = ImageIO.read(new File(srcImage));
   ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
   ColorConvertOp op = new ColorConvertOp(cs, null);
   src = op.filter(src, null);
   ImageIO.write(src, imageFormat, new File(toPath));
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 
 public void alphaWords2Image(String srcImagePath, float alpha, String font,
   int fontStyle, int fontSize, Color color, String inputWords, int x,
   int y, String imageFormat, String toPath) throws IOException {
  FileOutputStream fos = null;
  try {
   BufferedImage image = ImageIO.read(new File(srcImagePath));
   //创建java2D对象
   Graphics2D g2d = image.createGraphics();
   //用源图像填充背景
   g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(),
     null, null);
   //设置透明度
   AlphaComposite ac = AlphaComposite.getInstance(
     AlphaComposite.SRC_OVER, alpha);
   g2d.setComposite(ac);
   //设置文字字体名称、样式、大小
   g2d.setFont(new Font(font, fontStyle, fontSize));
   g2d.setColor(color);//设置字体颜色
   g2d.drawString(inputWords, x, y); //输入水印文字及其起始x、y坐标
   g2d.dispose();
   fos = new FileOutputStream(toPath);
   ImageIO.write(image, imageFormat, fos);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (fos != null) {
    fos.close();
   }
  }
 }

 
 public void alphaImage2Image(String srcImagePath, String appendImagePath,
   float alpha, int x, int y, int width, int height,
   String imageFormat, String toPath) throws IOException {
  FileOutputStream fos = null;
  try {
   BufferedImage image = ImageIO.read(new File(srcImagePath));
   //创建java2D对象
   Graphics2D g2d = image.createGraphics();
   //用源图像填充背景
   g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(),
     null, null);
   //设置透明度
   AlphaComposite ac = AlphaComposite.getInstance(
     AlphaComposite.SRC_OVER, alpha);
   g2d.setComposite(ac);
   //设置水印图片的起始x/y坐标、宽度、高度
   BufferedImage appendImage = ImageIO.read(new File(appendImagePath));
   g2d.drawImage(appendImage, x, y, width, height, null, null);
   g2d.dispose();
   fos = new FileOutputStream(toPath);
   ImageIO.write(image, imageFormat, fos);
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (fos != null) {
    fos.close();
   }
  }
 }

 
 public void drawPoint(String srcImagePath, int x, int y, int width,
   int height, Color ovalColor, String imageFormat, String toPath)
   throws IOException {
  FileOutputStream fos = null;
  try {
   //获取源图片
   BufferedImage image = ImageIO.read(new File(srcImagePath));
   //根据xy点坐标绘制连接线
   Graphics2D g2d = image.createGraphics();
   g2d.setColor(ovalColor);
   //填充一个椭圆形
   g2d.fillOval(x, y, width, height);
   fos = new FileOutputStream(toPath);
   ImageIO.write(image, imageFormat, fos);
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (fos != null) {
    fos.close();
   }
  }
 }

 
 public void drawPoints(String srcImagePath, List pointList, int width,
   int height, Color ovalColor, String imageFormat, String toPath)
   throws IOException {
  FileOutputStream fos = null;
  try {
   //获取源图片
   BufferedImage image = ImageIO.read(new File(srcImagePath));
   //根据xy点坐标绘制连接线
   Graphics2D g2d = image.createGraphics();
   g2d.setColor(ovalColor);
   //填充一个椭圆形
   if (pointList != null) {
    for (int i = 0; i < pointList.size(); i++) {
     Point point = (Point) pointList.get(i);
     int x = (int) point.getX();
     int y = (int) point.getY();
     g2d.fillOval(x, y, width, height);
    }
   }
   fos = new FileOutputStream(toPath);
   ImageIO.write(image, imageFormat, fos);
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (fos != null) {
    fos.close();
   }
  }
 }

 
 public void drawLine(String srcImagePath, int x1, int y1, int x2, int y2,
   Color lineColor, String toPath, String imageFormat)
   throws IOException {
  FileOutputStream fos = null;
  try {
   //获取源图片
   BufferedImage image = ImageIO.read(new File(srcImagePath));
   //根据xy点坐标绘制连接线
   Graphics2D g2d = image.createGraphics();
   g2d.setColor(lineColor);
   g2d.drawLine(x1, y1, x2, y2);
   fos = new FileOutputStream(toPath);
   ImageIO.write(image, imageFormat, fos);
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (fos != null) {
    fos.close();
   }
  }
 }

 
 public void drawPolyline(String srcImagePath, int[] xPoints, int[] yPoints,
   int nPoints, Color lineColor, String toPath, String imageFormat)
   throws IOException {
  FileOutputStream fos = null;
  try {
   //获取源图片
   BufferedImage image = ImageIO.read(new File(srcImagePath));
   //根据xy点坐标绘制连接线
   Graphics2D g2d = image.createGraphics();
   //设置线条颜色
   g2d.setColor(lineColor);
   g2d.drawPolyline(xPoints, yPoints, nPoints);
   //图像写出路径
   fos = new FileOutputStream(toPath);
   ImageIO.write(image, imageFormat, fos);
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (fos != null) {
    fos.close();
   }
  }
 }

 
 public void drawPolylineShowPoints(String srcImagePath, int[] xPoints,
   int[] yPoints, int nPoints, Color lineColor, int width, int height,
   Color ovalColor, String toPath, String imageFormat)
   throws IOException {
  FileOutputStream fos = null;
  try {
   //获取源图片
   BufferedImage image = ImageIO.read(new File(srcImagePath));
   //根据xy点坐标绘制连接线
   Graphics2D g2d = image.createGraphics();
   //设置线条颜色
   g2d.setColor(lineColor);
   //画线条
   g2d.drawPolyline(xPoints, yPoints, nPoints);
   //设置圆点颜色
   g2d.setColor(ovalColor);
   //画圆点
   if (xPoints != null) {
    for (int i = 0; i < xPoints.length; i++) {
     int x = xPoints[i];
     int y = yPoints[i];
     g2d.fillOval(x, y, width, height);
    }
   }
   //图像写出路径
   fos = new FileOutputStream(toPath);
   ImageIO.write(image, imageFormat, fos);
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (fos != null) {
    fos.close();
   }
  }
 }

 
 public void drawPolygon(String srcImagePath, int[] xPoints, int[] yPoints,
   int nPoints, Color polygonColor, String imageFormat, String toPath)
   throws IOException {
  FileOutputStream fos = null;
  try {
   //获取图片
   BufferedImage image = ImageIO.read(new File(srcImagePath));
   //根据xy点坐标绘制闭合多边形
   Graphics2D g2d = image.createGraphics();
   g2d.setColor(polygonColor);
   g2d.drawPolygon(xPoints, yPoints, nPoints);
   fos = new FileOutputStream(toPath);
   ImageIO.write(image, imageFormat, fos);
   g2d.dispose();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (fos != null) {
    fos.close();
   }
  }
 }

 
 public void drawAndAlphaPolygon(String srcImagePath, int[] xPoints,
   int[] yPoints, int nPoints, Color polygonColor, float alpha,
   String imageFormat, String toPath) throws IOException {
  FileOutputStream fos = null;
  try {
   //获取图片
   BufferedImage image = ImageIO.read(new File(srcImagePath));
   //根据xy点坐标绘制闭合多边形
   Graphics2D g2d = image.createGraphics();
   g2d.setColor(polygonColor);
   //设置透明度
   AlphaComposite ac = AlphaComposite.getInstance(
     AlphaComposite.SRC_OVER, alpha);
   g2d.setComposite(ac);
   g2d.fillPolygon(xPoints, yPoints, nPoints);
   fos = new FileOutputStream(toPath);
   ImageIO.write(image, imageFormat, fos);
   g2d.dispose();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (fos != null) {
    fos.close();
   }
  }
 }

 public static void main(String[] args) throws Exception {
  OperateImage imageObj = new OperateImage();
  //图片融合的功能
  
  //画面状的东西
  //        String srcImagePath = "E:/tmp/20130822160831.png";
  //     int[] xPoints = {20,100,160,270,500};
  //     int[] yPoints = {30,150,172,295,615};
  //     int nPoints = 5;
  //     String toPath = "E:/tmp/test.png";
  //     imageObj.drawPolygon(srcImagePath, xPoints, yPoints, nPoints, Color.MAGENTA, "png", toPath); //根据坐标数组绘制多边形
  //    
  //        List pointList = new ArrayList();
  //     Point p1 = new Point(60,80);
  //     pointList.add(p1);
  //     Point p2 = new Point(160,80);
  //     pointList.add(p2);
  //     Point p3 = new Point(60,180);
  //     pointList.add(p3);
  //     Point p4 = new Point(260,180);
  //     pointList.add(p4);
  //     Point p5 = new Point(460,380);
  //     pointList.add(p5);
  //     String srcImagePath = "E:/tmp/20130822160831.png";
  //     int width = 10;
  //     int height = 10;
  //     Color ovalColor = Color.RED;
  //     String imageFormat = "png";
  //     String toPath = "E:/tmp/test1.png";
  //     imageObj.drawPoints(srcImagePath, pointList, width, height, ovalColor, imageFormat, toPath);//画出一组(多个)点

  ;
  //imageObj.cropImage(srcPath, toPath, x, y, width, height,readImageFormat,writeImageFormat);//剪切图片
  //imageObj.resizeImage(srcPath, toPath, 400, 400);//按指定的长宽重置图形大小
  //imageObj.reduceImageByRatio(srcPath, toPath, 3, 3);//按指定长和宽的比例缩小图形
  //imageObj.enlargementImageByRatio(srcPath, toPath, 2, 2);//按指定长和宽的比例放大图形
  //imageObj.reduceImageEqualProportion(srcPath, toPath, 4);//长高等比例缩小
  //imageObj.enlargementImageEqualProportion(srcPath, toPath, 2);//长高等比例放大
  
  //imageObj.mergeBothImage(negativeImagePath, additionImagePath, x, y, toPath); //按指定坐标合并图片
  //imageObj.mergeBothImageTopleftcorner(negativeImagePath, additionImagePath, toPath);//合并到左上角
  //imageObj.mergeBothImageToprightcorner(negativeImagePath, additionImagePath, toPath);//合并到右上角
  //imageObj.mergeBothImageLeftbottom(negativeImagePath, additionImagePath, toPath);//合并到左下角
  //imageObj.mergeBothImageRightbottom(negativeImagePath, additionImagePath, toPath);//合并到右下角
  //imageObj.mergeBothImageCenter(negativeImagePath, additionImagePath, toPath);//合并到正中央
  //imageObj.mergeBothImageTopcenter(negativeImagePath, additionImagePath, toPath);//合并到上边中央
  //imageObj.mergeBothImageBottomcenter(negativeImagePath, additionImagePath, toPath);//合并到下边中央
  //imageObj.mergeBothImageLeftcenter(negativeImagePath, additionImagePath, toPath);//合并到左边中央
  //imageObj.mergeBothImageRightcenter(negativeImagePath, additionImagePath, toPath);//合并到右边中央

  //     String srcImage = "E:/tmp/20130822160831.png";
  //     String toPath = "E:/tmp/test2.png";
  //     String imageFormat = "png";
  //     imageObj.grayImage(srcImage, toPath, imageFormat);//图片灰化

  //     String firstSrcImagePath = "E:/tmp/20130822160831.png";
  //     String secondSrcImagePath = "E:/tmp/mapimg123.png";
  //     String imageFormat = "png";
  //     String toPath = "E:/tmp/test5.png";
  //     //imageObj.joinImagesHorizontal(firstSrcImagePath, secondSrcImagePath, imageFormat, toPath);//横向拼接图片
  //     imageObj.joinImagesHorizontal(firstSrcImagePath, secondSrcImagePath, imageFormat, toPath);//横向拼接图片
  

  

  //     String srcImagePath = "E:/tmp/20130822160831.png";
  //     String appendImagePath = "E:/tmp/20130822160848.png";
  //     float alpha = 1F;
  //     String  font = "宋体";
  //     int fontStyle = Font.PLAIN;
  //     int fontSize = 32;
  //     Color color = Color.RED;
  //     String inputWords = "图片上设置水印文字 ---- 宋体 普通字体 32号字 红色 透明度0.5";
  //     int x = 20;
  //     int y = 40;
  //     String imageFormat = "jpg";
  //     String toPath = "E:/tmp/test8.png";
  //       //imageObj.alphaWords2Image(srcImagePath, alpha, font, fontStyle, fontSize, color, inputWords, x, y, imageFormat, toPath); //设置文字水印
  //     imageObj.alphaImage2Image(srcImagePath, appendImagePath, alpha, x, y, 300, 200, imageFormat, toPath);//设置图片水印

  //     String srcImagePath = "E:/tmp/20130822160831.png";
  //     int[] xPoints = {100,150,200,240,300};
  //     int[] yPoints = {200,60,280,160,100};
  //     int nPoints = 5;
  //     Color lineColor = Color.RED;
  //     String toPath = "E:/tmp/test7.png";
  //     String imageFormat = "png";
  //     imageObj.drawPolyline(srcImagePath, xPoints, yPoints, nPoints, lineColor,toPath, imageFormat);//画折线

  

  

  //    List pointList = new ArrayList();
  //     Point p1 = new Point(60,80);
  //     pointList.add(p1);
  //     Point p2 = new Point(160,80);
  //     pointList.add(p2);
  //     Point p3 = new Point(60,180);
  //     pointList.add(p3);
  //     Point p4 = new Point(260,180);
  //     pointList.add(p4);
  //     Point p5 = new Point(460,380);
  //     pointList.add(p5);
  //     String srcImagePath = "E:/tmp/20130822160831.png";
  //     int width = 10;
  //     int height = 10;
  //     Color ovalColor = Color.RED;
  //     String imageFormat = "png";
  //     String toPath = "E:/tmp/test9.png";
  //     imageObj.drawPoints(srcImagePath, pointList, width, height, ovalColor, imageFormat, toPath);//画出一组(多个)点
  //     

  //     int[] xPoints = {50,100,180,400,600};
  //     int[] yPoints = {200,100,160,300,640};
  //     int nPoints = 5;
  //     Color lineColor = Color.PINK;
  //     String srcImagePath = "E:/tmp/20130822160831.png";
  //     String toPath = "E:/tmp/test11.png";
  //     imageObj.drawPolylineShowPoints(srcImagePath, xPoints, yPoints, nPoints, lineColor, 10, 10, Color.RED, toPath, "png");//画折线并突出显示点
  //

  //     String srcImagePath ="E:/tmp/20130822160831.png";
  //     int[] xPoints ={50,90,180,320,640};
  //     int[] yPoints ={200,300,120,240,360};
  //     int nPoints = 5;
  //     Color polygonColor = Color.PINK;
  //     float alpha = (float) 0.2;
  //     String imageFormat ="png";
  //     String toPath ="E:/tmp/test12.png";
  //     imageObj.drawAndAlphaPolygon(srcImagePath, xPoints, yPoints, nPoints, polygonColor, alpha, imageFormat, toPath);
  
  //100 -- 45844
  //1000 -- 411156
  

  //叠加组合图像
  
  //                                第一次        第二次      第三次
  //100张耗时(毫秒)  --2003   1792   1869           1747         1871         1793
  //1000张耗时(毫秒) --15334   15200  15236         15903   16028  15545
  //10000张耗时(毫秒) --153010  153340   152673       154978    156506   154854                              
  //如果list.size()<=100,则调用此方法,
  //如果list.size()>100,则调用Jmagick的方法。
  
  //String imageFormat = "jpg";
  //String toPath = "D:/test/desk/16a_v1.jpg";
  //imageObj.joinImageListHorizontal(iamgePathList, imageFormat, toPath);
  

  //     String str = "北京\n上海\n广州\n深圳";
  //     System.out.println(str);
  //     String path = "c:/relevantdata.txt";
  //     FileOutputStream fops = new FileOutputStream(path);
  //     fops.write(str.getBytes());
  //     
  //     BufferedReader inputStream = new BufferedReader(new FileReader(new File(path)));
  //     String mrMsg = "";
  //     while((mrMsg = inputStream.readLine())!=null){
  //     System.out.println(mrMsg);
  //     }
 }
 //数量  11   11x6
 //纵向  375  
 //横向  391  3250
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值