2009-07-31 11 views
13

I suoni sono semplici? UtilizzareConverti array di byte in immagine in Java - senza conoscere il tipo

ImageIO.read(new ByteArrayInputStream(bytes)); 

Ecco la ruga. Per qualche ragione si rileva una jpeg come BMP, e che è il primo ImageReader restituito quando chiamo

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

Ciò causa l'immagine di uscire danneggiato. C'è un modo per dire attraverso java a corto di guardare direttamente i byte per l'intestazione, e in mancanza qualcuno sa di un buon riferimento per le intestazioni dei byte per le diverse immagini?

Solo per farvi sapere che sto ancora lavorando su questo. Ti farò sapere se/quando avrò una risposta. Ringrazio tutti voi per le vostre risposte finora.

risposta

5

This page potrebbe essere un buon punto di partenza per numeri magici. Here è qualcosa di simile da Wikipedia.

3

Non ho giocato con ImageIO in un po ', e non ho ancora provato questo, ma mi sembra di ricordare qualcosa di simile a questo lavoro. (Dal momento che dici di sapere che il tuo file è un jpg e non un bitmap, sto usando queste informazioni per trovare il caricatore giusto).

String inFormat = "jpg"; 

Iterator inReaders = ImageIO.getImageReadersByFormatName(inFormat); 

... 

nextInReader.setInput(iis); 
+0

Questo è corretto ma il problema è che la raccolta dei dati è un mix di bmp, png, jpg, ecc. Quindi ognuno di essi potrebbe essere valido, il trucco sta dicendo quale si basa esclusivamente sui byte. – PHeath

0

è il lettore BMP l'unicoquello restituito dalla getImageReaders()? Forse ne prendi più di uno e puoi fare una scelta in base a ciò.