Java

Java 여러장의 이미지 세로로 merge 하기

HanSeokhyeon 2022. 4. 12. 16:43
반응형

Java단에서 여러장의 이미지를 세로로 길게 merge 해야하는 상황이 있다.

이미지 로드 & 합친 이미지 width, height 구하기

List<BufferedImage> images = new ArrayList<>();
int max_width = 0;
int max_height = 0;
for (String imageUrl : imageUrls) {
    try {
        BufferedImage originalImage = ImageIO.read(new URL(imageUrl));
        max_height += originalImage.getHeight();
        max_width = Math.max(originalImage.getHeight(), max_width);
        images.add(originalImage);
    } catch (IOException e) {
        log.error("Image processing error", e);
    }
}

 

이미지를 load하면서 세로 길이는 더해주고 가로 길이는 비교하여 가장 큰 값으로 업데이트한다.

 

새로운 이미지에 기존 이미지 그리기

BufferedImage mergedImage = new BufferedImage(maxWidth, maxHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = (Graphics2D) mergedImage.getGraphics();

int y = 0;
for (BufferedImage image : subImageListInfo.getImages()) {
    graphics.drawImage(image, 0, y, null);
    y += image.getHeight();
}
graphics.dispose();

 

이미지 리스트에서 이미지를 하나씩 꺼내서 그린다. y에 이미지의 높이를 더하면서 그림으로써 세로로 길게 붙이는 효과를 볼 수 있다.

 

저장하기

try {
    ImageIO.write(newImage, "jpeg", new File("/tmp/test.jpeg"));
} catch (IOException e) {
    log.error("Fail to save");
}

 

반응형