【问题标题】:Java/ImageIO getting image dimensions without reading the entire file?Java/ImageIO 在不读取整个文件的情况下获取图像尺寸?
【发布时间】:2010-12-06 06:23:18
【问题描述】:

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

URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;

【问题讨论】:

标签: java image dimensions javax.imageio


【解决方案1】:

ImageInputStream 和 ImageReader 的解决方案仍然不是那么有效,因为它们会创建 tmp 文件。图片较大或并发较高时速度会变慢,建议使用metadata-extractor。

【讨论】:

    【解决方案2】:
    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 的建议

    【讨论】:

    • 太棒了...你的代码让我很完美。我尝试了几个代码,但这些代码在某些用例中失败了。你节省了我的时间...谢谢。
    • 呈现的代码在 Eclipse 中发出警告:迭代器是原始类型。对泛型类型 Iterator 的引用应该被参数化。 Eclipse 提供的补救选项:在文件中重命名(Ctrl+2,R 直接访问),将类型参数添加到 'Iterator',推断通用类型参数...,将 @SuppressWarnings 'unchecked' 添加到 'methodNameHere'。什么是语法正确的解决方法?
    • 另外,代码 sn-p 也没有提到使用代码所需的类引用。从 Eclipse 中,似乎是: import javax.imageio.ImageIO;导入 javax.imageio.ImageReader;导入 javax.imageio.stream.ImageInputStream;
    • @Sam Barnum。如何在不下载整个图像的情况下获取参数“resourceFile”? OP 以任意 URL 开头,而不是文件。
    • @EL 它接受一个文件、可读的 RandomAccessFile 或 InputStream
    【解决方案3】:

    您必须查看ImageReader.getImageMetadata()。不幸的是,Java Image API 一点也不好用。

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2010-09-11
        • 1970-01-01
        • 2012-05-22
        • 1970-01-01
        • 1970-01-01
        • 2015-11-29
        • 2023-03-10
        • 1970-01-01
        相关资源
        最近更新 更多