ファイル全体を読み取らずに画像の寸法を取得する方法はありますか?
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()
を調べる必要があります。残念ながら、Java Image APIは使いやすいものではありません。
メタデータ形式の説明は、 javax.imageio.metadata
。
MediaUtil などの使いやすいサードパーティライブラリがあります(3年前に最後に更新されましたが、うまく機能しました)。