读取/写入JPG图像的最快方式而不会降低质量?

时间:2013-09-01 14:01:05

标签: java image image-processing groovy jpeg

我有JPG图像文件,我想将其加载到BufferedImage中,然后将BufferedImage写回JPG文件。这是我目前正在做的事情。

是否有更好的方法可以不降低质量并提高读/写速度?

阅读:

BufferedImage image = ImageIO.read(new File(storagePath + fileName + extension));

写:

BufferedImage image = // some jpg image         

Iterator iter = ImageIO.getImageWritersByFormatName("JPG");
if (iter.hasNext()) {
    ImageWriter writer = (ImageWriter) iter.next();
    ImageWriteParam iwp = writer.getDefaultWriteParam();
    iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    iwp.setCompressionQuality(quality);

    File outFile = new File(storagePath + fileName + extension);
    FileImageOutputStream output = new FileImageOutputStream(outFile);
    writer.setOutput(output);
    IIOImage iioImage = new IIOImage(image, null, null);
    writer.write(null, iioImage, iwp);
}

1 个答案:

答案 0 :(得分:1)

通过使用用于校正原始图像的相同量化表,可以最大限度地减少重新压缩JPEG的质量损失。仍然可以从舍入中获得单个位错误,但是你可以非常接近它。

问题是如何获得量化表。如果您的编码将允许您指定它们,则可以从源图像中提取值。否则,您必须希望图像最初使用相同的编码器进行编码。

"质量价值"不属于JPEG。它们是用于选择某些编码器使用的量化表的方法。 LIBJPEG是最常见的编码器,但还有其他人以不同的方式做事。

PNG编码通常比JPEG慢。