工具
package pro.agris.branch.querymachine.util;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.List;
public class ImageVerticalConcatenate {
public static BufferedImage concatenate(List<BufferedImage> images) throws IOException {
int height = 0, width = 0;
for (BufferedImage image : images) {
width = image.getWidth();
height += image.getHeight();
}
BufferedImage destImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = destImage.createGraphics();
int y = 0;
for (BufferedImage image : images) {
g2d.drawImage(image, 0, y, null);
y += image.getHeight();
}
g2d.dispose();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(destImage, "png", outputStream);
String base64Image = Base64.getEncoder().encodeToString(outputStream.toByteArray());
System.out.println("base64Image = " + base64Image);
return destImage;
}
private static String concatTwo(String base64Image1, String base64Image2) throws IOException {
byte[] imageBytes1 = Base64.getDecoder().decode(base64Image1);
byte[] imageBytes2 = Base64.getDecoder().decode(base64Image2);
BufferedImage img1 = ImageIO.read(new ByteArrayInputStream(imageBytes1));
BufferedImage img2 = ImageIO.read(new ByteArrayInputStream(imageBytes2));
if (img1.getWidth() != img2.getWidth()) {
throw new IllegalArgumentException("Images should have the same width");
}
BufferedImage concatenatedImg = new BufferedImage(img1.getWidth(), img1.getHeight() + img2.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = concatenatedImg.createGraphics();
g2d.drawImage(img1, 0, 0, null);
g2d.drawImage(img2, 0, img1.getHeight(), null);
g2d.dispose();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(concatenatedImg, "png", outputStream);
String base64Image = Base64.getEncoder().encodeToString(outputStream.toByteArray());
System.err.println(base64Image);
return base64Image;
}
public static String encodeFileToBase64(File file) {
try (FileInputStream fileInputStream = new FileInputStream(file)) {
byte[] fileBytes = new byte[(int) file.length()];
fileInputStream.read(fileBytes);
return Base64.getEncoder().encodeToString(fileBytes);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) throws Exception {
List<String> imagePaths = Arrays.asList("D:\\zhuomian_copy\\zhuomian\\测试图\\11.png", "D:\\zhuomian_copy\\zhuomian\\测试图\\11.png", "D:\\zhuomian_copy\\zhuomian\\测试图\\11.png");
List<BufferedImage> imagesNew=new ArrayList<>();
for (String imagePath : imagePaths) {
imagesNew.add(ImageIO.read(new File(imagePath)));
}
BufferedImage concatenatedImage = concatenate(imagesNew);
ImageIO.write(concatenatedImage, "PNG", new File("D:\\zhuomian_copy\\zhuomian\\测试图\\test\\concatenated.png"));
File imageFile1 = new File("C:\\Users\\Administrator\\Desktop\\下载_看图王.png");
File imageFile2 = new File("C:\\Users\\Administrator\\Desktop\\下载_看图王.png");
concatTwo(encodeFileToBase64(imageFile1 ),encodeFileToBase64(imageFile2 ));
}
}