분류없음2008.12.09 14:31
import java.awt.Image;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.io.FileOutputStream;
import javax.swing.ImageIcon;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class EvinPotoSmall
{
private String orig; // 원본이미지 (패스와 파일명)
private String thumb; // 작게만들 이미지 (패스와 파일명)
private int maxDim; // 사이즈


// 작은 이미지를 만든다.(파일이저장된 실제경로, 새로운이름, 가로사이즈)
public void createThumbnail(String orig, String thumb, int maxDim)
{
try {
// Get the image from a file.
Image inImage = new ImageIcon(orig).getImage();

// Determine the scale.
double scale = (double)maxDim/(double)inImage.getHeight(null);
if (inImage.getWidth(null) > inImage.getHeight(null)) {
scale = (double)maxDim/(double)inImage.getWidth(null);
}

// Determine size of new image.
//One of them
// should equal maxDim.
int scaledW = (int)(scale*inImage.getWidth(null));
int scaledH = (int)(scale*inImage.getHeight(null));

// Create an image buffer in
//which to paint on.
BufferedImage outImage = new BufferedImage(scaledW, scaledH,BufferedImage.TYPE_INT_RGB);

// Set the scale.
AffineTransform tx = new AffineTransform();

// If the image is smaller than
// the desired image size,
// don't bother scaling.
if (scale < 1.0d) {
tx.scale(scale, scale);
}

// Paint image.
Graphics2D g2d = outImage.createGraphics();
g2d.setRenderingHints(Graphics2D.ANTIALIASING, Graphics2D.ANTIALIAS_ON); //이부분이 앤티얼리어싱적용부분
g2d.drawImage(inImage, tx, null);
g2d.dispose();

// JPEG-encode the image
//and write to file.
OutputStream os = new FileOutputStream(thumb);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
encoder.encode(outImage);
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

신고
Posted by 스진
분류없음2008.12.09 11:40

<%@ 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);
%>

신고
Posted by 스진
분류없음2008.12.09 11:33

Javascript를 이용한 eval함수는 대부분 알고 있을것이다

그래도 설명을 해보면


for(i=1;i<10;i++){

a[i-1] = eval("document.form.st"+i+".value");

}

<input type="text" name="st1">

<input type="text" name="st2">

<input type="text" name="st3">

<input type="text" name="st10">


이런경우 각 st1~st10까지의 값을 배열 a에 넣게 된다

(참고로 배열은 0부터 시작함으로 i-1로 하였다)


이렇게 처리하는 것은 대부분 알고 있다...


그래서 반대로 처리하고 싶은 경우가 있다

가변형 필드값에 값을 넣을경우


eval("document.form.st"+i+".value") = a[i-1];


라고 할경우 브라우져는 가차없이 에러를 떨어뜨린다.

에러의 내용은 함수결과에 할당할수 없습니다 라고 에러를 떨어뜨린다 ㅠ.ㅠ


맞다 eval은 함수로서 결과를 나타내는것이지 함수에 argument로 입력하지 않고

변수를 대입하려고 하는 그자체가 문제가 되는것이다.

일단 지원되는 경우도 있으나 eval()자체가 지원하지 않는다.


그러면 방법은 있는것인가?


방법은 구현하는 형태에 따라 다르겠지만 여기서는 eval()함수를 이용해보자

eval함수의 경우는 문자열을 그대로 실행하는 형태로서 eval()함수에 변수를 대입하지말고

좌우변을 모두 eval에 넣는 방법이 있다..

아래를 보면

eval("document.form.st"+i+".value = a["+(i-1)+"]");

이런식으로 하면 eval의 결과값은 true/false로 리턴되며


내부의 내용은 실행처리된다.


이렇게 하면 eval함수를 이용하여 가변변수에 값을 할당할수 있다.


이부분찾느라 고생했습니다.

다른 방법도 있겠으나.유용한 eval()을 쓰면 쉽게 구현이 가능하여집니다.


도움이 되셨기를

신고
Posted by 스진

티스토리 툴바