我正在尝试使用运行长度编码压缩图像并将其另存为JPEG。
但是当我尝试从BYteArrayInputStream读取BufferedImage时,程序失败,在下面的行中返回以下内容(BufferedImage bImage2 = ImageIO.read(bis);),因为ImageIO.read(bis)返回null-bis不为null:< / p>
Exception in thread "main" java.lang.IllegalArgumentException: image == null!
at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925)
at javax.imageio.ImageIO.getWriter(ImageIO.java:1592)
at javax.imageio.ImageIO.write(ImageIO.java:1520)
at Compression.main(Compression.java:17)
这是我当前正在使用的代码:
File input = new File("testEmily.jpeg");
BufferedImage image = ImageIO.read(input);
byte[] byteArray = RunLength.toByteArrayAutoClosable(image, "jpeg");
byte[] compressedBytes2 = RunLength.compress(byteArray);
ByteArrayInputStream bis = new ByteArrayInputStream(compressedBytes2);
BufferedImage bImage2 = ImageIO.read(bis);
ImageIO.write(bImage2, "jpeg", new File("compressedEmily.jpeg") );
,这也是github repo链接
答案 0 :(得分:1)
第BufferedImage image = ImageIO.read(input);
行可能返回null。这可能是由于映像文件损坏或找不到文件引起的。确保正确读取文件并检查返回的ImageIO.read(...)
值是否为非空。
来自ImageIO.read()
的{{3}}
文件包装在ImageInputStream中。如果没有注册的ImageReader声称能够读取结果流,则返回null。