【发布时间】:2014-04-03 18:34:56
【问题描述】:
我正在使用以下代码在 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);
}
但是返回的字符串有些错误:它似乎太小(20KB 文件上只有 308 个字符)并且中间包含大量重复字符(~200 A 字符)。
我做了一些调试,发现bufferedImage至少有正确的尺寸,但out在执行ImageIO.write(...)后只包含308个字节。这个数字随着更大的图像而增加,但字符总是重复且太少。
我错过了什么吗?
【问题讨论】:
-
我正在尝试在 html
img标记中使用它,但没有出现任何内容。我将它与使用在线转换器的预期结果进行了比较,它看起来完全不同。它是org.apache.hadoop.hbase.util.Base64,但我也尝试使用org.apache.commons.codec.binary.Base64和com.thoughtworks.xstream.core.util.Base64Encoder,得到完全相同的字符串,所以我想这个工作正常。 -
好吧,当然是这样的:
<img src="data:image/png;base64,[encoded-string]">(见en.wikipedia.org/wiki/Data_URI_scheme#HTML) -
我不知道这是可能的,只是学到了一些东西。谢谢。 :)