2009-07-31 17 views
13

Suena simple ¿no? UtiliceConvertir matriz de bytes a la imagen en Java - sin saber el tipo

ImageIO.read(new ByteArrayInputStream(bytes)); 

Aquí está la arruga. Por alguna razón se está detectando un archivo JPEG como BMP, y que es la primera ImageReader devuelto cuando llamo

ImageInputStream iis = ImageIO.createImageInputStream(new ByteArrayInputStream(bytes)); 
Iterator<ImageReader> readers=ImageIO.getImageReaders(iis); 

Esto hará que la imagen salga dañado. ¿Hay alguna manera de decir a través de Java que no mire directamente a los bytes del encabezado, y si falla, ¿alguien sabe de una buena referencia para los encabezados de bytes para las diferentes imágenes?

Solo les dejo saber que todavía estoy trabajando en esto. Te dejaré saber si/cuando tengo una respuesta. Les agradezco a todos ustedes por sus respuestas hasta el momento.

Respuesta

5

This page podría ser un buen punto de partida para los números mágicos. Here es algo similar de Wikipedia.

3

No he jugado con ImageIO por un tiempo, y no lo he probado, pero parece recordar que algo así funciona. (Como dice que sabe que su archivo es un jpg y no un mapa de bits, estoy usando esa información para ayudar a encontrar el cargador adecuado).

String inFormat = "jpg"; 

Iterator inReaders = ImageIO.getImageReadersByFormatName(inFormat); 

... 

nextInReader.setInput(iis); 
+0

Eso es correcto, pero el problema es que la recopilación de datos es una mezcla de bmp, png, jpg, etc. Así que cualquiera de ellos PODRÍA ser válido, el truco es decir cuál basándose únicamente en los bytes. – PHeath

0

¿Es el lector BMP el únicodevuelto por getImageReaders()? Tal vez obtienes más de uno y puedes hacer una elección basada en eso.

Cuestiones relacionadas