2010-10-28 11 views
12

Ok ho un'immagine che sto cercando di leggere. Il problema è che Image.read (file) restituisce NULL.Problema con ImageIO.read

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

} 

Quindi l'immagine esiste ma ImageIO.read (file) restituisce NULL. Nessun errore generato niente !!! Cosa sta succedendo?

Questo è quello che ho provato finora:

  1. Ok il mio ambiente è Windows 7. testato con una di quelle immagini che viene fornito con Windows e il suo grado di leggere l'immagine.
  2. L'immagine1.jpg è stata creata da un altro sistema. Ora sicuro di quale metodo si sta utilizzando .
  3. Ho provato a convertire l'immagine in RGB come suggerito qui link text ma non riesce con "Non un file JPEG: inizia con 0x4d 0x4d".
  4. L'estensione dell'immagine è .jpg, ma le finestre sono di tipo JPEG? Questo è confuso.

Qualcuno può aiutare con questo? Sono nuovo di questo, non sono sicuro di come sistemarlo.

Ok ho appena capito che ImageIO.getImageReaders (stream) restituisce un Iterator vuoto. Ciò significa che non è stato possibile trovare un lettore adatto? Come dovrei leggere questa immagine?

+1

Poiché i tag includono "applet", ho pensato di dire che, a meno che non stiate scrivendo un'applet che serve a caricare le immagini dai dischi dell'utente finale, probabilmente vi troverete dopo un URL. Ulteriori commenti, Windows ha probabilmente una grande quantità di "magia" integrata per gestire immagini non valide. Potrebbe pagare per aprire il JPG in un editor di immagini affidabile e salvarlo come un nuovo file.Questo potrebbe correggere il problema (supponendo che sia un'immagine non valida). –

+0

E a cosa servono quei doppi tagli? – EJP

risposta

5

Ok da quando ho acceso i laptop, ho guardato il mio vecchio portatile e ho trovato questo JAR jai-imageio.jar nel jre/ext/lib (non so idea). L'ho spostato nel mio progetto/lib e ha funzionato! Immagino che questo jai-imageio.jar contenga ulteriori lettori di immagini.

5

Dal Javadocs per ImageIO.read()

restituisce un BufferedImage come risultato di decodificare un file fornito con un ImageReader scelto automaticamente tra quelle attualmente registrato. Il File è incapsulato in un ImageInputStream. Se nessuno registrato ImageReader dichiara di essere in grado di leggere il flusso risultante, null è restituito .

provare a creare un ImageInputStream, quindi passare che sul metodo di ImageIO.read(), invece di inviare il file stesso.

+0

Penso che il suo problema ambientale. Sto cercando di migrare tutto il mio lavoro in un nuovo laptop. Ho appena testato lo stesso codice nel mio portatile precedente e funziona perfettamente. Probabilmente mi mancano alcuni vasi nella cartella EXT. Continuerò a cercare. Grazie per la tua risposta. – Marquinio

3

Impressionante, ho avuto lo stesso problema, in cui supportava 24 formati di immagine in eclissi ma supportava solo 12 formati di immagine nel prompt dei comandi con Maven. Una volta che ho inserito jai_imageio.jar nel percorso di test di Maven, Maven ha iniziato a supportare anche 24 formati di immagine.

+1

È inoltre possibile utilizzare ImageIO.getReaderFormatNames() per ottenere tutti i formati supportati da ImageReaders nel proprio ambiente. – Sanjeev