Base64编码不起作用

时间:2014-04-03 18:34:56

标签: java base64 imaging

我使用以下代码对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个字节。这个数字随着图像的增大而增加,但是这些字符一直是重复的而且太少了。

我错过了什么吗?

1 个答案:

答案 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();