저가 사용하는 jpeg파일을 스케일을 변환하는 java에서 사용하는 메서드입니다.
static한 메서드이니깐 필요한 class에 추가한 후 이용하시면 됩니다.
jpeg파일만 test하였습니다.
/**
사용하기 위하여는 아래와 같이 import 한다.
import java.awt.Image;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
@param orig 원본 이미지 파일명 ex: /tmp/a.jpg
@param thumb 생성될 이미지 파일명 ex : /temp/b.jpg
@param maxDim 생성될 이미지의 가로길이. ex : 400 (원본이미지의 가로를 400으로 줄인다. 세로
는 같은 비율로 줄어든다.) */
public static void createThumbnail( String orig, String thumb, int maxDim) {
try {
// Get the image from a file.
Image inImage = new ImageIcon(
orig).getImage();
int iwidth = inImage.getWidth(null);
//System.out.println(iwidth);
if(maxDim > iwidth)
maxDim = iwidth;
// 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.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();
}
}--아내와 나
사랑이야기를 쓴다.