首頁 >Java >java教程 >在Java中使用ImageIO保存影像時如何控制JPEG壓縮等級?

在Java中使用ImageIO保存影像時如何控制JPEG壓縮等級?

DDD
DDD原創
2024-10-24 21:56:02367瀏覽

How to Control JPEG Compression Level When Saving Images Using ImageIO in Java?

如何在Java 中使用ImageIO 設定JPEG 壓縮等級

ImageIO 是Java API for Image I/O (JAII) 的一部分,提供了一種便利的方法讀取和寫入各種格式的影像,包括JPEG。但是,預設情況下,ImageIO 不提供對 JPEG 壓縮等級的直接控制。本文探討如何克服此限制並在將 BufferedImage 儲存為 JPEG 檔案時設定所需的壓縮等級。

將 BufferedImage 儲存為 JPEG 的 Java 函數

提供的 Java 函數 getScreenShot,捕獲 BufferedImage 並將其儲存為 JPEG 檔案。但是,它沒有指定任何壓縮設定。

<code class="java">public static void getScreenShot(BufferedImage capture, Path folder, String filename) {
        try {
            ImageIO.write(capture, "jpeg", new File(folder.toString()+"/"+filename+".jpg"));
        } catch (AWTException | IOException ex) {
            Logger.getLogger(ScreenShotMaker.class.getName()).log(Level.SEVERE, null, ex);
        }
}</code>

設定 JPEG 壓縮等級

要設定 JPEG 壓縮級別,您需要存取 ImageWriteParam 對象,該物件包含控制影像編碼過程。以下是更詳細的程式碼片段:

<code class="java">ImageWriter jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next();
ImageWriteParam jpgWriteParam = jpgWriter.getDefaultWriteParam();
jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
jpgWriteParam.setCompressionQuality(0.7f);</code>

透過將壓縮模式設定為 MODE_EXPLICIT,您可以明確控制壓縮等級。傳遞給compressionQuality的值決定了所需的壓縮級別,1.0f代表最大質量,0.0f代表最大壓縮。

其他注意事項

  • ImageWriter.setOutput應該傳遞一個ImageOutputStream。
  • FileImageOutputStream 和 MemoryCacheImageOutputStream 是大多數情況下的首選實作。

透過合併這些增強功能,您可以自訂 JPEG 壓縮等級以滿足您的特定要求,同時使用 Java 中的 ImageIO 儲存影像。

以上是在Java中使用ImageIO保存影像時如何控制JPEG壓縮等級?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn