67

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

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

4 に答える 4

121
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に感謝します

于 2009-10-13T12:55:17.860 に答える
17

ImageReader.getHeight(int)ImageReader.getWidth( int)を使用すると、通常は画像ヘッダーのみが読み取られます(JDK6ソースを調べています)。したがって、 ImageReaderがおそらく最良の選択です。

于 2009-10-13T10:23:32.797 に答える
1

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

メタデータ形式の説明は、のパッケージドキュメントにありjavax.imageio.metadataます。

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

于 2009-10-13T10:17:48.117 に答える
0

ImageInputStreamとImageReaderを使用したソリューションは、tmpファイルを作成するため、まだそれほど効率的ではありません。画像が大きい場合や同時実行性が高い場合は、速度が大幅に低下します。代わりに、 metadata-extractorを使用することをお勧めします。

于 2021-09-18T07:52:22.657 に答える