基于struts的 FormFile 处理上传的图片 (缩放、切割)
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 java.io.IOException;
import java.util.Date;
import javax.imageio.ImageIO;
import org.apache.struts.upload.FormFile;
public class ImageCropper {
private static ImageCropper instance;
private String path = this.getClass().getClassLoader().getResource("").getPath();
private String ext = "jpg";
private ImageCropper() {
path = path.replaceAll("WEB-INF/classes/", "");
}
public static synchronized ImageCropper getInstance() {
if (null == instance) {
instance = new ImageCropper();
}
return instance;
}
public String doCrop(FormFile file, Double zoom, Integer x, Integer y, Integer w, Integer h) throws IOException {
if (!new File(path).exists()) {
new File(path).mkdirs();
}
String outPath = path + new Date().getTime() + "." + ext;
try {
BufferedImage iBufferedImage = ImageIO.read(file.getInputStream());
Integer width = iBufferedImage.getWidth();
Integer height = iBufferedImage.getHeight();
Integer zoomWidth = (int) (width * zoom);
Integer zoomHeight = (int) (height * zoom);
Image zoomImage = iBufferedImage.getScaledInstance(zoomWidth, zoomHeight, Image.SCALE_DEFAULT);
ImageFilter imageFilter = new CropImageFilter(x, y, w, h);
Image cropImage = Toolkit.getDefaultToolkit().createImage(
new FilteredImageSource(zoomImage.getSource(), imageFilter));
BufferedImage oBufferedImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics graphics = oBufferedImage.getGraphics();
graphics.drawImage(cropImage, 0, 0, null);
graphics.dispose();
ImageIO.write(oBufferedImage, ext, new File(outPath));
return outPath;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}