web-dev-qa-db-ja.com

Java / ImageIOはファイル全体を読み取らずに画像の寸法を取得しますか?

ファイル全体を読み取らずに画像の寸法を取得する方法はありますか?

URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;
62
Pierre
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に感謝

112
Sam Barnum

ImageReader.getHeight(int) および ImageReader.getWidth(int) を使用すると、通常、画像ヘッダーのみが読み取られます(JDK6のソースを見ています)。 ImageReader が最良の選択である可能性が高いです。

16
sfussenegger

ImageReader.getImageMetadata() を調べる必要があります。残念ながら、Java Image APIは使いやすいものではありません。

メタデータ形式の説明は、 javax.imageio.metadata

MediaUtil などの使いやすいサードパーティライブラリがあります(3年前に最後に更新されましたが、うまく機能しました)。

1