간만에 포스팅합니다.


모바일에서 리사이징 없이 업로드 된 이미지의 경우 너무 사이즈가 크다보니 이를 그대로 서비스하다보면 보는 사용자가 제공하는 서버나 둘다 필요없는 시간낭비, 트래픽 낭비를 초래합니다.


그동안 jdk 자체제공된 라이브러리를 이용하여 구현했었는데, 구글링을 통해 좋은 유틸 jar를 발견하게 되었습니다.


해당 jar 파일입니다. 현재 4.2버전을 제공하고 있어 이를 다운받아 개발에 사용했습니다.


imgscalr-lib-4.2.jar


maven을 사용하려면 다음과 같이 추가합니다.

        <dependency>

<groupId>org.imgscalr</groupId>

<artifactId>imgscalr-lib</artifactId>

<version>4.2</version>

</dependency>


기본적인 사용법은 간단합니다.

프로젝트에서 사용한 방법만 간단히 예제코드와 함께 소개합니다.


업로드를 받는 controller 메소드 일부분입니다.

@ResponseBody

@SuppressWarnings("unchecked")

@RequestMapping(value="/api/apchart/upload",method= RequestMethod.POST)

public ModelAndView  imageUpload(HttpServletRequest request, HttpServletResponse response, @RequestParam("upload_media") MultipartFile multipart ){

 .....  중략 .....


          String orgFilePath = UPLOAD_ABS_PATH + newFileName + "_org_"+file.getOriginalFilename();

  File orgFile = new File(orgFilePath);

  file.transferTo(orgFile);

  

           //Image Crop & Resize...

           FileUtils.imageResize(orgFilePath, filePath, "jpg");

           orgFile.delete();


  ..... 중략 .....


실제 Crop & Resize를 담당하는 FileUtils.imageResize 메소드 부분입니다.

public static void imageResize(String orgFilePath, String targetFilePath, String imageType) throws Exception{


BufferedImage originalImage = ImageIO.read(new File(orgFilePath));

int imgwidth = Math.min(originalImage.getHeight(),  originalImage.getWidth());

int imgheight = imgwidth;

BufferedImage scaledImage = Scalr.crop(originalImage, (originalImage.getWidth() - imgwidth)/2, (originalImage.getHeight() - imgheight)/2, imgwidth, imgheight, null);

BufferedImage resizedImage = Scalr.resize(scaledImage, 300, 300, null);

ImageIO.write(resizedImage, imageType, new File(targetFilePath));

}


위의 메소드는 이미지 센터를 중심으로 정사각형으로 crop 하고 300pixel 기준으로 리사이징하도록 하였습니다.


위의 과정을 거친 이미지는 다음과 같이 변경됩니다.


<변경전 원본이미지> - 원본이미지가 너무 커서 블로그상에서 resize만 처리하여 업로드



<정사각형 crop 후의 이미지>




<300pixel로 resize 된 이미지>



자세한 사용법은 다음의 url을 참고하세요.



http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/