在我的项目中,我收到一个灰度8BPP格式的Base64编码图像。我无法将其转换为BufferedImage。当我从磁盘读取图像(f.ex png)时,我有一些代码可以工作,对它进行base64编码,反之亦然。
无论如何,当我尝试转换我收到的String时,一切似乎都有效,但返回null。它不是被调用的catch,而是返回null的ImageIO.read。
有什么建议吗?我知道base64字符串是有效的,因为我试图将其保存为原始文件并在编辑器中打开它,它可以正确显示图像。
这是我的代码:
public static BufferedImage convertBase64StringToBufferedImage(String base64String){
byte[] pictureBytes = Base64Coder.decode(base64String);
InputStream is = new ByteArrayInputStream(pictureBytes);
BufferedImage image;
try {
image = ImageIO.read(new ByteArrayInputStream(pictureBytes));
} catch (IOException e) {
log.error(e.getMessage(), e);
return null;
}
return image;
}
答案 0 :(得分:0)
作为解码提供的InputStream的结果返回BufferedImage 从当前的那些中自动选择ImageReader 注册。 InputStream包装在ImageInputStream中。 如果没有已注册的ImageReader声称能够读取生成的流,则返回null。
以下是执行的代码:
public static BufferedImage read(ImageInputStream stream)
throws IOException {
if (stream == null) {
throw new IllegalArgumentException("stream == null!");
}
Iterator iter = getImageReaders(stream);
if (!iter.hasNext()) {
return null; // <~~~~~ here's your null
}
ImageReader reader = (ImageReader)iter.next();
ImageReadParam param = reader.getDefaultReadParam();
reader.setInput(stream, true, true);
BufferedImage bi;
try {
bi = reader.read(0, param);
} finally {
reader.dispose();
stream.close();
}
return bi;
}
也许您可以尝试根据适当的mime类型显式获取ImageReader
,并使用该阅读器执行读取代码(如上所示)。