最近要做一个web项目,里面涉及到对图片的缩放和裁剪。原理是这样的,首先先对图片进行缩放,然后,将缩放之后的图片进行裁剪,里面涉及到许多java图片api的应用,代码如下。
//参数分别对应了员图片的地址,目的图片的地址,裁剪的坐标和缩放的坐标
public void abscut(final String srcImageFile,String savedImagePath, final int x, final int y, final int destWidth,
final int destHeight,final int finalWidth,final int finalHeight) {
Image img;
ImageFilter cropFilter;
// 读取源图像
BufferedImage bi;
try {
bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getWidth(); // 源图宽度
int srcHeight = bi.getHeight(); // 源图高度
System.out.println(“srcWidth= ” + srcWidth + “tsrcHeight= ”
+ srcHeight);
Image image = bi.getScaledInstance(finalWidth, finalHeight,Image.SCALE_DEFAULT);//获取缩放后的图片大小
cropFilter = new CropImageFilter(x, y, destWidth, destHeight);
img = Toolkit.getDefaultToolkit()。createImage(
new FilteredImageSource(image.getSource(), cropFilter));
BufferedImage tag = new BufferedImage(destWidth, destHeight,
BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(img, 0, 0, null); // 绘制截取后的图
g.dispose();
ImageIO.write(tag, getExtention(srcImageFile), new File(savedImagePath));
// 输出为文件
//再次进行缩放
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
/**
* 功能:提取文件名的后缀
*
* @param fileName
* @return
*/
private static String getExtention(String fileName) {
int pos = fileName.lastIndexOf(“.”);
return fileName.substring(pos + 1);
}