使用parseBase64Binary解码图像

时间:2012-05-16 21:17:55

标签: java base64

我想从以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为null?

1 个答案:

答案 0 :(得分:1)

来自the documentation

  

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

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

假设您的InputStream代码没有您的问题(imagen而不是image)中的错字,那么我可以轻松地想到三个选项:

  • 您的图片数据以
  • 开头已损坏
  • 您已将其错误地编码为base64
  • DatatypeConverter.parseBase64不太适合您所拥有的base64格式。 (这不是我以前用过的转换器.base64有很多选项 - 例如this public domain one
  • 数据到达ImageIO.read时一切正常,但不是支持的图片格式。

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