web-dev-qa-db-fra.com

Java- Converti bufferedimage en octet [] sans écrire sur le disque

J'essaie d'envoyer plusieurs images sur un socket en utilisant Java, mais j'ai besoin d'un moyen plus rapide de convertir les images en tableau d'octets pour pouvoir les envoyer. J'ai essayé le code suivant mais il a écrit environ 10 000 images sur mon lecteur C: \. Y at-il un moyen de faire cette conversion sans écrire sur le disque? Merci!

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

                    //ImageIO.setUseCache(false);
                    ImageIO.write(bi.getImage(), "jpg", outputStream);

                    byte[] imageBytes = outputStream.toByteArray();
23
tier1

Cela devrait fonctionner:

byte[] imageBytes = ((DataBufferByte) bufferedImage.getData().getDataBuffer()).getData();
43
stacker

Le code ci-dessous est très rapide (quelques millisecondes)

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();
}
2
EderBaum

Essayez d'utiliser: 

ImageIO.setUseCache(false);

Avant d'écrire, peut-être que ça aide.

1
soulcheck
BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
byte[] bytes = new byte[buf.capacity()];
buf.get(bytes, 0, bytes.length);
0
Zaz Gmy
ByteArrayOutputStream baos;
ImageIO.write(bufferedImage, "png", baos);
byte[] imageBytes = baos.toByteArray();
0
bugCracker