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年前更新,但它为我工作的很好)。