图片==空!在ImageIO.read中从ByteArrayInputStream

时间:2019-05-06 12:17:43

标签: java image

我正在尝试使用运行长度编码压缩图像并将其另存为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") );

如果有人想复制-https://gitlab.com/Avivi/boniekrunlength

,这也是github repo链接

1 个答案:

答案 0 :(得分:1)

BufferedImage image = ImageIO.read(input);行可能返回null。这可能是由于映像文件损坏或找不到文件引起的。确保正确读取文件并检查返回的ImageIO.read(...)值是否为非空。

来自ImageIO.read()的{​​{3}}

  

文件包装在ImageInputStream中。如果没有注册的ImageReader声称能够读取结果流,则返回null。