使用前把所需要的图片转移到F盘imgJoin文件夹下,此代码是将上述文件夹内的图片进行竖排拼接,需要每张图片的宽度相同
[Java] 纯文本查看 复制代码 public class GetPictures {
public static List<String> getPic(String path){
File dir = new File(path);
List<String> fileList = List.of(dir.list()); //获取指定文件夹中所有文件的文件名
List<String> imgs = new ArrayList<>();
int j = 0;
//筛选出图片
for(int i = 0; i < fileList.size(); i++) {
String sPath = path + "/" + fileList.get(i);
File pic = new File(sPath);
//System.out.println(pic);
BufferedImage sourceImg;
try {
sourceImg = ImageIO.read(new FileInputStream(pic));
System.out.println(fileList.get(i));
if (sourceImg != null && !fileList.get(i).equals("imgJoinFinal.jpg")) {
imgs.add(sPath);
j++;
//System.out.println(fileList.get(i));//打印出符合要求的图片文件名
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return imgs;
}
}
[Java] 纯文本查看 复制代码 public class JoinMoreImage {
public static boolean merge(List<String> imgs, String type, String dst_pic) {
//获取需要拼接的图片张数
int len = imgs.size();
//判断长度是否大于0
if (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(imgs.get(i));
//System.out.println(src[i]);
images[i] = ImageIO.read(src[i]);
} catch (Exception e) {
e.printStackTrace();
return false;
}
int width = images[i].getWidth();
int height = images[i].getHeight();
// 从图片中读取RGB 像素
ImageArrays[i] = new int[width * height];
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;
}
// 生成新图片
try {
dst_width = images[0].getWidth();
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;
}
}
[Java] 纯文本查看 复制代码 public class Main {
public static void main(String[] args) {
//图片路径
String path = "F:/imgJoin/";
//输入图片地址
//String[] imgs={"F:/test/10001.jpg","F:/test/10002.jpg"};
//调用方法生成图片路径
GetPictures getPictures = new GetPictures();
List<String> imgs = getPictures.getPic(path);
//System.out.println(imgs.get(4));
//调用方法生成图片
JoinMoreImage joinMoreImage = new JoinMoreImage();
joinMoreImage.merge(imgs,"jpg","F:/imgJoin/imgJoinFinal.jpg");
}
} |