선잡설
만들고자 하는것이 갤러리 홈페이지다 보니 이미지의 썸네일 이미지도 쿼리티가 무척이나 중요하다.
php로 구현된것은 제로보드등 여러곳에서 볼 수 있지만 java 로 된건 별로 보지 못했다.
본잡설
1. JPEGImageEncoder 를 이용한 리사이즈
public static void createThumbnail(String soruce, String target, int targetW) throws Exception
{
Image imgSource = new ImageIcon(soruce).getImage();
int oldW = imgSource.getWidth(null);
int oldH = imgSource.getHeight(null);
int newW = targetW;
int newH = (targetW * oldH) / oldW;
//Image imgTarget = imgSource.getScaledInstance(newW, newH, Image.SCALE_AREA_AVERAGING);
Image imgTarget = imgSource.getScaledInstance(newW, newH, Image.SCALE_SMOOTH);
int pixels[] = new int[newW * newH];
PixelGrabber pg = new PixelGrabber(imgTarget, 0, 0, newW, newH, pixels, 0, newW);
pg.grabPixels();
BufferedImage bi = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_RGB);
bi.setRGB(0, 0, newW, newH, pixels, 0, newW);
FileOutputStream fos = new FileOutputStream(target);
JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam jep = jpeg.getDefaultJPEGEncodeParam(bi);
jep.setQuality(1, true);
jpeg.encode(bi, jep);
fos.close();
}
(출처:http://www.ibm.com/developerworks/kr/library/j-jspdwj/index.html#N1015A
http://blog.naver.com/PostView.nhn?blogId=j79sw&logNo=110037089984&redirect=Dlog&widgetTypeCall=true )
음.. 나름 깔끔하다. JAI 로 한방 리사이즈보단 이미지가 괜찮다.
중간에 주석이 있는 부분 getScaledInstance() 메소드의 마지막 파라메터로 쿼리티를 조정할 수 있다.
다 해본결과 SCALE_SMOOTH 가 가장 좋다.
리사이즈 본이 원래 그렇지만 섬네일 이미지가 약간 블러를 먹은 듯 선예도가 떨어진다.
후잡설
방법들은 알게되는대로 계속 올리겠다.