簡體   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