java缩放图片

2014-11-24 02:22:24 · 作者: · 浏览: 1

知识点:AffineTransform 类表示 2D 仿射变换,它执行从 2D 坐标到其他 2D 坐标的线性映射,保留了线的“直线性”和“平行性”。可以使用一系列平移 (translation)、缩放 (scale)、翻转 (flip)、旋转 (rotation) 和错切 (shear) 来构造仿射变换。
AffineTransformOp此类使用仿射转换来执行从源图像或 Raster 中 2D 坐标到目标图像或 Raster 中 2D 坐标的线性映射。
BufferedImage
filter(BufferedImage src, BufferedImage dst)
转换源 BufferedImage 并将结果存储在目标 BufferedImage 中。


1.应用一:
public void test01(){
try {
File fi = new File("D:/1.jpg"); //大图文件
File fo = new File("D:/2.jpg"); //将要转换出的小图文件

//创建一个AffineTransform对象
AffineTransform transform = new AffineTransform();
//从大图文件中得到BufferedImage对象
BufferedImage bis = ImageIO.read(fi);

int w = bis.getWidth();
int h = bis.getHeight();
//double scale = (double)w/h;

//修改mw值,更改缩放大小
int scale = 120;

int nw = scale;

int nh = (nw * h) / w;
if(nh>scale) {
nh = scale;
nw = (nh * w) / h;
}

double sx = (double)nw / w;
double sy = (double)nh / h;

//实现缩放,sx沿着x轴的缩放因子;sy沿着y轴的缩放因子
transform.setToScale(sx,sy);

AffineTransformOp ato = new AffineTransformOp(transform, null);

//重新创建一个BufferedImage对象
BufferedImage bid = new BufferedImage(nw, nh, BufferedImage.TYPE_3BYTE_BGR);
//执行转换
ato.filter(bis,bid);
//保存图像
ImageIO.write(bid, "jpeg", fo);
} catch(Exception e) {
e.printStackTrace();
}
}