Thumbnail image 만들기를 하면서 구글링결과 그대로 쓰기는 무리가 있었고,
역시 짜집기 국가대표급 능력으로 여러 소스를 분석하여 드디어 완성.
필요한 기능은 간단.
1. 원본 파일
2, 저장될 파일
3. 넓이
3이 가장 중요하다.
이유는 간단. Thumbnail image의 원본에 비율이 다르다는것.
그래서 결국 저장될 이미지의 최대치만 지정하면 원본 이미지의 비율에 맞춰 높이를 자동으로 저장한다는 것.
그 소스는....
Image inImage = new ImageIcon(loadFile).getImage();
double scale = (double) maxDim / (double) inImage.getHeight(null);
if (inImage.getWidth(null) > inImage.getHeight(null)) {
scale = (double) maxDim / (double) inImage.getWidth(null);
}
int scaledW = (int) (scale * inImage.getWidth(null));
int scaledH = (int) (scale * inImage.getHeight(null));
loadFile - 원본 이미지 파일 전체경로 및 파일명(ex: c:\file\test.jpg)
scaledW - 수정된 넓이
scaledH - 수정된 높이
파일을 저장하는 소스도 문제가 있었다.
문제의 소스
encoder.encode(outImage);
표준이 아니어서 jdk버전을 탄다는것...ㅡㅡ;;;
그래서 완성된 소스는...
public boolean createThumbnail(String loadFile, String saveFile, int maxDim)
throws IOException {
File save = new File(saveFile.replaceAll("/", "\\" + File.separator));
FileInputStream fis = new FileInputStream(loadFile.replaceAll("/", "\\"
+ File.separator));
BufferedImage im = ImageIO.read(fis);
Image inImage = new ImageIcon(loadFile).getImage();
double scale = (double) maxDim / (double) inImage.getHeight(null);
if (inImage.getWidth(null) > inImage.getHeight(null)) {
scale = (double) maxDim / (double) inImage.getWidth(null);
}
int scaledW = (int) (scale * inImage.getWidth(null));
int scaledH = (int) (scale * inImage.getHeight(null));
BufferedImage thumb = new BufferedImage(scaledW, scaledH,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = thumb.createGraphics();
g2.drawImage(im, 0, 0, scaledW, scaledH, null);
return ImageIO.write(thumb, "jpg", save);
}
loadFile - 원본 이미지 파일 전체경로 및 파일명(ex: c:\file\test.jpg)
saveFile - 저장될 이미지 파일 전체경로 및 파일명(ex: c:\file\test_300.jpg)
maxDim - 저장될 이미지의 최대 pixel(ex:300)
여기서 다 알겠지만 간단한 팁은.
만약 넓이와 높이가 지정되는 경우라면 scaledW, scaledH 를 계산하지 않고 직접 지정하면 된다는거다.
java Thumbnail 소스를 찾다거 맨붕 오신 분들에게 한방울의 생명수가 되길 바라며.
블로그 통계를 보니 외쿡에서도 간혹 들어온다.
그래서 의도적으로 ex를...ㅋㅋㅋ
#SCMInno #에스씨엠이노 #WEBDeK