2009-10-13 12 views
57

Czy istnieje sposób na uzyskanie wymiarów obrazu bez czytania całego pliku?Java/ImageIO uzyskiwanie wymiarów obrazu bez czytania całego pliku?

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

Próbowałaś obcinania treści obrazu, tylko przejazdem niewielką część, powiedzmy 10kB, obrazu do ImageIO.read? – Mohsen

+0

możliwy duplikat [Jak uzyskać wysokość i szerokość obrazu za pomocą java?] (Http://stackoverflow.com/questions/672916/how-to-get-image-height-and-width-using-java) – ripper234

Odpowiedz

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(); 
     } 
    } 
} 

Dzięki sfussenegger za sugestię

+3

Awesome. .. Twój kod sprawił, że jestem doskonały. Próbowałem kilka kodu, ale kody te nie powiodły się w niektórych przypadkach użycia. Uratowałeś mi czas ... Dziękuję. – vissu

+1

Przedstawiony kod wydaje ostrzeżenie w środowisku Eclipse: Iterator jest typu surowego. Odniesienia do ogólnego Iteratora typu powinny zostać sparametryzowane. Opcje zaradcze oferowane przez Eclipse: zmień nazwę w pliku (Ctrl + 2, bezpośredni dostęp R), Dodaj parametry typu do "Iterator", Argumenty typu ogólnego Infer ..., Dodaj @ SuppressWarnings "odznaczone" do "methodNameHere". Jaka jest poprawka składniowa dla niego? – David

+1

Również fragment kodu nie wspomina o odwołaniach klas potrzebnych do użycia kodu. Wydaje się, że od Eclipse: import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; – David

1

Będziesz musiał zajrzeć do ImageReader.getImageMetadata(). Niestety, Java Image API nie jest wcale łatwy w użyciu.

Opisy formatów metadanych można znaleźć w dokumentacji pakietu javax.imageio.metadata.

Istnieją biblioteki stron trzecich, które są łatwiejsze w użyciu, takie jak MediaUtil (ostatnia aktualizacja 3 lata temu, ale działało dobrze dla mnie).

Powiązane problemy