Java / ImageIO获取图像尺寸而不读取整个文件?

有没有办法在不读取整个文件的情况下获取图像的尺寸?

URL url=new URL(<BIG_IMAGE_URL>); BufferedImage img=ImageIO.read(url); System.out.println(img.getWidth()+" "+img.getHeight()); img=null; 
 try(ImageInputStream in = ImageIO.createImageInputStream(resourceFile)){ final Iterator<ImageReader> readers = ImageIO.getImageReaders(in); if (readers.hasNext()) { ImageReader reader = readers.next(); try { reader.setInput(in); return new Dimension(reader.getWidth(0), reader.getHeight(0)); } finally { reader.dispose(); } } } 

感谢sfussenegger的build议

使用ImageReader.getHeight(int)和ImageReader.getWidth(int)通常只读取图像标题(我正在查看JDK6源代码)。 所以ImageReader很可能是最好的select。

你将不得不看看ImageReader.getImageMetadata() 。 不幸的是,Java Image API并不容易使用。

您可以在javax.imageio.metadata的包文档中find元数据格式的描述。

有第三方库更容易使用,如MediaUtil (3年前更新,但它为我工作的很好)。