[英]java exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException
[英]Exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException: im == null
嗨,我正在进行一个项目,我需要更改BASE64图像的字符串(jpg)...所以,当我没有做任何更改时,ImageReader正常工作,我的图像显示正确..但是当我对我的BASE64字符串进行更改时,上面的异常来了..我搜索了很多并且知道当ByteStream不是jpeg,png,gif..etc以及如果我有的话,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;
}
看一下ImageIO.read的Javadocs :
返回一个
BufferedImage
作为解码提供的InputStream
的结果,其中ImageReader
是从当前注册的ImageReader
自动选择的。InputStream
包装在ImageInputStream
。 如果没有已注册的ImageReader
声称能够读取生成的流,则返回null
。 [强调我的]
read方法可以返回null
,但是你没有检查它。 其实方法很可能返回null,这就是为什么ImageIO.write
抛出当你传递null进去异常。
首先,您需要检查错误条件并适当地处理它们(包括null返回,但也包括抛出的任何异常,您当前捕获并忽略这些异常)。
现在,如果您从ImageIO.read返回null,则意味着您传入read方法的字节似乎不是任何已知格式的有效图像。 您需要更详细地查看对base64字符串所做的修改,并确保您正在执行的操作有效,并生成有效的图像。 或者,如果您正在获得其他异常,那么您需要适当地处理它。
(作为一般规则,不要丢弃/跳过错误,因为当出现问题时你不知道为什么!)
改变这一行:
ImageIO.write(image, "jpg", new File("d:/CopyOfTestImage.jpg"));
这样的事情
image = ImageIO.read(getClass().getResource("/resources/CopyOfTestImage.jpg"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.