这两天研究了一下图片的缩放的剪切,在各个网站都会有头像的设置,比如QQ,所以图片的剪切是必须的
package com.dbwen.core.util;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.File;
import javax.imageio.ImageIO;
public class ImageUtils {
/**
* 对图片进行缩放 剪切
* @param srcImageFile: 路径 x,y:左上角坐标 destWidth,destHeight :剪切后的长 宽,finalWidth,finalHeight:前台页面图片的长 宽
* @throws IOException
*/
public static void abscut(String srcImageFile, int x, int y, int destWidth,
int destHeight,int finalWidth,int finalHeight) {
try {
Image img;
ImageFilter cropFilter;
// 读取源图像
BufferedImage bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getWidth(); // 源图宽度
int srcHeight = bi.getHeight(); // 源图高度
System.out.println("srcWidth= " + srcWidth + "\tsrcHeight= "
+ srcHeight);
// if (srcWidth >= destWidth && srcHeight >= destHeight) {
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, "jpg", new File(srcImageFile));
} catch (Exception e) {
e.printStackTrace();
}
}
}
具体代码如上,我发现了几个不容易理解的地方。
1:参数 x,y 是什么 x是左上角 距离左边的距离,y是左上角距离上边的距离,
2:在页面的图片尺寸是固定的,获取的坐标和长宽是相对于缩放的图片,不进行处理的话,剪切的图片是不正确的,要先进行相应的缩放,再剪切
前台用js,获取图片的坐标和长度宽度