我正在将图像对象转换为如下字节数组:
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方法。
你知道有什么方法可以加快速度吗?
答案 0 :(得分:1)
在 getImageBytes()中,您将图像压缩为PNG,这可能需要一些时间。您可以实现的最快的ImageIO.write调用是
ImageIO.write(copyImage(image), "bmp", baos);
没有压缩的地方。尽管如此,ImageIO仍然包含不是为速度而设计的图像格式的参考实现。