You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Java中将多张图片垂直拼接为一张图片

解决图片垂直合并的问题

嘿,我看你这段代码的逻辑是按横向排列+自动换行来写的,这自然达不到你要的垂直堆叠效果~ 咱们来调整一下思路,核心要做这两件事:

  • 先算出最终合成图的尺寸:宽度取所有图片里最宽的那个,高度是所有图片高度的总和(如果需要间距可以额外加)
  • 绘制时固定x坐标为0,每次绘制完一张图就把y坐标往下移对应图片的高度

修正后的代码示例

import javax.imageio.ImageIO;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.List;

public class ImageVerticalMerge {
    public static void main(String[] args) throws IOException {
        List<String> imgFiles = List.of("img1.jpg", "img2.png", "img3.bmp"); // 替换成你的图片路径列表
        
        // 第一步:计算合成图的宽度和总高度
        int maxWidth = 0;
        int totalHeight = 0;
        BufferedImage[] images = new BufferedImage[imgFiles.size()];
        
        // 先加载所有图片,同时统计尺寸
        for (int i = 0; i < imgFiles.size(); i++) {
            images[i] = ImageIO.read(new File(imgFiles.get(i)));
            maxWidth = Math.max(maxWidth, images[i].getWidth());
            totalHeight += images[i].getHeight();
            // 如果需要给图片之间加间距,比如10像素,就改成 totalHeight += images[i].getHeight() + 10;
        }
        
        // 第二步:创建合成图
        BufferedImage result = new BufferedImage(maxWidth, totalHeight, BufferedImage.TYPE_INT_RGB);
        Graphics g = result.getGraphics();
        
        // 第三步:垂直绘制所有图片
        int currentY = 0;
        for (BufferedImage bi : images) {
            // 把图片绘制在当前Y位置,X设为0(如果要水平居中,可以改成 (maxWidth - bi.getWidth())/2)
            g.drawImage(bi, 0, currentY, null);
            currentY += bi.getHeight();
            // 如果加了间距,这里也要同步:currentY += bi.getHeight() + 10;
        }
        
        // 释放资源并保存合成图
        g.dispose();
        ImageIO.write(result, "JPG", new File("merged_vertical.jpg"));
    }
}

关键调整点说明

  • 先预加载所有图片并统计尺寸:避免重复读取文件,同时确保合成图的尺寸完全适配
  • 绘制时固定x=0,每次更新currentY:保证图片从上到下垂直堆叠
  • 可选优化:如果想要图片水平居中,把绘制的x坐标改成(maxWidth - bi.getWidth())/2即可,这样窄图不会靠左对齐

内容的提问来源于stack exchange,提问作者Lez

火山引擎 最新活动