这曾经工作,现在它无法正常工作。我没有更改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
?谁知道?上面发布的代码都没有在我的编辑中被更改,因此我不明白为什么它在更改之前有效以及为什么它现在不起作用。任何帮助深表感谢!谢谢!
答案 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);