我使用以下代码对Base64中的java.awt.Image
进行编码:
private String asBase64(Image image) throws IOException {
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null),
image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "PNG", out);
byte[] bytes = out.toByteArray();
return Base64.encodeBytes(bytes);
}
但是返回的String在某种程度上是错误的:它似乎太小了(在20KB文件中只有308个字符)并且在中间包含大量重复字符(~200 A
个字符)。< / p>
我做了一些调试,发现bufferedImage
至少具有正确的维度,但out
在执行ImageIO.write(...)
后仅包含308个字节。这个数字随着图像的增大而增加,但是这些字符一直是重复的而且太少了。
我错过了什么吗?
答案 0 :(得分:2)
问题中显示的代码会创建空 BufferedImage
,而PNG格式可以非常有效地对空图像进行编码。
您可能希望它包含原始图像的副本:
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null),
image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics graphics = bufferedImage.getGraphics();
graphics.drawImage( image, 0, 0, null);
graphics.dispose();