119 votes

Comment obtenir la hauteur et la largeur d'une image en utilisant java ?

Y a-t-il un autre moyen que d'utiliser ImageIO.read pour obtenir la hauteur et la largeur de l'image ?

Parce que je rencontre un problème qui bloque le fil de discussion.

at com.sun.medialib.codec.jpeg.Decoder.njpeg_decode(Native Method)      
at com.sun.medialib.codec.jpeg.Decoder.decode(Decoder.java:87)      
at com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader.decode(CLibJPEGImageReader.java:73)     
 - locked <0xd96fb668> (a com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader)      
at com.sun.media.imageioimpl.plugins.clib.CLibImageReader.getImage(CLibImageReader.java:320)    
 - locked <0xd96fb668> (a com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader)     
 at com.sun.media.imageioimpl.plugins.clib.CLibImageReader.read(CLibImageReader.java:384)   
 - locked <0xd96fb668> (a com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader)      
at javax.imageio.ImageIO.read(ImageIO.java:1400)      
at javax.imageio.ImageIO.read(ImageIO.java:1322)

Cette erreur ne se produit que sur un serveur d'applications Sun et je soupçonne donc qu'il s'agit d'un bogue Sun.

10voto

user1215499 Points 57

C'est simple :

BufferedImage readImage = null;

try {
    readImage = ImageIO.read(new File(your path);
    int h = readImage.getHeight();
    int w = readImage.getWidth();
} catch (Exception e) {
    readImage = null;
}

7voto

Gus Points 101

J'ai trouvé ce cours gratuit, qui fonctionne parfaitement :

http://jaimonmathew.wordpress.com/2011/01/29/simpleimageinfo/

4voto

Karussell Points 7034

Vous pouvez utiliser la boîte à outils, sans avoir besoin d'ImageIO.

Image image = Toolkit.getDefaultToolkit().getImage(file.getAbsolutePath());
int width = image.getWidth(null);
int height = image.getHeight(null);

Si vous ne voulez pas vous occuper du chargement de l'image, faites-le.

ImageIcon imageIcon = new ImageIcon(file.getAbsolutePath());
int height = imageIcon.getIconHeight();
int width = imageIcon.getIconWidth();

4voto

argoden Points 582

Le problème avec ImageIO.read est qu'il est vraiment lent. Tout ce que vous devez faire est de lire l'en-tête de l'image pour obtenir la taille. ImageIO.getImageReader est le candidat idéal.

Voici l'exemple de Groovy, mais la même chose s'applique à Java

def stream = ImageIO.createImageInputStream(newByteArrayInputStream(inputStream))
def formatReader = ImageIO.getImageWritersByFormatName(format).next() 
def reader = ImageIO.getImageReader(formatReader)
reader.setInput(stream, true)

println "width:reader.getWidth(0) -> height: reader.getHeight(0)"

Les performances étaient les mêmes qu'avec la bibliothèque java SimpleImageInfo.

https://github.com/cbeust/personal/blob/master/src/main/java/com/beust/SimpleImageInfo.java

3voto

karim79 Points 178055

Essayez d'utiliser la classe ImageInfo disponible gratuitement, je l'ai utilisée dans le même but :

http://linux.softpedia.com/get/Multimedia/Graphics/ImageInfo-19792.shtml

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X