일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링 업로드
- 로그인 기능
- 스프링 프로젝트
- 로그아웃 기능 구현
- 스프링 이미지
- 스프링 게시판
- 스프링 쇼핑몰
- Bcrypt
- 삭제 구현
- BCrypt 적용
- 스프링 프로젝트 설정
- spring 프로젝트
- 스프링 프로젝트 기본 설정
- 스프링 쇼핑몰 프로젝트
- 쇼핑몰 포트폴리오
- 스프링 파일 삭제
- arraylist
- ResponseEntity
- 스프링 메일 전송
- 정규표현식
- oracle 설치방법
- 쇼핑몰 프로젝트
- 스프링 HikariCP
- 인증번호 전송
- 스프링 포트폴리오
- 파일 업로드
- spring 쇼핑몰
- 스프링 게시판 구현
- 회원가입 기능
- 이미지 출력
- Today
- Total
Kim VamPa
[Spring][쇼핑몰 프로젝트][24] 상품 이미지 업로드(썸네일 생성 및 저장-2) - 5 본문
[Spring][쇼핑몰 프로젝트][24] 상품 이미지 업로드(썸네일 생성 및 저장-2) - 5
Kim VamPa 2021. 5. 14. 10:00프로젝트 Github : https://github.com/sjinjin7/Blog_Project
프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188
목표
ImageIO 코드 보완, Thumbnailator 라이브러리 적용한 썸네일 이미지 생성 및 저장
저번 포스팅에서 ImageIO를 통해 썸네일 이미지 생성 및 저장하는 코드를 작성하였었습니다. 현재 작성된 썸네일 이미지를 생성하는 코드는 크기를 직접 지정해주어야 합니다. 문제는 이미지가 가로가 긴 경우가 있고, 새로가 긴 경우가 있습니다. 일괄적으로 크기를 지정하여 만들어진 썸네일 이미지를 보면 보기가 불편하게 변형된 경우가 발생할 수 있습니다. 이러한 문제점을 보완 할 수 있도록 지정한 비율(ex. 1/2, 1/3)에 따라서 이미지가 축소되도록 코드를 보완할 것입니다.
더불어 thumbnailator 라이브러리를 사용하여 썸네일 이미지 생성 및 저장에 대해서도 알아볼 것입니다.
순서
1. 비율 축소 적용
2. 이미지 생성 및 저장(thumbnailaotor 라이브러리 사용)
1. 비율 축소 적용
원본 이미지 크기를 개발자가 지정한 비율에 따라 축소되도록 보완 하고자 합니다. 먼저 변수 bo_image를 선언 및 초기화 한 코드 다음 칸에서 비율을 저장할 변수를 선언합니다. 비율을 소수점 값으로도 지정할 수 있도록 doumbe 타입을 지정하였습니다.
/* 비율 */
double ratio = 3;
원본 이미지 비율을 위에서 지정한 값 비율로 줄이기 위해선, 원본 이미지 높이 넓이를 위에서 지정한 비율값으로 나누어주면 됩니다. 이러한 작업을 해주기 위해선 원본 이미지의 넓이와 높이를 알아내야 하는데 BuffedImage 클래스의 getWidth(), getHeight() 메서드를 사용하면 됩니다.
원본 이미지인 bo_image 객체에서 getWidt(), getheight() 호출하여 지정한 비율(ratio)로 나누어 주어 변수 width, height에 대입합니다. (ratio가 double 타입이기 때문에 나눈 값이 double 타입이 됩니다. 우리가 파라미터 부여해야 할 넓이, 높이 값은 int 형이어야 하기 때문에 int로 형변한을 해주었습니다.)
/* 비율 */
double ratio = 3;
/*넓이 높이*/
int width = (int) (bo_image.getWidth() / ratio);
int height = (int) (bo_image.getHeight() / ratio);
썸네일 이미지가 가져야 할 넓이와 높이를 얻었기 때문에 해당 값들이 필요로한 파라미터에 인자로 부여합니다. (BufferedImage 생성자, drawImage() 메서드)
BufferedImage bt_image = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
graphic.drawImage(bo_image, 0, 0,width,height, null);
작성한 코드가 정상적으로 동작을 하는지 테스트 해봅니다.
2. 이미지 생성 및 저장(thumbnailaotor 라이브러리 사용)
maven repository에서 thumbnailaotr를 검색하여 해당 라이브러리를 찾은 후 pom.xml에 추가해줍니다.
<!-- thumbnail -->
<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.13</version>
</dependency>
ImageIO 를 통한 썸네일 생성 코드처럼 try catch 문 안에 작성을 하면 됩니다. 썸네일을 생성하는 코드를 아래와 같이 작성을 하면 됩니다.
/* 방법 2 */
File thumbnailFile = new File(uploadPath, "s_" + uploadFileName);
Thumbnails.of(saveFile)
.size(160, 160)
.toFile(thumbnailFile);
목록 1과 같이 비율대로 축소를 원하시면 아래와 같이 작성을 하면 됩니다.
/* 방법 2 */
File thumbnailFile = new File(uploadPath, "s_" + uploadFileName);
BufferedImage bo_image = ImageIO.read(saveFile);
//비율
double ratio = 3;
//넓이 높이
int width = (int) (bo_image.getWidth() / ratio);
int height = (int) (bo_image.getHeight() / ratio);
Thumbnails.of(saveFile)
.size(width, height)
.toFile(thumbnailFile);
ImageIO를 통한 코드 작성 보다 훨씬 간단히 생성할 수 있습니다. thumbnailaotr라이브러리는 이미지 생성에 세부적 설정을 할 수 있도록 몇몇 메서드 들을 제공하고 있습니다. thumbnailator 홈페이지에서 다양한 예시들이 있기 때문에 공식 홈페이지와 API 문서를 참고하여 필요한 설정들을 추가하시면 됩니다.
REFERENCE
DATE
- 2020.05.1
'스프링 프레임워크 > 쇼핑몰 프로젝트' 카테고리의 다른 글
[Spring][쇼핑몰 프로젝트][24] 상품 이미지 업로드(이미지 정보 뷰 반환 - 2) - 6 (12) | 2021.05.18 |
---|---|
[Spring][쇼핑몰 프로젝트][24] 상품 이미지 업로드(이미지 정보 뷰 반환 - 1) - 6 (5) | 2021.05.17 |
[Spring][쇼핑몰 프로젝트][24] 상품 이미지 업로드(썸네일 생성 및 저장) - 5 (2) | 2021.05.13 |
[Spring][쇼핑몰 프로젝트][24] 상품 이미지 업로드(파일 저장) - 4 (1) | 2021.05.11 |
[Spring][쇼핑몰 프로젝트][24] 상품 이미지 업로드(저장 폴더 생성) - 3 (0) | 2021.05.10 |