2009-10-13 12 views
57

Gibt es eine Möglichkeit, die Abmessungen eines Bildes zu erhalten, ohne die gesamte Datei zu lesen?Java/ImageIO Bildabmessungen erhalten, ohne die gesamte Datei zu lesen?

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

Haben Sie Bildinhalt versuchen Kürzen, nur einen kleinen Teil vorbei, sagen 10kb, des Bildes ImageIO.read? – Mohsen

+0

mögliche Duplikate von [Wie Bildhöhe und -breite mit Java zu bekommen?] (Http://StackOverflow.com/Questions/672916/How-to-get-image-Height-and-Britage-using-java) – ripper234

Antwort

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

Danke für die Anregung sfussenegger

+3

Awesome. .. Dein Code hat mich perfekt gemacht. Ich habe einige Codes ausprobiert, aber diese Codes sind in einigen Anwendungsfällen fehlgeschlagen. Du hast meine Zeit gerettet ... Danke. – vissu

+1

Der angezeigte Code gibt in Eclipse eine Warnung aus: Iterator ist ein unformatierter Typ. Verweise auf den generischen Typ Iterator sollten parametrisiert werden. Von Eclipse angebotene Abhilfeoptionen: Umbenennen in Datei (Strg + 2, R Direktzugriff), Hinzufügen von Typparametern zu 'Iterator', Generieren von Argumenttypen ..., Hinzufügen von'SuppressWarnings 'unmarkiert' zu 'methodennameHere'. Was ist die syntaktisch korrekte Lösung dafür? – David

+1

Auch das Code-Snippet erwähnt nicht die Klassenreferenzen, die für die Verwendung des Codes erforderlich sind. Aus Eclipse scheint zu sein: import javax.imageio.ImageIO; importieren Sie javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; – David

1

Sie müssen in ImageReader.getImageMetadata() suchen. Leider ist die Java Image API nicht einfach zu verwenden.

Beschreibungen der Metadatenformate finden Sie in der Paketdokumentation von javax.imageio.metadata.

Es gibt Bibliotheken von Drittanbietern, die einfacher zu verwenden sind, wie MediaUtil (zuletzt aktualisiert vor 3 Jahren, aber es hat gut für mich funktioniert).

Verwandte Themen