BufferedImage.getScaledInstance()不调整图像

时间:2017-05-02 08:04:38

标签: java bufferedimage javax.imageio

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

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

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

然后我使用

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

它产生了一张带有以下数字的图片:相同宽度&高度(3264x2448),水平&垂直分辨率:96dpi,大小:674KB。

图片假设宽度为100px,无论保持宽高比的高度如何(根据Javadoc)?为什么结果pic具有相同的宽度和宽度?高度,但不同的分辨率和尺寸?我错过了什么,因为无论宽度和宽度是什么,似乎都是高度,结果pic总是与上述相同。

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

我使用的图片是here

1 个答案:

答案 0 :(得分:0)

您没有收到.getScaledInstance()的回复。它不会修改bufferedImage,但会返回缩放的图像实例。由于使用了“jpg”,您可能会在输出图像中获得分辨率更改。

所以你必须做以下事情;

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

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