0

我想从以 base 64 编码的字符串中获取图像。

我正在使用这种方法:

String image = ABAfXWQAQH11kAEB9dZABAfXWQAQH11kAEB9dZABAfXW ...

public void change(){
 byte [] image = DatatypeConverter.parseBase64Binary(image);
 System.out.println(image+" bytes");
 InputStream in = new ByteArrayInputStream(imagen);
 System.out.println(in+" inStream");
 BufferedImage finalImage= ImageIO.read(in);
 System.out.println(finalImage+" buffer");
}

使用它我得到这个输出

[B@ca2dce bytes
java.io.ByteArrayInputStream@18558d2 inStream
null buffer
Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)
    at MyCLass.change(MyClass.java:48)
    at MyClass.<init>(MyClass.java:26)
at MyClass.main(MyClass.java:59)

为什么 bufferedImage 为空?

4

1 回答 1

1

文档中

如果没有注册的 ImageReader 声称能够读取结果流,则返回 null。

所以我的猜测是没有注册的 ImageReader 声称能够阅读它......

假设您的InputStream代码没有您在问题中遇到的错字(imagen而不是image),这留下了我可以轻松想到的三个选项:

  • 您的图像数据开始时已损坏
  • 您已将其错误地编码为 base64
  • DatatypeConverter.parseBase64不太适合您拥有的 base64 格式。(这不是我以前使用过的转换器。base64 有很多选项 - 例如这个公共域之一
  • 数据到达时一切正常ImageIO.read,但它不是受支持的图像格式。

您应该弄清楚是哪种情况 - 特别是,如果您完全跳过 base64 编码会发生什么?或者,如果将 base64 编码然后解码的数据与原始数据进行比较会发生什么?(至少是一样的长度吗?)如果你把base64解码的数据写到一个文件中,你能在你喜欢的图像程序中打开它吗?

于 2012-05-16T21:21:53.630 回答