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

时间:2009-10-13 10:01:32

标签: 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;

3 个答案:

答案 0 :(得分:111)

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的建议

答案 1 :(得分:15)

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

答案 2 :(得分:1)

你必须调查ImageReader.getImageMetadata()。不幸的是,Java Image API并不容易使用。

您可以在javax.imageio.metadata的包文档中找到元数据格式的说明。

有第三方库更易于使用,例如MediaUtil(最近3年前更新过,但它对我来说效果很好)。