1.通过 ImageIO#read 读取图片文件为 java.awt.image.BufferedImage
2.合并工具类
/**
* 图片合并(宽高以第一张图片为基准)
* <p>
* 如果水平方向合并,则高度必须相等;如果是垂直方向合并,宽度必须相等。
*
* @param images - 待合并图集
* @param isVertical - 是否垂直布局(可选值:垂直/水平)
* @return 返回合并后的BufferedImage对象
*/
public static BufferedImage mergeImages(List<BufferedImage> images, boolean isVertical) {
if (images == null || images.isEmpty()) {
return null;
}
int maxWidth = images.stream().mapToInt(BufferedImage::getWidth).max().orElse(200);
int maxHeight = images.stream().mapToInt(BufferedImage::getHeight).max().orElse(200);
// 创建合并后的图像,确保使用透明色彩模型
BufferedImage mergedImage;
if (isVertical) {
int totalHeight = images.stream().mapToInt(BufferedImage::getHeight).sum();
mergedImage = new BufferedImage(maxWidth, totalHeight, BufferedImage.TYPE_INT_ARGB);
} else {
int totalWidth = images.stream().mapToInt(BufferedImage::getWidth).sum();
mergedImage = new BufferedImage(totalWidth, maxHeight, BufferedImage.TYPE_INT_ARGB);
}
Graphics2D g2d = mergedImage.createGraphics();
int curDrawX = 0, curDrawY = 0;
for (BufferedImage image : images) {
g2d.drawImage(image, curDrawX, curDrawY, null);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
if (isVertical) {
curDrawY += image.getHeight();
} else {
curDrawX += image.getWidth();
}
}
g2d.dispose();
return mergedImage;
}
已解决透明背景色,合并后变为黑色背景的问题,核心代码为:
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
将两个图像绘制到合并后的图像上,确保透明通道正确处理。