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