在 Java 中无需调整大小即可更改图像分辨率

Sex*_*ast 4 java jpeg image-compression

我想压缩jpeg图像,即降低其分辨率,而不以任何方式调整其大小。有没有什么好的 Java 库可以帮助我做到这一点?SO中有很多类似的帖子,但其中大多数最终也会调整图像大小。

如果没有,我该如何以编程方式做到这一点?假设参数为 0.9,图像的分辨率将降低 0.1 倍......

Eri*_*zzo 6

通常“分辨率”是指尺寸。你的意思是JPEG质量吗?这是我能想到的在不调整大小的情况下压缩它的唯一方法。

如果是这样,您可以使用 Java2D ImageIO API。类似以下的内容会起作用(改编自此页面):

BufferedImage bufferedImage = ImageIO.read(...);

ImageWriter writer = (ImageWriter)ImageIO.getImageWritersByFormatName("jpeg").next();
ImageWriteParam iwp = writer.getDefaultWriteParam();
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwp.setCompressionQuality(...);

File file = new File(...);
FileImageOutputStream output = new FileImageOutputStream(file);
writer.setOutput(output);
IIOImage image = new IIOImage(bufferedImage, null, null);
writer.write(null, image, iwp);
writer.dispose();
Run Code Online (Sandbox Code Playgroud)

不幸的是,我认为没有办法获得图像的现有 JPEG 质量,因此您必须对压缩质量使用一些固定值。