提问人:FNA 提问时间:9/25/2023 最后编辑:FNA 更新时间:9/26/2023 访问量:24
BufferedImage 空指针异常
bufferedimage null pointer exception
问:
我有一个从 soap 返回的字符串形式的图像。我需要解码此图像并将其用作 bufferedimage。但是当我进行转换时,bufferedimage 显示为 null。我该如何解决这个问题?我在哪里犯了错误?
String content=getContent(soapResponse);
byte[] inputStreamResponse=content.getBytes(StandardCharsets.UTF_8);
BufferedImage image = null;
try {
image = ImageIO.read(new ByteArrayInputStream(inputStreamResponse));
} catch (IOException e) {
e.printStackTrace();
}
BufferedImage scaledImg = Scalr.resize(image, 300); //300dpi
private String getContent(SOAPMessage soapResponse) {
String content=null;
if (labelelement.getLocalName().equals("content")) {
String ss= labelelement.getLastChild().getNodeValue();
content= new String(Base64.getDecoder().decode(ss),StandardCharsets.UTF_8);
}
return content;
}
答:
0赞
Harald K
9/26/2023
#1
ImageIO 支持一组有限的内置格式(自 Java 9 以来的 BMP、GIF、JPEG、PNG 和 TIFF)。可以通过安装第三方插件来添加更多格式。 如果没有可用于您尝试读取的格式的插件,将返回。这不是一个错误,而是有意的、记录在案的行为。您可能希望在代码中为此添加测试,除非您确定 SOAP 服务仅提供受支持格式的有效图像。ImageIO.read(...)
null
也就是说,代码中的问题可能是将 base64 数据解码为 ...这可能损坏了图像数据。相反,解码为字节数组、缓冲区或 .然后在 main 方法中读取此数组/缓冲区/流。getContent
String
ByteInputStream
像这样:
byte[] content = getContent(soapResponse);
BufferedImage image = null;
try (InputStream stream = new ByteArrayInputStream(content)) {
image = ImageIO.read(stream);
} catch (IOException e) {
e.printStackTrace();
}
if (image == null) {
// TODO: Handle image could not be decoded situation
}
BufferedImage scaledImg = Scalr.resize(image, 300); //300dpi
/// ...
private byte[] getContent(SOAPMessage soapResponse) {
if (labelelement.getLocalName().equals("content")) {
String ss = labelelement.getLastChild().getNodeValue();
return Base64.getDecoder().decode(ss);
}
return null;
}
评论
getContent
ByteInputStream
ImageIO.read(...)
null