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;
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
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.
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).