썸네일 이미지 생성 및 업로드 Thumbnailator

일단 Thumbnailator 이라는 라이브러리가 필요합니다.

자바에서 꽤 유명한 썸네일 생성용 라이브러리 로 확인이 됩니다.

 

<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.20</version>
</dependency>

 

다음과 같이 maven 설정을 해주고 불러와줍니다.

 

private static final int PROFILE_THUMB_SIZE = 200;
private static final double PROFILE_QUALITY = 0.8;

String originalFilename = file.getOriginalFilename();
String fileExtension = Objects.requireNonNull(originalFilename).substring(
        originalFilename.lastIndexOf(".")
);
            
File image = ImageIO.read(file.getInputStream()) // 이미지 버퍼로 저장
int width = PROFILE_THUMB_SIZE;					 // width
int height = PROFILE_THUMB_SIZE;				 // height
double quality = PROFILE_QUALITY;				 // 이미지 퀄리티 ( 0 ~ 1.0 )
String subDirectory = "profile";				 // 서브 폴더	
String thumbDirectory = "thumb";				 // 썸네일 폴더
String newFilename = UUID.randomUUID().toString() + fileExtension; // 파일명

// "/uploads/profile/thumb/f68da6e2-04a9-401f-bc55-9ea1cdca4aca.jpg"
String outputFile = this.fileStorageLocation.
            	resolve(subDirectory).
                resolve(thumbDirectory).
                resolve(newFilename);

Thumbnails.of(image)
        .size(width, height)
        .crop(Positions.CENTER) // 중앙 크롭을 하겠다
        .outputQuality(quality) // 품질 ( 0 ~ 1.0 )
        .toFile(outputFile); //

위와 같이 설정 해주고, 썸네일 만들어주면 자동으로 위 경로를 따라 썸네일 이미지가 만들어 집니다.

실제 5.51MB 의 용량이 큰 이미지로 테스트 해보겠습니다.

 

1920 x 1920 으로 만들고 quality 0.85로 맞추면  514 KB 까지 줄어들고

 

프로필 이미지 처럼 200x200 사이즈에 quality 0.8 하게되면 10.2 KB까지 용량이 줄어들게 됩니다.