我在理解这行代码时遇到了一些问题:
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
答案 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。