BufferedImage.getScaledInstance() 未调整图像大小

BufferedImage.getScaledInstance() not resizing image

我在理解这行代码时遇到一些问题:

bufferedImage.getScaledInstance(100, -1, Image.SCALE_SMOOTH);

我用它来调整带有以下数字的图像的大小。宽度:3264px,高度:2448px,水平和垂直分辨率:150dpi,大小:2.72MB.

然后我使用

将 bufferedImage 保存到一个文件中
ImageIO.write(bufferedImage, "jpg", outputFile);

生成的图片的编号如下:相同的宽度和高度(3264x2448),水平和垂直分辨率:96dpi,大小:674KB。

图片的宽度和高度不应该是 100px 以保持纵横比(根据 Javadoc)吗?为什么结果图片具有相同的宽度和高度,但水平分辨率和大小不同?我是不是遗漏了什么,因为看起来无论宽度和高度的值是多少,结果图片总是和上面描述的一样。

我还读到我应该将调整后的 BufferedImage 绘制到 Graphics2D 中,并将 Graphics2D 保存到文件中。这是正确的方法吗,而不是将 BufferedImage 直接保存到文件中?

我使用的图片是here

您没有收到 .getScaledInstance() 的回复。它不修改 bufferedImage,而是 returns 缩放图像实例。由于 "jpg" 的使用,您可能会在输出图像中看到分辨率变化。

因此您必须执行以下操作;

Image scaledImage = bufferedImage.getScaledInstance(100, -1, Image.SCALE_SMOOTH);
// map Image to BufferedImage
ImageIO.write(scaledBufferedImage, "jpg", outputFile);

要从缩放后的 Image 创建 BufferedImage,请使用以下 answer