用java 对图片的截图、拼接、合成处理、添加文字

[java]

  1. import java.awt.Graphics2D;
  2. import java.awt.Rectangle;
  3. import java.awt.image.BufferedImage;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.InputStream;
  7. import java.util.Iterator;
  8. import javax.imageio.ImageIO;
  9. import javax.imageio.ImageReadParam;
  10. import javax.imageio.ImageReader;
  11. import javax.imageio.stream.ImageInputStream;
  12. /**
  13.  * @Description:图片处理工具
  14.  * @author:liuyc
  15.  * @time:2016年5月27日 上午10:18:00
  16.  */
  17. public class ImageHandleHelper {
  18.     /**
  19.      * @Description:截图
  20.      * @author:liuyc
  21.      * @time:2016年5月27日 上午10:18:23
  22.      * @param srcFile源图片、targetFile截好后图片全名、startAcross 开始截取位置横坐标、StartEndlong开始截图位置纵坐标、width截取的长,hight截取的高
  23.      */
  24.     public static void cutImage(String srcFile, String targetFile, int startAcross, int StartEndlong, int width,
  25.             int hight) throws Exception {
  26.         // 取得图片读入器
  27.         Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("jpg");
  28.         ImageReader reader = readers.next();
  29.         // 取得图片读入流
  30.         InputStream source = new FileInputStream(srcFile);
  31.         ImageInputStream iis = ImageIO.createImageInputStream(source);
  32.         reader.setInput(iis, true);
  33.         // 图片参数对象
  34.         ImageReadParam param = reader.getDefaultReadParam();
  35.         Rectangle rect = new Rectangle(startAcross, StartEndlong, width, hight);
  36.         param.setSourceRegion(rect);
  37.         BufferedImage bi = reader.read(0, param);
  38.         ImageIO.write(bi, targetFile.split("\\.")[1], new File(targetFile));
  39.     }
  40.     /**
  41.      * @Description:图片拼接 (注意:必须两张图片长宽一致哦)
  42.      * @author:liuyc
  43.      * @time:2016年5月27日 下午5:52:24
  44.      * @param files 要拼接的文件列表
  45.      * @param type1  横向拼接, 2 纵向拼接
  46.      */
  47.     public static void mergeImage(String[] files, int type, String targetFile) {
  48.         int len = files.length;
  49.         if (len < 1) {
  50.             throw new RuntimeException("图片数量小于1");
  51.         }
  52.         File[] src = new File[len];
  53.         BufferedImage[] images = new BufferedImage[len];
  54.         int[][] ImageArrays = new int[len][];
  55.         for (int i = 0; i < len; i++) {
  56.             try {
  57.                 src[i] = new File(files[i]);
  58.                 images[i] = ImageIO.read(src[i]);
  59.             } catch (Exception e) {
  60.                 throw new RuntimeException(e);
  61.             }
  62.             int width = images[i].getWidth();
  63.             int height = images[i].getHeight();
  64.             ImageArrays[i] = new int[width * height];
  65.             ImageArrays[i] = images[i].getRGB(00, width, height, ImageArrays[i], 0, width);
  66.         }
  67.         int newHeight = 0;
  68.         int newWidth = 0;
  69.         for (int i = 0; i < images.length; i++) {
  70.             // 横向
  71.             if (type == 1) {
  72.                 newHeight = newHeight > images[i].getHeight() ? newHeight : images[i].getHeight();
  73.                 newWidth += images[i].getWidth();
  74.             } else if (type == 2) {// 纵向
  75.                 newWidth = newWidth > images[i].getWidth() ? newWidth : images[i].getWidth();
  76.                 newHeight += images[i].getHeight();
  77.             }
  78.         }
  79.         if (type == 1 && newWidth < 1) {
  80.             return;
  81.         }
  82.         if (type == 2 && newHeight < 1) {
  83.             return;
  84.         }
  85.         // 生成新图片
  86.         try {
  87.             BufferedImage ImageNew = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
  88.             int height_i = 0;
  89.             int width_i = 0;
  90.             for (int i = 0; i < images.length; i++) {
  91.                 if (type == 1) {
  92.                     ImageNew.setRGB(width_i, 0, images[i].getWidth(), newHeight, ImageArrays[i], 0,
  93.                             images[i].getWidth());
  94.                     width_i += images[i].getWidth();
  95.                 } else if (type == 2) {
  96.                     ImageNew.setRGB(0, height_i, newWidth, images[i].getHeight(), ImageArrays[i], 0, newWidth);
  97.                     height_i += images[i].getHeight();
  98.                 }
  99.             }
  100.             //输出想要的图片
  101.             ImageIO.write(ImageNew, targetFile.split("\\.")[1], new File(targetFile));
  102.         } catch (Exception e) {
  103.             throw new RuntimeException(e);
  104.         }
  105.     }
  106.     /**
  107.      * @Description:小图片贴到大图片形成一张图(合成)
  108.      * @author:liuyc
  109.      * @time:2016年5月27日 下午5:51:20
  110.      */
  111.     public static final void overlapImage(String bigPath, String smallPath, String outFile) {
  112.         try {
  113.             BufferedImage big = ImageIO.read(new File(bigPath));
  114.             BufferedImage small = ImageIO.read(new File(smallPath));
  115.             Graphics2D g = big.createGraphics();
  116.             int x = (big.getWidth() - small.getWidth()) / 2;
  117.             int y = (big.getHeight() - small.getHeight()) / 2;
  118.             g.drawImage(small, x, y, small.getWidth(), small.getHeight(), null);
  119.             g.dispose();
  120.             ImageIO.write(big, outFile.split("\\.")[1], new File(outFile));
  121.         } catch (Exception e) {
  122.             throw new RuntimeException(e);
  123.         }
  124.     }

[java]

    1.    /**
    2. * @Description:给图片添加文字信息
    3. <span style="white-space:pre">    </span> * @author:liuyc
    4. <span style="white-space:pre">    </span> * @time:2016年5月31日 上午10:23:36
    5. <span style="white-space:pre">    </span> */
    6. <span style="white-space:pre">    </span>public static void drawStringForImage(String filePath, String content, Color contentColor, float qualNum,String targetFile) {
    7. <span style="white-space:pre">        </span>ImageIcon imgIcon = new ImageIcon(filePath);
    8. <span style="white-space:pre">        </span>Image theImg = imgIcon.getImage();
    9. <span style="white-space:pre">        </span>int width = theImg.getWidth(null) == -1 ? 200 : theImg.getWidth(null);
    10. <span style="white-space:pre">        </span>int height = theImg.getHeight(null) == -1 ? 200 : theImg.getHeight(null);
    11. <span style="white-space:pre">        </span>BufferedImage bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    12. <span style="white-space:pre">        </span>Graphics2D g = bimage.createGraphics();
    13. <span style="white-space:pre">        </span>g.setColor(contentColor);
    14. <span style="white-space:pre">        </span>g.setBackground(Color.red);
    15. <span style="white-space:pre">        </span>g.drawImage(theImg, 00null);
    16. <span style="white-space:pre">        </span>// 设置字体、字型、字号
    17. <span style="white-space:pre">        </span>g.setFont(new Font(null, Font.BOLD, 13));
    18. <span style="white-space:pre">        </span>// 写入文字
    19. <span style="white-space:pre">        </span>g.drawString(content, 10, height / 2);
    20.         g.dispose();
    21. FileOutputStream out =null;
    22. try {
    23. out = new FileOutputStream(targetFile);
    24. JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    25. JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
    26. param.setQuality(qualNum, true);
    27. encoder.encode(bimage, param);
    28. out.flush();
    29. catch (Exception e) {
    30. throw new RuntimeException(e);
    31. }finally {
    32. if (out != null) {
    33. try {
    34. out.close();
    35. catch (IOException e) {
    36. out = null;
    37. throw new RuntimeException(e);
    38. }
    39. }
    40. }
    41. }
    42. }

作者/北极熊不在北极

本文来源:https://blog.csdn.net/u010197591/article/details/51536030


如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。