ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 여러장의 이미지 세로로 merge 하기
    Java 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");
    }

     

    반응형
Designed by Tistory.