2012-10-25 44 views
0

在Java中有沒有什麼辦法用EXIF元數據加載JPEG圖像?加載與exif和/或損壞的元數據JPEG圖像

我不需要的EXIF數據(或任何其他元數據),但問題是,JavaIO.read給我:

javax.imageio.IIOException: Unsupported Image Type 
     at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:995) ~[na:1.7.0_09] 
     at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:966) ~[na:1.7.0_09] 
     at javax.imageio.ImageReader.read(ImageReader.java:940) ~[na:1.7.0_09] 

如果我嘗試讀取圖像。

在相關說明:我們有時也會得到帶有ImageIO.read無法處理的其他元數據的jpg圖像,所以我真的很喜歡jpeg閱讀器,它不會嘗試讀取/處理/理解任何元數據。但我一直無法找到任何。

圖像數據本身更新受損,所有其他軟件(Gimp,Firefox等)都可以正確讀取並顯示圖像。

我什至試過以下,但它仍然無法讀取圖像。

  Iterator readers = ImageIO.getImageReadersByFormatName("jpg"); 
      ImageReader reader = (ImageReader)readers.next(); 
      ImageInputStream iis = ImageIO.createImageInputStream(sourceFile); 
      reader.setInput(iis,true,true); 

      BufferedImage image = reader.read(0); 
+0

你確定它的元數據?對於用CMYK編碼的文件,我遇到了類似的問題。什麼是您的圖像的顏色模型/空間? –

+0

有趣的故事。原來是某些文件的元數據,以及其他文件的顏色配置文件問題。但是現在我只是在文件上運行/ usr/bin/mogrify -strip如果我無法打開它們,它會處理大多數問題,除了所有的顏色配置文件問題。我仍然希望有一個更好的java庫來處理顏色配置文件(Expecially cmyk)/愚蠢的伽馬值和相似的問題(我目前有一個.jpg文件,其中有更多的色域數據,然後圖像數據)問題的JPG文件。 – MTilsted

回答

1

這裏沒有太多選擇。如果你想解決一個特定的問題,那麼在Java中毫無疑問是可以完成的。然而,如果你只是尋求一個庫來在你的項目中進行一些圖像處理,而不需要成爲一個圖形專家程序員,那麼開源的java庫還不能與商業的或者非Java的庫相提並論。 在SO上進行簡單的搜索會顯示狀態。因此,如果您需要在生產環境中獲得可靠且最小的驚喜,那麼您最有可能(在我看來)最終會出現以下情況之一(狀態截至本帖子發佈之日):

1-市售品,例如Snowbound RasterMaster

2-使用像ImageMagick的(或GraphicsMagick工具)的工具使用他們的一個Java接口,例如im4javaJMagick的選項。

至於你的問題,你提到使用mogrify。你可以爲輸出圖像設置色彩空間,它可能會解決你的問題:

所以也許你可以試試:「/ usr/bin/mogrify -strip -colorspace sRGB」在你的jpg文件上。