2010-10-28 24 views
12

好吧我有一個圖片,我正在嘗試閱讀。問題是Image.read(file)返回NULL。問題使用ImageIO.read

File file = new File("C:\\images\\image1.jpg"); 
if(file.exists()){ 
    System.out.println("Image file exists."); 
    BufferedImage originalImage = ImageIO.read(file); 

} 

所以image存在,但ImageIO.read(file)返回NULL。沒有拋出錯誤沒有什麼!這是怎麼回事?

這是我到目前爲止已經試過:

  1. 好我的環境是Windows 7。我 與 自帶的Windows和它能夠 讀取圖像的圖像之一進行測試。
  2. image1.jpg是由另一個系統創建的 。現在確定他們正在使用什麼方法 。
  3. 我試圖將圖像轉換爲 RGB,如此處所示link text 但它以「不是JPEG文件:以0x4d 0x4d開頭」失敗。
  4. 圖片擴展名是.jpg,但是 windows說它是JPEG類型的?這 是混亂。

有人可以幫忙嗎?我是新手,不知道如何解決這個問題。

好吧我只是想通了ImageIO.getImageReaders(流)返回一個空的迭代器。這意味着它找不到合適的讀者?我該如何讀這張圖片?

+1

由於您的標籤包含'applet',只是想我會提到,除非您正在編寫一個用於從最終用戶的磁盤加載圖像的小程序,否則您可能會在URL之後。進一步的評論,Windows可能有很多內置的「魔術」來處理無效圖像。它可能支付在可信的圖像編輯器中打開JPG並將其保存爲新文件。這可能會糾正問題(假設它是一個無效的圖像)。 – 2010-10-29 00:44:49

+0

那些雙打斜槓是什麼? – EJP 2010-10-29 02:21:21

回答

5

好吧,因爲我切換筆記本電腦,我看着我的舊筆記本電腦,發現這個JAR jai-imageio.jar在jre/ext/lib(我知道不好主意)。我把它移到我的項目/ lib中,它工作! 我想這個jai-imageio.jar包含額外的圖像閱讀器。

5

從的Javadoc ImageIO.read()

返回BufferedImage作爲 結果與 ImageReader當前已註冊的那些中從自動 選擇解碼所提供的文件。 File包裝在 ImageInputStream。如果沒有註冊 ImageReader聲稱能夠 讀取結果流,null是 返回。

嘗試創建一個ImageInputStream,然後將其傳遞到ImageIO.read()方法,而不是發送文件本身。

+0

我認爲它的環境問題。我正試圖將我所有的工作轉移到新的筆記本電腦上。我剛剛在我以前的筆記本電腦中測試過相同的代碼,它工作正常。我可能會錯過EXT文件夾中的一些罐子。我會繼續尋找。感謝您的迴應。 – Marquinio 2010-10-29 06:45:45

3

太棒了,我有同樣的問題,其中它支持日食中的24個圖像格式,但在命令提示符下僅支持12個圖像格式。一旦我將jai_imageio.jar放在maven的測試路徑中,maven也開始支持24種圖像格式。

+1

您也可以使用ImageIO.getReaderFormatNames()獲取環境中ImageReader支持的所有格式。 – Sanjeev 2011-08-04 14:41:54