본문 바로가기

개발일지/TIL

[230702] Java 이미지 리사이징 방법

이유

인생퍼즐 프로젝트에서 이미지 리사이징 기능을 추가하기로 했다. 저장 공간을 절약하고 Front에서 이미지를 불러올 때 더 빨리 불러올 수 있도록 하기 위해서였다.

사전 조사

이미지 리사이징을 하기 위해서 방법을 찾아봤다. 우리는 원하는 기능이 있으며 빠르게 처리할 수 있는가를 기준을 세워서 말이다. 잘 작성된 글을 찾아서 쉽게 결정할 수 있었다. 이후 퍼포먼스의 문제가 없다면 결정이 바뀌지는 않을 것 같다. 
📌 이미지 리사이징 라이브러리와 속도 측정 결과
Marvin – 361ms
Imgscalr – 143ms
Thumbnailator –  547ms
java.awt.Graphics2D – 34ms
Image.getScaledInstance() – 235ms
참고 사이트 : https://www.baeldung.com/java-resize-image

코드 작성

✅ 속도가 가장 빠르다고 나온 java.awt.Graphics2D 라이브러리를 사용하기로 했다.

 

public void resize(int height, int width) throws IOException {
    var original = ImageIO.read(new ByteArrayInputStream(bytes));
    var resizedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

    Graphics2D graphics2D = resizedImage.createGraphics();
    graphics2D.drawImage(original, 0, 0, width, height, null);
    graphics2D.dispose();

    var newFileName = height + fileName;
    var newBytes = bufferedImageToBytes(resizedImage);
 }