我想从以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?
答案 0 :(得分:1)
如果没有已注册的ImageReader声称能够读取生成的流,则返回null。
所以我的猜测是没有注册的ImageReader声称能够读取它......
假设您的InputStream
代码没有您的问题(imagen
而不是image
)中的错字,那么我可以轻松地想到三个选项:
DatatypeConverter.parseBase64
不太适合您所拥有的base64格式。 (这不是我以前用过的转换器.base64有很多选项 - 例如this public domain one)ImageIO.read
时一切正常,但不是支持的图片格式。您应该弄清楚以下哪种情况 - 特别是如果您完全跳过base64编码会发生什么?或者如果你将base64编码然后解码的数据与原始数据进行比较会发生什么? (它至少是相同的长度吗?)如果你将base64解码的数据写入文件,你可以在你喜欢的图像程序中打开它吗?