快速将图像转换为字节数组

时间:2014-05-22 09:47:30

标签: java image

我正在将图像对象转换为如下字节数组:

private byte[] getImageBytes() throws IOException {
    byte[] bytes;
    try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
        ImageIO.write(copyImage(image), "png", baos);
        baos.flush();
        bytes = baos.toByteArray();
    }
    return bytes;
}

private BufferedImage copyImage(Image img) {
    BufferedImage copyOfImage = new BufferedImage(getSize().width, getSize().height, BufferedImage.TYPE_INT_RGB);
    Graphics g = copyOfImage.createGraphics();
    g.drawImage(img, 0, 0, getWidth(), getHeight(), null);
    return copyOfImage;
}

问题是,转换90KB图像需要300多秒。如果图像的大小约为1.2MB,那么转换只需要适度的时间(约450ms)。 我测量了copyImage方法的时间。它只需要大约1毫秒。问题似乎是ImageIO.write方法。

你知道有什么方法可以加快速度吗?

1 个答案:

答案 0 :(得分:1)

getImageBytes()中,您将图像压缩为PNG,这可能需要一些时间。您可以实现的最快的ImageIO.write调用是

ImageIO.write(copyImage(image), "bmp", baos);

没有压缩的地方。尽管如此,ImageIO仍然包含不是为速度而设计的图像格式的参考实现。