ImageIO.createImageInputStream返回null,怎么回事?

时间:2011-05-12 01:34:45

标签: java javax.imageio

这曾经工作,现在它无法正常工作。我没有更改Image假设流的部分,所以我不知道为什么这不起作用。这是我的代码片段:

File f = new File(filepath);
applicantImage=new ImageDetail(filepath);

Iterator<ImageReader> readers =
     ImageIO.getImageReadersBySuffix(applicantImage.getFile_extension());
ImageReader reader = readers.next();

ImageInputStream iis = ImageIO.createImageInputStream(f);

filepath是图像的绝对文件路径,并确认图像位于服务器上的该位置。一切都很好,花花公子,直到它ImageIO.createImageInputStream(f)。它现在正在返回null。我读了一个文件中的javadoc。那么为什么它现在返回null?谁知道?上面发布的代码都没有在我的编辑中被更改,因此我不明白为什么它在更改之前有效以及为什么它现在不起作用。任何帮助深表感谢!谢谢!

2 个答案:

答案 0 :(得分:4)

尝试使用InputStream构建的File

ImageIO.createImageInputStream(new FileInputStream(f));

这是一个相关的example

附录:仔细观察ImageIO.createImageInputStream()确实表示允许File。实际上,您的原始代码适用于我的平台(Mac OS X),这使我推测null结果可能是您的平台ImageInputStreamSpi实现所特有的。对于不存在的File f

ImageIO.createImageInputStream(f);

我得到了一个合理的例外:

Exception in thread "main" java.lang.IllegalStateException: Input not set!
    at com.sun.imageio.plugins.gif.GIFImageReader.read(GIFImageReader.java:784)
    at javax.imageio.ImageReader.read(ImageReader.java:923)
    at cli.GifBounds.search(GifBounds.java:22)
    at cli.GifBounds.main(GifBounds.java:14)

答案 1 :(得分:0)

您需要在以下之前设置输入:

reader.setInput(iis);
dimension = new Dimension(reader.getWidth(0), reader.getHeight(0));
System.out.print(dimension);