我有一個讀取圖像,轉換它們(大小,格式)並將它們寫回的方法。這一直運行得很好,但現在我遇到了一些顯然包含一些元數據(IPTC)的JPEG圖像(來自新聞社)。轉換這些圖像時,顏色都是錯誤的。我的第一個猜測是,那些是CMYK圖像,但它們不是。錯誤顏色的JPEG圖像
問題必須來自閱讀,因爲無論我將圖像轉換爲較小的JPEG還是PNG,都無關緊要,它看起來總是相同的。
起初,我用ImageIO.read()
來讀取圖像。我現在通過ImageIO.getImageReadersByMIMEType()
得到實際的ImageReader
,並試圖告訴讀者通過設置ignoreMetadata
參數ImageReader#setInput(Object input, boolean seekForwardOnly, boolean ignoreMetadata)
忽略元數據,但沒有成功。
然後我創建了一個沒有元數據的圖像版本(使用Fireworks)。該圖像被正確轉換。
我能找到,唯一的區別是,與不工作的形象價值讀者的變量colorSpaceCode
是,whilest與工作形象,價值。還有一個outColorSpaceCode
這兩個圖像是。
由於source comment of the reader只說由setImageData本地代碼回調設置。修改後的IJG + NIFTY顏色空間代碼現在我真的被卡住了。所以任何幫助將不勝感激。
您可以通過here並點擊下載獲取原始圖像(〜3 MB)。下面的左圖顯示了我從原始圖像中獲得的內容,右圖顯示了它應該是什麼樣子。
我已經有這個問題,只要我記得。它發生在我遇到的大約0.1%的jpg文件中。例如:http://chan.sankakustatic.com/data/cd/81/cd81a9fa1305b9c1887ab1ac4904d166.jpg我還沒有找到一個解決方案,但在面板中正確顯示它們。我的猜測是這是Java的JPEG解析器中的一個錯誤。 – 2012-02-22 09:57:24
可能的重疊:[用Java保存圖片顏色改變](http://stackoverflow.com/questions/20789043/image-changes-color-when-saved-with-java) – 2013-12-26 18:25:46