웹에다가 이미지를 보여줘야 하는데 해당 이미지 파일의 확장자가 *.TIF로 되어있다.
그냥 구글 검색해서 나오는 이미지 변환 프로그램을 사용해서 진행하면 간단하겠지만, 한 두가지만 있는게 아니라
보여주어야 할 모든 이미지가 해당 확장자로 되어있기 때문에 이미지 한개 씩 노가다를 할 수는 없는 상황 . .
웹에서 이미지를 출력하기까지의 방식은
1. 게시판 형태의 여러 글 항목들이 나열되어 있음.
2. 해당 게시글 조회를 누르면 미니 창이 뜸
3. 이미지 파일명들을 저장하고 있는 DB에 접근하면서 선택했던 게시글의 이미지 이름을 불러옴
4. 그 이미지 이름에 ".TIF" 문자열을 붙이고 img src 속성에다가 때래녛기
인데 TIF 형식의 파일은 이상하게 웹에 안보이더라 . .
알고보니 일반적인 브라우저는 구닥다리 확장자인 TIF 를 지원하지 않음
그래서 다 변환 때려버려야 됨.
그래서 내가 진행한 변환 방식이 몇가지가 있음
1. 클라이언트 내에서 일시적인 일회성 변환 (JavaScript)
- 말그대로 HTML, JSP 코드 내에 있는 img 태그를 스크립트 코드 내에서 불러와서 TIF -> jpg로 바로 변환해주고 Base64
인코딩 후 리턴
- 리턴된 Base64 파일을 기존 img src 속성에 때려넣기
1) 해당 방법은 JavaScript의 "canvas" 태그의 특성을 사용하면 된다.
=> canvas 태그는 이미지를 그릴뿐만 아니라 변환까지 가능하다.
=> canvas 태그를 임시적으로 생성하여 거기다가 TIF 이미지를 넣고, 변환을 때려서 Base64 인코딩 ㄱㄱ 했지만
JavaScript의 canvas 요소는 기본적으로 .tif 이미지를 직접 지원하지 않습니다. canvas 요소는 이미지를 그리는 용도로 사용되며, 주로 JPEG, PNG, GIF 등의 이미지 포맷을 지원합니다.
출처: ChatGPT실패
2. 이미지 파일명을 서버로 보내서 Java 단에서 변환 처리
- 말그대로 이미지의 파일명만 서버로 보내서 Java에서 해당 이미지가 있는 (경로 이름 + 파일명) 문자열 합치기를 해준
String을 가지고 변환 때려서 Base64 인코딩 후 JSON 리턴
- Java에서 TIF 변환을 지원하는 "JAI" 라이브러리가 있어야 함
1) JAI 라이브러리 설치 방법
=> JAI 라이브러리는 "Java Advanced Imaging" 의 약자로 오라클에서 제공하는 라이브러리 입니다.
=> https://www.oracle.com/java/technologies/java-archive-downloads-java-client-downloads.html에 접속하여
jai-1_1_2_01-windows-i586-jar.zip를 다운받고 압축 풀고 jai_codec.jar jai_core.jar 두 파일을 WEB-INF/lib에 넣어
주세요
2) JAI로 TIF -> JPG로 변환하는 코드
본격적으로 변환 코드를 작성함.
RenderedOp image = null;
String imagePath = "";
String convImagePath = "";
imagePath = "C:\\Users\\eclipse-workspace\\project\\src\\main\\webapp\\assets\\images\\" + param.get("img");
convImagePath = imagePath.replace("TIF", "jpg");
image = JAI.create("fileload", imagePath);
FileOutputStream fos = new FileOutputStream(convImagePath);
JAI.create("encode", image, fos, "JPEG", null);
fos.close();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
File file = new File(convImagePath);
BufferedImage convImage = ImageIO.read(file);
ImageIO.write(convImage, "JPEG", baos);
String base64Image = Base64.getEncoder().encodeToString(baos.toByteArray());
1. image = JAI.create("fileload", imagePath)
=> imagePath 변수에 저장되어 있는 변환할 이미지 경로를 가지고 이미지로 로드함.
2. JAI.create("encode", image, fos, "JPEG", null)
=> 로드한 이미지를 JPEG 형식으로 fos 에다가 인코딩 하여 저장함
3. String base64Image = Base64.getEncoder().encodeToString(baos.toByteArray());
=> 이제 변환된 이미지 데이터를 JSON으로 넘겨주기 위해 Base64로 인코딩함
최종적으로 base64Image를 JSON으로 넘겨주고 클라이언트에서 받은 데이터 자체를 그냥 img src에 넣어주기만 하면 됨.
'웹개발 > Java, Spring' 카테고리의 다른 글
[Spring Boot] 스프링 부트 JWT 인증 방식 구현 (0) | 2024.03.04 |
---|---|
[Spring] PropertyPlaceholderConfigurer 클래스를 이용한 프로필 설정 파일 불러오기 (0) | 2023.08.20 |
[Spring] ResponseEntity를 이용한 HTTP 통신 (0) | 2023.07.16 |
[Spring] 스프링 Interceptor를 간단한 MVC 예제에 적용해보기 (0) | 2023.06.25 |
[Spring] 스프링에서 제공하는 객체 검증 기능을 이용하여 회원가입 기능 검증하기 (0) | 2023.06.17 |