【问题标题】:Base64 encoding not workingBase64 编码不起作用
【发布时间】: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.Base64com.thoughtworks.xstream.core.util.Base64Encoder,得到完全相同的字符串,所以我想这个工作正常。
  • 好吧,当然是这样的:<img src="data:image/png;base64,[encoded-string]">(见en.wikipedia.org/wiki/Data_URI_scheme#HTML
  • 我不知道这是可能的,只是学到了一些东西。谢谢。 :)

标签: java base64 imaging


【解决方案1】:

问题中显示的代码创建了一个 empty 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();

【讨论】:

  • 天哪,我完全错过了!这就解释了那些重复的字符。我现在无法检查,但我很确定这会解决我的问题,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多