多个图片合成一张图片

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16855077/article/details/90408532

1.准备

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

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

原图:

 切割图:

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

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

 

合成图:

 2.代码

package com.qihui.qxj.utils;

import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

/**
 * 图片拼接 把多张宽度一样的图片拼接成一张大图片
 * 
 * @author Administrator
 *
 */
public class CreateBigImage {

	public static void main(String[] args) {
		// 获取宽度相同的图片
		String img1 = "D:/a/1.jpg";
		String img2 = "D:/a/2.jpg";
		String img3 = "D:/a/3.jpg";
		String[] imgs = new String[] { img1, img2, img3 };
		
		//Image.mergeImage(imgs, 1, "D:/big.jpg");
		// //图片拼接
		merge(imgs, "jpg", "D:/big.jpg");

	}

	/**
	 * Java拼接多张图片
	 * 
	 * @param pics:图片源文件
	 *            (必须要宽度一样),如: String img1 = "D:/imgs/3.jpg"; String img2 =
	 *            "D:/imgs/3.jpg"; String img3 = "D:/imgs/big.jpg"; String[]
	 *            pics = new String[]{img1,img2,img3};
	 * @param type
	 *            :图片输出类型(jpg,png,jpeg...)
	 * @param dst_pic
	 *            :图片输出绝对路径,如 String dst_pic="D:/imgs/big2.jpg";
	 * @return
	 */
	public static boolean merge(String[] pics, String type, String dst_pic) {

		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++) {
			try {
				src[i] = new File(pics[i]);
				images[i] = ImageIO.read(src[i]);
			} catch (Exception e) {
				e.printStackTrace();
				return false;
			}
			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 = 0;
		for (int i = 0; i < images.length; i++) {
			dst_width += images[i].getWidth();
			dst_height = dst_height > images[i].getHeight() ? dst_height : images[i].getHeight();
		}
		System.out.println(dst_width);
		System.out.println(dst_height);

		// 生成新图片
		try {
			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;
	}

}

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

如果你热衷技术,喜欢交流,欢迎加入我们! 

猜你喜欢

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