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

Pie*_*rre 62 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;
Run Code Online (Sandbox Code Playgroud)

Sam*_*num 112

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();
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

感谢sfussenegger提出的建议

  • 太棒了......你的代码让我很完美.我尝试了几个代码,但在某些用例中这些代码失败了.你节省了我的时间......谢谢. (3认同)
  • @萨姆·巴纳姆。如何在不下载整个图像的情况下获取参数“resourceFile”?OP 以任意 URL 开头,而不是文件。 (2认同)
  • @EL它接受一个File,可读的RandomAccessFile或InputStream (2认同)

sfu*_*ger 16

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