간만에 포스팅합니다.


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


그동안 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/

















자주 접하게 되는 질문이라서 뻔히 알고 있으면서도 몇시간을 삽질했습니다.


Tomcat7을 service로 등록해 놓고 테스트를 하던중 위의 버전오류(컴파일, 실행환경 버전차)를 만나면 

소스를 컴파일 하기 어려운 환경에서는 서버의 실행환경을 업데이트합니다.

이런경우 기존 자바를 삭제하지 않고 새로설치하곤 합니다. 그리고  path까지 정확하게 잡습니다.


하지만 여전히 위의 오류는 사라지지 않고 이를 바라보는 개발자의 속은 타들어갑니다.


결론 : service로 등록할 당시 이미 java_home을 물고 들어가서 서비스로 등록을 합니다.

그래서 등록된 서비스를 삭제하고 다시 등록해 줘야 합니다.


tomcat7/bin>service.exe uninstall tomcat7;

tomcat/bin>service.exe install tomcat7;


service로 등록된 톰캣의 환경은 삭제 후 재 설치를 해야 변경된 jvm 환경이 적용된다는 것. 






ERR_INCOMPLETE_CHUNKED_ENCODING

Posted 2014. 9. 7. 22:59

FileInputStream 을 이용한 imageViewer 시 response.setContentType("image/jpeg") 을 지정하지 않아 발생함.

ie에서는 보통 나타나지 않고 chrome 에서도 브라우저에서 servlet url을 직접 호출하면 정상적으로 작동하는것 처럼 보인다.


하지만 html에서 <img src=""/> 를 이용하여 호출할 경우 chrome에서 위의 오류를 나타내고 이미지가 나타나지 않는다.






« PREV : 1 : ··· : 13 : 14 : 15 : 16 : 17 : 18 : 19 : ··· : 61 : NEXT »