Java- 将缓冲图像转换为 byte[],而无需写入磁盘

2022-09-01 12:40:41

我正在尝试使用java通过套接字发送多个图像,但我需要一种更快的方法将图像转换为字节数组,以便我可以发送它们。我尝试了以下代码,但它向我的C写了大约10,000张图像:\驾驶。有没有办法在不写入磁盘的情况下进行此转换?谢谢!

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

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

                    byte[] imageBytes = outputStream.toByteArray();

答案 1

这应该有效:

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

答案 2

下面的代码非常快(几毫秒)

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