繁体   English   中英

读取/写入JPG图像而不损失质量的最快方法?

[英]Fastest way to Read/Write JPG Images without losing Quality?

我有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);
}

通过使用与校正原始图像相同的量化表,可以最大程度地减少重新压缩JPEG时的质量损失。 仍然有可能从舍入中获得一位错误,但您可以将其接近。

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

“质量值”不是JPEG的一部分。 它们是一种选择某些编码器使用的量化表的方法。 LIBJPEG是最常见的编码器,但还有其他功能则有所不同。

PNG编码通常比JPEG慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM