2012-01-19 12 views
6

Ho il codice sottostante per convertire un'immagine in una matrice di byte.Java converte l'immagine in problemi di dimensioni dell'array di byte

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageIO.write(image, "png", baos); 
baos.flush(); 
byte[] imageBytes = baos.toByteArray(); 
baos.close(); 

Il problema che sto affrontando è che la dimensione dell'immagine è di circa 2,65 MB. Tuttavia, imageBytes.length mi dà un valore superiore a 5,5 MB. Qualcuno può farmi sapere dove sto andando male?

+1

Come fai a sapere che la dimensione è di circa 2,65 MB? Puoi aprire i byte risultanti? Sembra ok? – Thilo

+1

Sei sicuro che l'immagine di input sia realmente in formato PNG? – Perception

+0

@Thilo - L'immagine è un'immagine caricata dal mio computer locale. Ho controllato il file sia sul mio computer locale che sul server. Ha una dimensione di 2,65 MB. Sto usando BufferedImage image = ImageIO.read (inputFile); per creare l'oggetto immagine dal file. Sì, il byte [] memorizzato sembra OK tranne la dimensione. –

risposta

4

PNG non è sempre un fedele formato di andata e ritorno. Il suo alghoritm di compressione può dare risultati diversi.

MODIFICA: Lo stesso vale per JPEG.

2

Ho usato il seguente codice per risolvere il problema.

FileInputStream fis = new FileInputStream(inputFile); 

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
byte[] buf = new byte[1024]; 
try { 
    for (int readNum; (readNum = fis.read(buf)) != -1;) { 
     bos.write(buf, 0, readNum); 
    } 
} catch (Exception ex) { 

} 
byte[] imageBytes = bos.toByteArray(); 

Cortesia: http://www.programcreek.com/downloads/convert-image-to-byte.txt Sembra funzionare bene. Per favore fatemi sapere se qualcuno di voi vede problemi in questo approccio.

Problemi correlati