ファイル全体を読み取らずに画像のサイズを取得する方法はありますか?
URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;
ファイル全体を読み取らずに画像のサイズを取得する方法はありますか?
URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;
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に感謝します
ImageReader.getHeight(int)とImageReader.getWidth( int)を使用すると、通常は画像ヘッダーのみが読み取られます(JDK6ソースを調べています)。したがって、 ImageReaderがおそらく最良の選択です。
を調べる必要がありますImageReader.getImageMetadata()
。残念ながら、JavaImageAPIはまったく使いやすいものではありません。
メタデータ形式の説明は、のパッケージドキュメントにありjavax.imageio.metadata
ます。
MediaUtil(3年前に最後に更新されましたが、私にとってはうまく機能しました)など、より使いやすいサードパーティのライブラリがあります。
ImageInputStreamとImageReaderを使用したソリューションは、tmpファイルを作成するため、まだそれほど効率的ではありません。画像が大きい場合や同時実行性が高い場合は、速度が大幅に低下します。代わりに、 metadata-extractorを使用することをお勧めします。