JSP에서 이미지 리사이즈 하기

처음 구했던 소스,

<%@ page import = "java.io.*,
                    java.awt.Image,
                    java.awt.Graphics2D,
                    java.awt.geom.AffineTransform,
                    java.awt.image.BufferedImage,
                    javax.swing.ImageIcon,
                    com.sun.image.codec.jpeg.*"

        contentType="text/html;charset=MS949"
%>
<%!
    public static void createThumbnail(String orig, String thumb, int maxDim) throws Exception
    {
        Image inImage = new ImageIcon(orig).getImage();
        int iwidth = inImage.getWidth(null);

        if( maxDim > iwidth )
            maxDim = iwidth;

        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 outImage = new BufferedImage(scaledW,scaledH,BufferedImage.TYPE_INT_RGB);

        AffineTransform tx = new AffineTransform();
        if( scale < 1.0d )
         tx.scale( scale, scale );

        Graphics2D g2d = outImage.createGraphics();
        g2d.drawImage(inImage, tx, null);
        g2d.dispose();

        OutputStream os = new FileOutputStream(thumb);

        JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(os);
        JPEGEncodeParam jep = jpeg.getDefaultJPEGEncodeParam(outImage);
        jep.setQuality(1, false);

        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
        encoder.encode(outImage, jep);
        os.close();
    }
%>
<%
    createThumbnail("c:/inetpub/c/big.jpg","c:/inetpub/c/big_result.jpg",320);
%>

품질이 너무 구리다.. 폐기;

그다음으로 구했던 소스

<%@ page import="java.io.*,
                java.awt.*,
                java.awt.image.*,
                javax.swing.*,
                com.sun.image.codec.jpeg.*"

    contentType="text/html;charset=MS949" %>
<%!
    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_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, false);

        jpeg.encode(bi, jep);

        fos.close();
    }
%>
<%
    createThumbnail("c:/inetpub/c/big.jpg","c:/inetpub/c/big_result.jpg",320);
%>

리샘플 퀄리티는 볼만한테 pg.grabPixels(); 이놈이 실행되는데 2분이 넘게 걸리는게 아닌가 - -;

자바누리에 어쩌면 좋겠냐고 질문을 올렸더니 P3-800에서 2-3초 내외로 실행이 끝난다고 한다

아무래도 이상해서 이리저리 해보던 결과..

컴퓨터를 껐다켰더니 잘된다-_-;;

한 1초 걸리는것 같다;;

오늘의 교훈.. XP도 별수없다.. 며칠에 한번씩은 재부팅을 해주자 ㅜㅜ