场景:可能会遇到这样的需求,让我们查看一天每个小时的变化情况,并在一张图片中体现出来,那这就需要利用图片的切割和合成技术。
首先,我们需要把每天的每个小时图片,切割成一张图片,再把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;
-
}
-
-
}
到这里,图片的合成就完成勒。
转载自:https://blog.csdn.net/qq_16855077/article/details/90408532