web-dev-qa-db-fra.com

Java / ImageIO obtenir les dimensions de l'image sans lire l'intégralité du fichier?

Existe-t-il un moyen d'obtenir les dimensions d'une image sans lire l'intégralité du fichier?

URL url=new URL(<BIG_IMAGE_URL>);
BufferedImage img=ImageIO.read(url);
System.out.println(img.getWidth()+" "+img.getHeight());
img=null;
62
Pierre
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();
        }
    }
} 

Merci à sfussenegger pour la suggestion

112
Sam Barnum

L'utilisation de ImageReader.getHeight (int) et ImageReader.getWidth (int) ne lit normalement que l'en-tête de l'image (je regarde les sources JDK6). Donc ImageReader est probablement le meilleur choix.

16
sfussenegger

Vous devrez examiner ImageReader.getImageMetadata() . Malheureusement, l'API Image Java Image n'est pas du tout facile à utiliser.

Vous pouvez trouver des descriptions des formats de métadonnées dans la documentation du package de javax.imageio.metadata .

Il existe des bibliothèques tierces plus faciles à utiliser, telles que MediaUtil (dernière mise à jour il y a 3 ans, mais cela a bien fonctionné pour moi).

1
Michael Borgwardt