티스토리 뷰

개요

  • Java 진영은 javax.imageio 패키지명으로 제공되는 Java Image I/O API를 이용하여 리사이즈, 크롭 등의 이미지 처리를 할 수 있다. 이를 이용하여 Java 6 이상의 경우 웹에서 가장 많이 사용되는 JPEG, PNG, GIF(BMP 포함) 이미지를 자유롭게 처리할 수 있다. 하지만 단순히 이미지에 대한 썸네일만 하고 싶다면? Image IO의 사용법은 너무 번거롭다. 이번 글에서는 블로그 글로 쓰기 민망할 정도로 사용법이 쉬운 이미지 썸네일 생성 라이브러리인 Thumbnailator를 소개하고자 한다.

라이브러리 의존성 추가

Gradle 빌드 환경이라면 /build.gradle 파일에 아래와 같이 Thumbnailator 라이브러리를 추가한다.

dependencies {
    compile group: 'com.twelvemonkeys.imageio', name: 'imageio', version: '3.6', ext: 'pom'
    compile group: 'org.imgscalr', name: 'imgscalr-lib', version: '4.2'
    compile group: 'net.coobird', name: 'thumbnailator', version: '0.4.11'
}
  • TwelveMonkeys ImageIOImageIO의 확장 플러그인 성격으로 BMP, JPEG, JPEG-2000, PNM, PSD, TIFF, HDR, IFF, PCX, PICT, SGI, TGA, ICO, SVG 등의 다양한 이미지 포맷을 지원한다.

읽기 가능한 이미지 형식 목록 조회

  • 현재 읽기 가능한 이미지 형식 목록을 조회하는 방법은 아래와 같다. (TwelveMonkeys ImageIO 확장 라이브러리 적용에 따른 추가 이미지 형식은 반영되지 않는 점에 유의한다. 즉, 확장 라이브러리가 적용되어 있으면 해당 이미지 형식 또한 읽기가 가능하다.)
// JPG, jpg, tiff, bmp, BMP, gif, GIF, WBMP, png, PNG, JPEG, tif, TIF, TIFF, jpeg, wbmp
ImageIO.getWriterFormatNames()

이미지 썸네일 생성하기

  • 이미지 썸네일을 생성하는 방법은 아래와 같다. 황당할 정도로 더 이상의 설명이 필요 없을 정도이다. 놀라운 것은 빠른 속도로 고품질의 썸네일을 생성한다는 것이다.
// 가장 간단한 버전
val image = File("D:/image.jpg")
val thumbnail = File("D:/thumbnail.png")
if (image.exists()) {
    thumbnail.parentFile.mkdirs()
    Thumbnails.of(image).size(190, 150).outputFormat("png").toFile(thumbnail)
}

// 대상 이미지 파일을 생성하는 대신 BufferedImage 객체를 반환
val target: BufferedImage = Thumbnails
    .of(originalFile)
    .width(width)
    .apply { if (height != null) this.height(height) }
    .asBufferedImage()
  • 만약 원본 파일이 지원하지 않는 형식일 경우 net.coobird.thumbnailator.tasks.UnsupportedFormatException 예외를 발생시킨다.
// 심화된 버전, 다양한 옵션을 적용하여 리사이즈할 수 있다.
val src: BufferedImage = ImageIO.read(File("D:\\src.jpg"))
val processed: BufferedImage = Scalr.resize(src, Scalr.Method.ULTRA_QUALITY, Scalr.Mode.AUTOMATIC, 720, 480, Scalr.OP_BRIGHTER)
ImageIO.write(processed, "JPG", FileOutputStream("D:\\processed.jpg"))

참고 글

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함