본문 바로가기
IT 자료

java에서 image파일을 thumbnail로 만들어서 응답하는 방법

by 성곤 2017. 10. 25.
반응형


java(spring)에서 image파일을 thumbnail로 만들어서 다운로드하는 방법



이미 이미지는 업로드가 되어있는데, 용량이 크다.

근데, 이 이미지를 썸네일로 자주 사용하게 되는데... 트래픽과 속도에 대해서 영향이 크다.

손톱만한 이미지(80*80)를 쓰는데, 용량 6MB, 사이즈 4k파일을 가져오는 건 좀 아니지 않는가


그래서 애초에 큰 이미지를 서버에서 썸네일로 변환해서 사용자에게 출력해주기로 했다.

thumbnailator를 사용했다. (참조 링크)

thumbnailator-master.zip

압축을 풀고 폴더를 프로젝트 내의 경로에 맞춰서 넣어주면 된다.



호출할 때마다 썸네일로 만들어주면,

서버에 부하가 많이 들어가지 않을까 했는데 무시해도 될 정도라고하니 다행이다.

gif같은 움짤은 작아진 다음에는 움직이지 않았다.


*주의사항 : 톰캣에서는 잘 되지만, 제우스에서 오류가 나는 경우가 있음. 꼭 개발서버나 같은 서버환경에서 충분한 테스트 후 작업하길 바람.



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
31
32
@RequestMapping(value = "/getImage", method = RequestMethod.GET)
  public void showImage(HttpServletResponse response) throws Exception {
 
    ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
 
    try {
 
      //이미지 파일 읽기
      File file = new File("/FilePath/FileName.jpg");
 
     // thumbnailator를 이용하여 썸네일 125*125 사이즈, 확장자jpeg로 변경
      BufferedImage image = Thumbnails.of(file).size(125125).outputFormat("jpeg").asBufferedImage();
 
 
      ImageIO.write(image, "jpeg", jpegOutputStream);
 
 
    } catch (IllegalArgumentException e) {
      response.sendError(HttpServletResponse.SC_NOT_FOUND);
    }
 
    byte[] imgByte = jpegOutputStream.toByteArray();
 
    response.setHeader("Cache-Control""no-store");
    response.setHeader("Pragma""no-cache");
    response.setDateHeader("Expires"0);
    response.setContentType("image/jpeg");
    ServletOutputStream responseOutputStream = response.getOutputStream();
    responseOutputStream.write(imgByte);
    responseOutputStream.flush();
    responseOutputStream.close();
  }
cs




참조 : https://github.com/coobird/thumbnailator (이미지를 썸네일로 만들어주는 thumbnailator)

참조 : https://stackoverflow.com/questions/33938704/spring-mvc-how-to-return-an-image-from-controller?answertab=active#tab-top (버퍼드이미지를 클라이언트로 출력해주는 예제)



thumbnailator를 사용하지 않고 java로만 썸네일 만드는 방법 (쉬움)

링크 : http://toyuq.tistory.com/256


반응형