ffmepg入门学习五 多个图片合成一张图片

1.准备

场景:可能会遇到这样的需求,让我们查看一天每个小时的变化情况,并在一张图片中体现出来,那这就需要利用图片的切割和合成技术。

首先,我们需要把每天的每个小时图片,切割成一张图片,再把24个小时拼接成一个完整的图片

原图:

 切割图:

切割图片,请看https://blog.csdn.net/qq_16855077/article/details/90378173

代码的这两个地方改为12    1.jpg      13     2.jpg    14   3.jpg,生成的图片如下图 

 

合成图:

 2.代码


  
  
  1. package com.qihui.qxj.utils;
  2. import java.awt.image.BufferedImage;
  3. import java.io.File;
  4. import javax.imageio.ImageIO;
  5. /**
  6. * 图片拼接 把多张宽度一样的图片拼接成一张大图片
  7. *
  8. * @author Administrator
  9. *
  10. */
  11. public class CreateBigImage {
  12. public static void main(String[] args) {
  13. // 获取宽度相同的图片
  14. String img1 = "D:/a/1.jpg";
  15. String img2 = "D:/a/2.jpg";
  16. String img3 = "D:/a/3.jpg";
  17. String[] imgs = new String[] { img1, img2, img3 };
  18. //Image.mergeImage(imgs, 1, "D:/big.jpg");
  19. // //图片拼接
  20. merge(imgs, "jpg", "D:/big.jpg");
  21. }
  22. /**
  23. * Java拼接多张图片
  24. *
  25. * @param pics:图片源文件
  26. * (必须要宽度一样),如: String img1 = "D:/imgs/3.jpg"; String img2 =
  27. * "D:/imgs/3.jpg"; String img3 = "D:/imgs/big.jpg"; String[]
  28. * pics = new String[]{img1,img2,img3};
  29. * @param type
  30. * :图片输出类型(jpg,png,jpeg...)
  31. * @param dst_pic
  32. * :图片输出绝对路径,如 String dst_pic="D:/imgs/big2.jpg";
  33. * @return
  34. */
  35. public static boolean merge(String[] pics, String type, String dst_pic) {
  36. int len = pics.length; // 图片文件个数
  37. if (len < 1) {
  38. System.out.println( "pics len < 1");
  39. return false;
  40. }
  41. File[] src = new File[len];
  42. BufferedImage[] images = new BufferedImage[len];
  43. int[][] ImageArrays = new int[len][];
  44. for ( int i = 0; i < len; i++) {
  45. try {
  46. src[i] = new File(pics[i]);
  47. images[i] = ImageIO.read(src[i]);
  48. } catch (Exception e) {
  49. e.printStackTrace();
  50. return false;
  51. }
  52. int width = images[i].getWidth();
  53. int height = images[i].getHeight();
  54. ImageArrays[i] = new int[width * height]; // 从图片中读取RGB
  55. ImageArrays[i] = images[i].getRGB( 0, 0, width, height, ImageArrays[i], 0, width);
  56. }
  57. int dst_width = 0;
  58. int dst_height = 0;
  59. for ( int i = 0; i < images.length; i++) {
  60. dst_width += images[i].getWidth();
  61. dst_height = dst_height > images[i].getHeight() ? dst_height : images[i].getHeight();
  62. }
  63. System.out.println(dst_width);
  64. System.out.println(dst_height);
  65. // 生成新图片
  66. try {
  67. BufferedImage ImageNew = new BufferedImage(dst_width, dst_height, BufferedImage.TYPE_INT_RGB);
  68. int width_i = 0;
  69. for ( int i = 0; i < images.length; i++) {
  70. ImageNew.setRGB(width_i, 0, images[i].getWidth(), dst_height, ImageArrays[i], 0, images[i].getWidth());
  71. width_i += images[i].getWidth();
  72. }
  73. File outFile = new File(dst_pic);
  74. ImageIO.write(ImageNew, type, outFile); // 写图片
  75. } catch (Exception e) {
  76. e.printStackTrace();
  77. return false;
  78. }
  79. return true;
  80. }
  81. }

到这里,图片的合成就完成勒。

转载自:https://blog.csdn.net/qq_16855077/article/details/90408532

发布了42 篇原创文章 · 获赞 115 · 访问量 1万+

1.准备

猜你喜欢

转载自blog.csdn.net/luoyong_blog/article/details/104497537