[image] - [metadonnées]

exceed Messages postés 3 Date d'inscription jeudi 3 juillet 2003 Statut Membre Dernière intervention 21 octobre 2004 - 20 oct. 2004 à 09:52
exceed Messages postés 3 Date d'inscription jeudi 3 juillet 2003 Statut Membre Dernière intervention 21 octobre 2004 - 21 oct. 2004 à 16:54
Bonjour !

Je dois lire et écrire des métadonnées dans une image (jpg, png ou autre). J'ai cherché sur Google, sur des forums et chez Sun mais je ne trouve rien de claire et de concluant.

Savez-vous qu'elles méthodes et API il faut utiliser ?
Pourriez-vous donner un exemple SVP ?

Merci :)

4 réponses

cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
21 oct. 2004 à 07:29
Salut

j'ai pas essayé, je tape en live à partir de la doc ^^

try {
Iterator it = ImageIO.getImageReaders("jpeg");
ImageReader read = (ImageReader) (it.next());

read.setInput(new FileImageInputStram(monFichier));

IIOMetadata meta = read.getMetaData(0);
...

}
catch (Exception e) {}

je suis pas encore réveillé et j'ai jamais testé.
donc c'est juste une piste

A+
Dobel
[Une fois rien, c'est rien; deux fois rien, ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà s'acheter quelque chose, et pour pas cher]
0
exceed Messages postés 3 Date d'inscription jeudi 3 juillet 2003 Statut Membre Dernière intervention 21 octobre 2004
21 oct. 2004 à 15:24
Merci pour la réponse rapide !

Peux-tu me dire STP où as-tu trouvé ce bout de code ?
J'ai trouvé quelque chose d'identique sur le site de Sun et j'ai testé mais je n'arrive pas à comprendre et à avoir un résultat.

Voila mon code :
        File f = new File("E:/Test/image.png");
        //System.out.println("canRead : " + f.canRead());
        try {               
            ImageInputStream stream = ImageIO.createImageInputStream(f);
            //System.out.println("getBitOffset : " + stream.getBitOffset());
            
            Iterator iter = ImageIO.getImageReaders(stream); 
            ImageReader reader = (ImageReader)iter.next(); //Parse et décode une image
            IIOMetadata m reader.getImageMetadata(0); //imageIndex 1 pour essayer, je ne sais pas ce que c'est !!!           
            
            //if(m != null){
                Node n = m.getAsTree("javax_imageio_png_1.0");
                n = n.getFirstChild(); //Examine Children of root            
            
            
                while (n != null) {
                    if (n.getNodeName().equals("gAMA")) {
                        Node v = n.getAttributes().getNamedItem("value");
                        String value = v.getNodeValue();
                        float gamma = Integer.parseInt(value)/100000.0F;
                        break;
                    }
                    n = n.getNextSibling();
                }
           // } else System.out.println("m = null");
            
        } catch(IOException e) { System.out.println("IO - Erreur : " + e.getMessage()); }         
          catch(DOMException e) { System.out.println("DOM - Erreur : " + e.getMessage()); }  
          catch(NumberFormatException e) { System.out.println("NumberFormat - Erreur : " + e.getMessage()); } 
          catch(IllegalArgumentException e) { System.out.println("IllegalArgument - Erreur : " + e.getMessage()); }
          catch(IllegalStateException e) { System.out.println("IllegalState - Erreur : " + e.getMessage()); }
          //catch(Exception e) { System.out.println("Erreur : " + e.getMessage()); }
    }


J'obtiens l'erreur : "IllegalState - Erreur : Input not set"
C'est donc cette instruction qui plante :
IIOMetadata m = reader.getImageMetadata(0);

Je ne la comprend pas bien.
La méthode getImageMetadata() demande un paramètre imageIndex de type entier. Je ne vois pas de quoi il s'agit.

Si quelqu'un pouvait m'aider...
Merci d'avance
eXCeeD
0
cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
21 oct. 2004 à 16:24
bah je l'ai tappé ce matin en me levant avec mes petits doigts et mon cerveau engourdis par une nuit trop courte ^^
j'ai juste regardé les méthodes dans la doc.

l'index correspond au numéro de l'image si il y en a plusieurs de disponibles dans la source indiquée (donc obligatoirement égal à 0 si on indique un fichier)

le problème doit donc venir du fichier
est-ce qu'il le trouve si tu mets f.exists();

ou tu peux aussi essayer de repréciser :
ImageReader reader = (ImageReader)iter.next();
reader.setInput(f)
mais normalement, c'est inutilse

sinon, à priori, les 2 méthodes sont équivalentes, avec une préférence pour celle de ta source (plus générale)

je peux pas plus t'aider sur ce sujet ^^

A+
Dobel
[Une fois rien, c'est rien; deux fois rien, ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà s'acheter quelque chose, et pour pas cher]
0
exceed Messages postés 3 Date d'inscription jeudi 3 juillet 2003 Statut Membre Dernière intervention 21 octobre 2004
21 oct. 2004 à 16:54
Pour le fichier, ça doit être bon.
J'ai fait un f.canRead() (tout en haut en commentaire) et pour être sûre, je viens de faire un f.exists(), les deux me donnent true.

J'ai essayé la méthode que tu proposes mais il me lève une exception IllegalArgumentException pour reader.setInput(f). Le message est "Incorrect input type !"

Je te remercie pour tes réponses et explications. Ca m'a permis d'un peu mieux comprendre ce code même si ça ne fonctionne toujours pas :sad)

Si quelqu'un à une idée ou une solution pour écrire et lire les métadonnées d'une image, je suis toujours preneur. :)
Merci !

PS : Il sert à quoi le bouton "Réponse acceptée !" ?
0
Rejoignez-nous