Java/ImageIO在不读取整个文件的情况下获取图像维度?

Java/ImageIO在不读取整个文件的情况下获取图像维度?,java,image,dimensions,javax.imageio,Java,Image,Dimensions,Javax.imageio,有没有一种方法可以在不读取整个文件的情况下获取图像的尺寸 URL url=new URL(<BIG_IMAGE_URL>); BufferedImage img=ImageIO.read(url); System.out.println(img.getWidth()+" "+img.getHeight()); img=null; URL=newurl(); BuffereImage img=ImageIO.read(url); System.out.println(img.getW

有没有一种方法可以在不读取整个文件的情况下获取图像的尺寸

URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;
URL=newurl();
BuffereImage img=ImageIO.read(url);
System.out.println(img.getWidth()+“”+img.getHeight());
img=null;
您必须查看。不幸的是,Java图像API根本不容易使用

您可以在的包文档中找到元数据格式的说明

有一些第三方库更易于使用,例如(上次更新是在3年前,但对我来说效果很好)。

使用并且通常只读取图像标题(我正在查看JDK6源代码)。所以这很可能是最好的选择。

try(ImageInputStream in=ImageIO.createImageInputStream(resourceFile)){
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();
        }
    }
} 
最终迭代器读取器=ImageIO.getImageReaders(in); if(readers.hasNext()){ ImageReader=readers.next(); 试一试{ reader.setInput(in); 返回新维度(reader.getWidth(0)、reader.getHeight(0)); }最后{ reader.dispose(); } } }

感谢Sfussenger的建议

您是否尝试过截断图像内容,只是将图像的一小部分(例如10kb)传递给ImageIO.read?可能是Awesome的副本。。。你的密码对我来说很好。我尝试了一些代码,但在某些用例中这些代码失败了。你节省了我的时间。。。谢谢。本文给出的代码在Eclipse中发出了一个警告:迭代器是原始类型。对泛型类型迭代器的引用应该参数化。Eclipse提供的补救选项:在文件中重命名(Ctrl+2,R直接访问),将类型参数添加到“迭代器”,推断泛型类型参数…,将@SuppressWarnings“unchecked”添加到“methodNameHere”。语法上正确的修复方法是什么?代码段也没有提到使用代码所需的类引用。来自Eclipse,似乎是:import javax.imageio.imageio;导入javax.imageio.ImageReader;导入javax.imageio.stream.ImageInputStream@萨姆·巴纳姆。如何在不下载整个图像的情况下获取参数“resourceFile”?OP以一个任意URL开始,而不是一个文件。@EL它接受一个文件、可读的随机访问文件或输入流