2009-10-13 66 views
57

¿Hay alguna forma de obtener las dimensiones de una imagen sin leer todo el archivo?Java/ImageIO obteniendo las dimensiones de la imagen sin leer todo el archivo?

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

¿Usted intentó truncar contenido de la imagen, simplemente pasando una pequeña parte, dicen 10kb, de la imagen para ImageIO.read? – Mohsen

+0

posible duplicado de [¿Cómo obtener la altura y el ancho de la imagen usando java?] (Http://stackoverflow.com/questions/672916/how-to-get-image-height-and-width-using-java) – ripper234

Respuesta

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

Gracias a sfussenegger por la sugerencia

+3

Impresionante. .. Tu código me funcionó perfecto. Intenté un par de códigos, pero esos códigos fallaron en algunos casos de uso. Me salvaste el tiempo ... Gracias. – vissu

+1

El código presentado emite una advertencia en Eclipse: Iterator es un tipo sin formato. Las referencias al tipo genérico Iterator se deben parametrizar. Opciones de solución ofrecidas por Eclipse: renombrar en archivo (Ctrl + 2, acceso directo R), agregar parámetros de tipo a 'Iterator', Inferir argumentos de tipo genérico ..., agregar @SuppressWarnings 'desactivado' a 'methodNameHere'. ¿Cuál es la solución sintácticamente correcta para ello? – David

+1

También el fragmento de código no menciona las referencias de clase necesarias para usar el código. Desde Eclipse, parece ser: import javax.imageio.ImageIO; importar javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; – David

1

Tendrás que mirar en ImageReader.getImageMetadata(). Desafortunadamente, The Java Image API no es para nada fácil de usar.

Puede encontrar descripciones de los formatos de metadatos en la documentación del paquete javax.imageio.metadata.

Hay bibliotecas de terceros que son más fáciles de usar, como MediaUtil (actualizadas por última vez hace 3 años, pero a mí me funcionó).

Cuestiones relacionadas