2010-10-28 12 views
12

Ok Tengo una imagen que intento leer. El problema es que Image.read (file) devuelve NULL.Problema al utilizar ImageIO.read

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

} 

Así que la imagen existe pero ImageIO.read (archivo) devuelve NULL. ¡¡¡Ningún error arrojado nada !!! ¿Que esta pasando?

Esto es lo que he probado hasta ahora:

  1. Ok mi entorno es Windows 7. Me probado con una de esas imágenes que viene con Windows y su poder leer la imagen.
  2. La imagen1.jpg fue creada por otro sistema. Ahora, asegúrese de qué método están usando .
  3. He intentado convertir la imagen en RGB como se sugiere aquí link text pero falla con "No es un archivo JPEG: comienza con 0x4d 0x4d".
  4. La extensión de imagen es .jpg, pero ventanas dice que es un tipo JPEG? Este es confuso.

Puede alguien ayudarme con esto? Soy nuevo en esto, no estoy seguro de cómo solucionar esto.

Ok acabo cuenta de que ImageIO.getImageReaders (corriente) devuelve un iterador vacía. Esto significa que no pudo encontrar un lector adecuado? ¿Cómo se supone que debo leer esta imagen?

+1

Desde sus etiquetas incluyen 'applet, sólo pensé que me gustaría mencionar que, a menos que usted está escribiendo un applet que es para cargar las imágenes fuera de los discos del usuario final, es probable que sea después de una URL en su lugar. Comentarios adicionales, Windows probablemente tiene una gran cantidad de 'magia' incorporada para tratar con imágenes inválidas. Puede ser útil abrir el JPG en un editor de imágenes confiable y guardarlo como un archivo nuevo.Eso podría corregir el problema (suponiendo que sea una imagen inválida). –

+0

¿Y para qué sirven esos dobleces? – EJP

Respuesta

5

Ok, ya que cambié las computadoras portátiles, miré mi computadora portátil anterior y encontré esta JAR jai-imageio.jar en el jre/ext/lib (sé mala idea). ¡Lo moví a mi proyecto/lib y funcionó! Supongo que este jai-imageio.jar contiene lectores de imágenes adicionales.

5

Desde el Javadocs para ImageIO.read()

Devuelve una BufferedImage como resultado de decodificar un archivo que se suministran con un ImageReader elegido automáticamente de entre los actualmente registrados. El File está envuelto en un ImageInputStream. Si no hay registrados ImageReader dice ser capaz de leer la corriente resultante, null es devueltos.

intente crear un ImageInputStream, a continuación, pasar a que el método ImageIO.read(), en lugar de enviar el archivo en sí.

+0

Creo que es un problema ambiental. Intento migrar todo mi trabajo a una nueva computadora portátil. Acabo de probar el mismo código en mi computadora portátil anterior y funciona bien. Probablemente me faltan algunos frascos en la carpeta EXT. Seguiré buscando. Gracias por tu respuesta. – Marquinio

3

impresionante, que tenía el mismo problema, en el que se apoya 24 formatos de imagen en Eclipse, pero estaba apoyando a sólo 12 formatos de imagen de símbolo del sistema con Maven. Una vez que coloque jai_imageio.jar en la ruta de prueba de maven, maven también ha comenzado a admitir 24 formatos de imagen.

+1

También puede usar ImageIO.getReaderFormatNames() para obtener todos los formatos compatibles con ImageReaders en su entorno. – Sanjeev

Cuestiones relacionadas