convertir - Java: convierte el bufferedimage a byte[] sin escribir en el disco
byte[] to image java (6)
Estoy intentando enviar varias imágenes a través de un socket usando java pero necesito una forma más rápida de convertir las imágenes a una matriz de bytes para poder enviarlas. Probé el siguiente código, pero escribí aproximadamente 10,000 imágenes en mi unidad C: /. ¿Hay alguna manera de hacer esta conversión sin escribir en el disco? ¡Gracias!
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//ImageIO.setUseCache(false);
ImageIO.write(bi.getImage(), "jpg", outputStream);
byte[] imageBytes = outputStream.toByteArray();
El siguiente código es muy rápido (pocos milisegundos)
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public byte[] toByteArray(BufferedImage image) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(baos);
encoder.encode(image);
return baos.toByteArray();
}
Esto debería funcionar:
byte[] imageBytes = ((DataBufferByte) bufferedImage.getData().getDataBuffer()).getData();
Trate de usar:
ImageIO.setUseCache(false);
Antes de escribir, tal vez eso ayude.
Utilice Apache Commons IO Utils Apache Commons
IOUtils.copy (inputStream, outputStream);
La API de IO Utils soporta fácilmente los buffers grandes
BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
byte[] bytes = new byte[buf.capacity()];
buf.get(bytes, 0, bytes.length);
ByteArrayOutputStream baos;
ImageIO.write(bufferedImage, "png", baos);
byte[] imageBytes = baos.toByteArray();