이미지 리사이징 , image resize
리사이징에는 jai 도 필요 없더이다..
출처는 잘 모르겠구 jai로했을때는 사이즈가 변할때 깨지는일이 있었는데
이건 갠찬네.
사이즈 변경안할때 이미지가 아닌것을 넣으면 널포인트 난다는것에 주의하자.
참 쉽쥬?
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.ImageIcon;
// com.sun.image.codec.jpeg package is included in sun and ibm sdk 1.3
import com.sun.image.codec.jpeg.*;
public class ImageUtil{
public static final int RATIO = 0;
public static final int SAME = -1;
public void resize(File src, File dest, int width, int height) throws IOException {
Image srcImg = null;
String suffix = src.getName().substring(src.getName().lastIndexOf('.')+1).toLowerCase();
if (suffix.equals("bmp") || suffix.equals("png") || suffix.equals("gif")) {
srcImg = ImageIO.read(src);
} else {
// BMP가 아닌 경우 ImageIcon을 활용해서 Image 생성
// 이렇게 하는 이유는 getScaledInstance를 통해 구한 이미지를
// PixelGrabber.grabPixels로 리사이즈 할때
// 빠르게 처리하기 위함이다.
srcImg = new ImageIcon(src.toURL()).getImage();
}
int srcWidth = srcImg.getWidth(null);
int srcHeight = srcImg.getHeight(null);
int destWidth = -1, destHeight = -1;
if (width == SAME) {
destWidth = srcWidth;
} else if (width > 0) {
destWidth = width;
}
if (height == SAME) {
destHeight = srcHeight;
} else if (height > 0) {
destHeight = height;
}
if (width == RATIO && height == RATIO) {
destWidth = srcWidth;
destHeight = srcHeight;
} else if (width == RATIO) {
double ratio = ((double)destHeight) / ((double)srcHeight);
destWidth = (int)((double)srcWidth * ratio);
} else if (height == RATIO) {
double ratio = ((double)destWidth) / ((double)srcWidth);
destHeight = (int)((double)srcHeight * ratio);
}
Image imgTarget = srcImg.getScaledInstance(destWidth, destHeight, Image.SCALE_SMOOTH);
int pixels[] = new int[destWidth * destHeight];
PixelGrabber pg = new PixelGrabber(imgTarget, 0, 0, destWidth, destHeight, pixels, 0, destWidth);
try {
pg.grabPixels();
} catch (InterruptedException e) {
throw new IOException(e.getMessage());
}
BufferedImage destImg = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
destImg.setRGB(0, 0, destWidth, destHeight, pixels, 0, destWidth);
ImageIO.write(destImg, "jpg", dest);
}
public int getHeight(String strImage,int intMaxWidth){
Image imgSrc=new ImageIcon(strImage).getImage();
return imgSrc.getHeight(null)*intMaxWidth/imgSrc.getWidth(null);
}
}
'Dev > Java' 카테고리의 다른 글
java.sql.SQLException: 스트림이 이미 종료되었습니다 (0) | 2010.03.25 |
---|---|
Full GC (0) | 2010.03.25 |
ftp upload (0) | 2010.03.24 |
ftp 파일삭제. (0) | 2010.03.24 |
정규표현식을 사용하여 스크립트 제거 (1) | 2010.03.24 |