嗨,我正在开发一个项目,我需要更改BASE64图像的字符串(jpg)...所以,当我没有做任何更改时,ImageReader正常工作,我的图像显示正确..但是当我对我的BASE64字符串进行更改时,上面的异常来了..我搜索了很多,并且知道当ByteStream不是jpeg,png,gif..etc..so时,im == null如果我有一个新类型的ByteStream ...我该怎么用?或者我的BASE64字符串是什么,我需要将其转换为图像..所以我该怎么做?
这是我的代码段:这是将BASE64字符串转换为图片
public static BufferedImage decodeToImage(String imageString) throws IOException {
BufferedImage image = null;
byte[] imageByte;
try {
BASE64Decoder decoder = new BASE64Decoder();
imageByte = decoder.decodeBuffer(imageString);
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
image = ImageIO.read(bis);
bis.close();
}
catch (Exception e) {
e.printStackTrace();
}
ImageIO.write(image, "jpg", new File("d:/CopyOfTestImage.jpg"));
return image;
}
答案 0 :(得分:2)
返回
BufferedImage
作为解码提供的InputStream
的结果,其中ImageReader
自动从当前注册的那些中选择InputStream
。ImageInputStream
包含在ImageReader
中。 如果没有已注册的null
声称能够阅读结果流,则会返回null
。 [强调我的]
read方法可以返回ImageIO.write
,但您没有检查这个。实际上,方法 可能返回null,这就是为什么{{1}}在将null传递给它时抛出异常的原因。
首先,您需要检查错误条件并适当地处理它们(包括null返回,但也包括抛出的任何异常,您当前捕获并忽略这些异常)。
现在,如果从ImageIO.read返回null,则表示传入read方法的字节似乎不是任何已知格式的有效图像。您需要更详细地查看对base64字符串所做的修改,并确保您正在执行的操作有效,并生成有效的图像。或者,如果你得到一些其他异常,那么你需要适当地处理它。
(作为一般规则,不要丢弃/跳过错误,因为当出现问题时你不知道为什么!)
答案 1 :(得分:1)
更改此行:
ImageIO.write(image, "jpg", new File("d:/CopyOfTestImage.jpg"));
这样的事情
image = ImageIO.read(getClass().getResource("/resources/CopyOfTestImage.jpg"));