2009-10-13 8 views
57

C'è un modo per ottenere le dimensioni di un'immagine senza leggere l'intero file?Java/ImageIO ottiene le dimensioni dell'immagine senza leggere l'intero file?

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

Hai provato troncare contenuto dell'immagine, solo di passaggio una piccola parte, dicono 10kb, dell'immagine da ImageIO.read? – Mohsen

+0

possibile duplicato di [Come ottenere altezza e larghezza dell'immagine usando java?] (Http://stackoverflow.com/questions/672916/how-to-get-image-height-and-width-using-java) – ripper234

risposta

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

Grazie per il suggerimento sfussenegger

+3

Impressionante. .. Il tuo codice mi ha funzionato perfettamente. Ho provato un paio di codici, ma quei codici sono falliti in alcuni casi d'uso. Mi hai salvato il tempo ... Grazie. – vissu

+1

Il codice presentato emette un avviso in Eclipse: Iterator è un tipo non elaborato. I riferimenti al tipo generico Iterator devono essere parametrizzati. Opzioni di correzione offerte da Eclipse: rinomina nel file (Ctrl + 2, accesso diretto R), aggiungi i parametri del tipo a "Iterator", dedica argomenti di tipo generico ..., Aggiungi @SuppressWarnings "deseleziona" a "methodNameHere". Qual è la correzione sintatticamente corretta per questo? – David

+1

Anche lo snippet di codice non menziona i riferimenti di classe necessari per utilizzare il codice. Da Eclipse, sembra essere: import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; – David

1

Si dovrà esaminare ImageReader.getImageMetadata(). Sfortunatamente, l'API Java Image non è affatto facile da usare.

È possibile trovare le descrizioni dei formati dei metadati nella documentazione del pacchetto di javax.imageio.metadata.

Ci sono librerie di terze parti che sono più facili da usare, come ad esempio MediaUtil (ultimo aggiornamento 3 anni fa, ma ha funzionato bene per me).

Problemi correlati