개발일지/TIL
[230702] Java 이미지 리사이징 방법
ironprayer
2023. 7. 2. 20:07
이유
인생퍼즐 프로젝트에서 이미지 리사이징 기능을 추가하기로 했다. 저장 공간을 절약하고 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);
}