有沒有辦法在不讀取整個文件的情況下獲取圖像的尺寸?Java/ImageIO在不讀取整個文件的情況下獲取圖像尺寸?
URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;
有沒有辦法在不讀取整個文件的情況下獲取圖像的尺寸?Java/ImageIO在不讀取整個文件的情況下獲取圖像尺寸?
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您的建議
太棒了。 ..你的代碼使我完美。我嘗試了幾個代碼,但是這些代碼在某些使用情況下失敗了。你節省了我的時間......謝謝。 – vissu 2011-12-20 12:02:05
提供的代碼在Eclipse中發出警告:Iterator是一種原始類型。參考泛型類型迭代器
此外,代碼片段沒有提到使用代碼所需的類引用。從Eclipse,似乎是:import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; – David 2012-08-22 23:41:08
您必須查看ImageReader.getImageMetadata()
。不幸的是,Java Image API並不容易使用。
您可以在包文檔javax.imageio.metadata
中找到元數據格式的說明。
有第三方庫更容易使用,如MediaUtil(最近3年前更新,但它對我很好)。
使用ImageReader.getHeight(int)和ImageReader.getWidth(int)通常只會讀取圖像頭(我正在查看JDK6源代碼)。所以ImageReader是最有可能的最佳選擇。
你嘗試截取圖像內容,只是路過一小部分,說10KB,圖像以ImageIO.read? – Mohsen 2009-10-13 10:11:33
可能重複[如何使用java獲取圖像的高度和寬度?](http://stackoverflow.com/questions/672916/how-to-get-image-height-and-width-using-java) – ripper234 2012-01-31 08:52:23