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");
}
반응형