2009-10-13 110 views
57

有沒有辦法在不讀取整個文件的情況下獲取圖像的尺寸?Java/ImageIO在不讀取整個文件的情況下獲取圖像尺寸?

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

你嘗試截取圖像內容,只是路過一小部分,說10KB,圖像以ImageIO.read? – Mohsen 2009-10-13 10:11:33

+0

可能重複[如何使用java獲取圖像的高度和寬度?](http://stackoverflow.com/questions/672916/how-to-get-image-height-and-width-using-java) – ripper234 2012-01-31 08:52:23

回答

104
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您的建議

+3

太棒了。 ..你的代碼使我完美。我嘗試了幾個代碼,但是這些代碼在某些使用情況下失敗了。你節省了我的時間......謝謝。 – vissu 2011-12-20 12:02:05

+1

提供的代碼在Eclipse中發出警告:Iterator是一種原始類型。參考泛型類型迭代器應該被參數化。 Eclipse提供的Remedy選項:在文件中重命名(Ctrl + 2,R直接訪問),將類型參數添加到'Iterator',推斷泛型類型參數...,將'未選中的@SuppressWarnings'添加到'methodNameHere'。它的語法正確的解決方法是什麼? – David 2012-08-22 23:40:15

+1

此外,代碼片段沒有提到使用代碼所需的類引用。從Eclipse,似乎是:import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; – David 2012-08-22 23:41:08