import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; public final class ImageUtil { // 图片缩放。 public static BufferedImage reSize(BufferedImage srcBufImage, int width, int height) { BufferedImage bufImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 计算图片缩放比例 float widthBo = (float) width / (float) srcBufImage.getWidth(); float heightBo = (float) height / (float) srcBufImage.getHeight(); AffineTransform transform = new AffineTransform(); transform.setToScale(widthBo, heightBo); // 根据原始图片生成处理后的图片。 // AffineTransformOp ato = new AffineTransformOp(transform, null); // ato.filter(srcBufImage, bufImg); Graphics2D g = (Graphics2D) bufImg.createGraphics(); g.drawImage(srcBufImage, transform, null); g.dispose(); return bufImg; } }
根据要缩放的宽度和高度分别除以原图像的宽度和高度得到缩放比例。
创建BufferedImage,得到它的Graphics2D对象,然后调用Graphics2D的
public abstract boolean drawImage(Imageimg, AffineTransformxform, ImageObserverobs)
Graphics2D
中当前的
Transform
完成。在应用
Graphics2D
上下文中的 transform 属性之前,指定的转换被应用到图像。应用的呈现属性包括
Clip
、
Transform
和
Composite
属性。注意,如果指定的转换不可逆,则不会完成呈现。
img
- 要呈现的指定图像。如果
img
为 null,则此方法不执行任何动作。
xform
- 从图像空间到用户空间的转换
obs
- 转换了多个
Image
时要通知的
ImageObserver
将转换后的图像画到BufferedImage。
不知为何,
// AffineTransformOp ato = new AffineTransformOp(transform, null);
// ato.filter(srcBufImage, bufImg);
这样会报错:抛出ImagingOpException异常。