이미지 용량이 너무 크거나, 썸네일이 필요한 경우 사용할 수 있는 라이브러리
Thumbnails.of 사용 방법을 알아보려고 합니다.
1. import 라이브러리
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.name.Rename;
import net.coobird.thumbnailator.geometry.Positions;
import java.io.File;
- Thumbnails.of 사용시 필요한 라이브러리를 import 합니다.
2. 경로 및 파일 가져오기
String root = request.getSession().getServletContext().getRealPath("/");
String originalFilename = "samle_01.png";
File destinationDir = new File(root + "/thumbnails");
if( !destinationDir.exists() ) {
// 폴더가 존재하지 않으면 폴더 생성
destinationDir.mkdirs();
}
- 현재 root 경로 저장 변수를 생성했습니다.
- 예제로 올린 이미지 파일 명을 originalFilename 변수에 저장했습니다.
- File 객체를 생성하여 root 하위 경로에 thumbnails 디렉토리가 있는지 확인합니다.
- if문을 사용해서 destinationDir.exists()가 false인 경우 mkdirs()를 실행하여 디렉토리를 생성합니다.
3. 잘라서 사이즈 조정하기
Thumbnails.of(new File(root + "/thumbnails" + File.separator + originalFilename))
.sourceRegion(Positions.CENTER, 100, 200)
.size(100, 200)
.toFiles(destinationDir, Rename.NO_CHANGE);
- Thumbnails.of를 사용한 코드입니다.
- root/thumbnails/samle_01.png 파일 객체를 생성합니다.
- sourceRegion을 사용해서 이미지를 잘라줍니다.
- Positions.CENTER을 설정하면 이미지의 가운데를 기점으로 자르겠다는 뜻입니다.
- 100은 가로 폭, 200은 세로 폭입니다.
- 따라서 이미지 가운데를 기준으로 100px, 200px 만큼 자르는 코드입니다.
- 그렇게 잘라진 이미지를 size를 사용하여 크기를 조정합니다.
- 위와 같이 100은 가로 폭, 200은 세로 폭입니다.
- 마지막으로 파일을 2번에서 설정한 디렉토리에 저장해줍니다.
- Rename.NO_CHANGE로 설정하여 이미지 명을 변경하지않고 저장했습니다.
4. 사이즈만 조정하기
Thumbnails.of(new File(root + "/thumbnails" + File.separator + originalFilename))
.size(100, 200)
.toFiles(destinationDir, Rename.NO_CHANGE);
- 위의 코드에서 sourceRegion만 빠진 코드입니다.
- 가로 길이를 기준으로 사이즈를 조정하게 됩니다.
- 이때, 이미지의 비율은 유지됩니다.
- 예를 들어, 사이즈가 가로 200, 세로 500인 이미지를 적용하면 가로 100, 세로 250인 이미지가 됩니다.
5. 이미지의 사이즈 확인 후 실행하기
5.1 import 라이브러리
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
5.2 라이브러리 사용 및 조건문 추가
File thumbnail = new File(root + "/thumbnails" + File.separator + originalFilename );
BufferedImage originalImage = ImageIO.read(thumbnail);
int width = originalImage.getWidth();
int height = originalImage.getHeight();
if( width > 100 || height > 200) {
Thumbnails.of(thumbnail)
.size(100, 200)
.toFiles(destinationDir, Rename.NO_CHANGE);
}
- 이미지를 버퍼(BufferedImage)에 넣어서 사이즈를 받아옵니다.
- 가로는 getWidth(), 세로는 getHeight()로 받아오면 됩니다.
- 조건문을 넣어서 만약 width가 100보다 크거나 height가 200보다 큰 경우에만 Thumbnails.of를 실행합니다.
이상으로 java Thumbnails.of 사용 방법에 대해 알아보았습니다.
'Web Developer's Story > JAVA' 카테고리의 다른 글
[JAVA/JSP] 이니시스 모바일 결제 망취소 코드 (0) | 2021.02.17 |
---|---|
[JAVA] 반복문에서 continue, break 차이 (2) | 2020.09.10 |
[JAVA] String 문자열에서 배열, 코드 한 줄로 바꾸기 (0) | 2020.08.30 |
[JAVA] Apache POI를 이용해 Excel 출력하기 (0) | 2020.08.26 |
[JAVA] 반복문 사용법 총 정리 - while문, do-while문 (0) | 2020.08.21 |