2012-01-19 20 views
6

Tengo la siguiente pieza de código para convertir una imagen en matriz de bytes.Convertir imágenes de Java a tamaño de matriz de bytes, problemas

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

El problema que estoy enfrentando es que el tamaño de la imagen es de alrededor de 2.65MB. Sin embargo, imageBytes.length me está dando un valor de más de 5.5MB. ¿Alguien me puede decir dónde me estoy equivocando?

+1

¿Cómo sabes que el tamaño es de alrededor de 2.65MB? ¿Puedes abrir los bytes resultantes? ¿Se ve bien? – Thilo

+1

¿Estás seguro de que la imagen de entrada realmente está en formato PNG? – Perception

+0

@Thilo: la imagen es una imagen cargada desde mi máquina local. Revisé el archivo tanto en mi máquina local como en el servidor. Tiene un tamaño de 2.65MB. Estoy usando BufferedImage image = ImageIO.read (inputFile); para crear el objeto de imagen desde el archivo. Sí, el byte [] almacenado se ve bien, excepto por el tamaño. –

Respuesta

4

PNG no siempre es un formato fiel de ida y vuelta. Su compresión alghoritm puede producir resultados diferentes.

EDIT: Lo mismo vale para JPEG.

2

Utilicé el siguiente código para solucionar el 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(); 

Cortesía: http://www.programcreek.com/downloads/convert-image-to-byte.txt Parece estar funcionando bien. Por favor, avíseme si alguno de ustedes ve algún problema en este enfoque.

Cuestiones relacionadas