簡體   English   中英

ImageIO.read(inputStream) 返回無效的 icc 配置文件數據錯誤

[英]ImageIO.read(inputStream) returns invalid icc profile data error

在我的項目中,我正在閱讀這樣的圖片:

BufferedImage originalImage = ImageIO.read(inputStream);

但有時,此方法會拋出異常Invalid icc profile data error 當我檢查導入的圖像時,我發現圖像字節字段包含文本ICC_PROFILE Here is example 但有趣的是,當我在此文本所在的 position 中將字節更改為 0000 時,一切正常。

是發生異常的圖片。 用於檢測。

請幫助解決問題。

您在十六進制編輯器中看到的是 JPEG APP2 段,其中包含嵌入的 ICC 顏色配置文件。 此配置文件說明了如何解釋圖像中的 colors。

由於這是一張普通的(YCC 編碼)RGB 圖像,您可以跳過這一段,圖像看起來仍然“正常”,但 colors 可能有點偏差。 當您在編輯器中將 APP2 段的“標識符”從"ICC_PROFILE" (和一個 0 終止符)更改為不同的段時,解碼器將在讀取時忽略(跳過)它。

關於例外情況,可能是編寫 JPEG(或嵌入其中的 ICC 配置文件)的軟件編寫了不正確的 ICC 配置文件。 但是在查看文件后似乎並非如此。 另一個可能的選項是您運行的 Java 運行時環境不支持此特定 ICC 配置文件。 如果您在 Java 5 (,) 上運行,我建議您立即升級。 由於此版本在幾年前就已停產,如果您使用的是 Java 8,可能是有原因的,但我仍然建議升級到 Java 11 或 17。如果可以的話。

如果由於 ICC 配置文件問題,您在讀取 JPEG 文件時仍然遇到問題,您可以嘗試使用我的TwelveMonkeys ImageIO JPEG 插件,它會使用一些技巧來熱修復壞的 ICC 配置文件,或者如果它們不能被忽略(帶有警告)固定的。 它確實需要 Java 8 雖然......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM