web-dev-qa-db-ja.com

Java-ディスクに書き込まずにbufferedimageをbyte []に​​変換します

Javaを使用してソケット経由で複数の画像を送信しようとしていますが、画像をバイト配列に変換して送信できるようにするための高速な方法が必要です。次のコードを試してみましたが、 C:\ドライブに約10,000枚の画像を保存しますが、ディスクに書き込まずにこの変換を行う方法はありますか?ありがとう!

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

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

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

これはうまくいくはずです:

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

以下のコードは本当に高速です(数ミリ秒)

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

使用してみてください:

ImageIO.setUseCache(false);

書く前に、それが役立つかもしれません。

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