IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] extraction données IPTC d'un JPG


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juillet 2007
    Messages : 41
    Points : 54
    Points
    54
    Par défaut [C#] extraction données IPTC d'un JPG
    Bonjour,

    je suis à la recherche d'un bout de code en C# qui me permettrait d'extraire les mots clés d'un fichier JPG.

    Je voudrais pouvoir lire cette données dans les IPTC à la manière des données EXIF (image1.PropertyItems)

    J'ai chercher sur le net mais je n'ai pas trouver en C# et la dernière discussion sur le forum qui en parle date de 2006.
    Y a t il du nouveau sur ce sujet ?

    J'ai entendu parler que le Framework 3.0 integrait cette possibilité de récupérer les données IPTC. Est ce vrai ?

    Merci.

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    http://www.codeproject.com/KB/graphi...extractor.aspx
    http://www.codeproject.com/KB/IP/Searcharoo_6.aspx (le code source contient des méthodes pour extraire les informations des images JPEG)

    ?

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juillet 2007
    Messages : 41
    Points : 54
    Points
    54
    Par défaut
    Merci de ton aide Smyley, J'ai bien lu les méthodes et surtout celle-ci (http://www.shahine.com/omar/ReadingX...PEGUsingC.aspx) mais j'ai un problème avec l'utilisation de NamespaceManager.

    Dans SharpDevelop, j'ai ce message :
    The name 'NamespaceManager' does not exist in the current context (CS0103) - F:\Data\Developpement\En Dev\DL Photo\DL Photo\MainForm.cs:190,13
    J'ai bien :
    C'est la 1ère fois que j'utilise le Xml dans mes soft.

    J'ai essayé de supprimer ce NamespaceManager mais j'ai ce message lors de l'execution :
    Exception System.ApplicationException was thrown in debuggee:
    Error occured while readning meta-data from image. The error was: Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.

    .ctor() - f:\Data\Developpement\En Dev\DL Photo\DL Photo\MainForm.cs:246,5
    Main() - f:\Data\Developpement\En Dev\DL Photo\DL Photo\MainForm.cs:46,4
    Peux tu m'aider merci d'avance.

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    laisse le NamespaceManager si c'est là. Il est dans l'espace de nom System.Xml de l'assembly System.Xml.dll. Tu as bien une référence vers elle ?

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juillet 2007
    Messages : 41
    Points : 54
    Points
    54
    Par défaut
    ça y est avec ce code j'arrive à récupérer les mots clés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    try 
    { 
    	doc.LoadXml(GetXmpXmlDocFromImage(srcFile));
     
    	XmlNamespaceManager NamespaceMger = new XmlNamespaceManager(doc.NameTable);
    	NamespaceMger.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
    	NamespaceMger.AddNamespace("exif", "http://ns.adobe.com/exif/1.0/");
    	NamespaceMger.AddNamespace("x", "adobe:ns:meta/");
    	NamespaceMger.AddNamespace("xap", "http://ns.adobe.com/xap/1.0/");
    	NamespaceMger.AddNamespace("tiff", "http://ns.adobe.com/tiff/1.0/");
    	NamespaceMger.AddNamespace("dc", "http://purl.org/dc/elements/1.1/");
     
    	// get keywords
    	XmlNode xmlNode = doc.SelectSingleNode("/rdf:RDF/rdf:Description/dc:subject/rdf:Bag", NamespaceMger);
     
    	if (xmlNode != null)
    	{
    		foreach (XmlNode li in xmlNode)
    		{
    			Keywords.Add(li.InnerText);
    			MessageBox.Show(li.InnerText, "KeyWords", MessageBoxButtons.OK);
    		}
    	}
    } 
    catch (Exception ex) 
    { 
    	throw new ApplicationException("Error occured while readning meta-data from image. The error was: " + ex.Message); 
    }
    Puis cette procédure pour lire le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public static string GetXmpXmlDocFromImage(string filename) 
    { 
    	string contents; 
    	string xmlPart; 
    	string beginCapture = "<rdf:RDF"; 
    	string endCapture = "</rdf:RDF>"; 
    	int beginPos; 
    	int endPos; 
     
    	using (System.IO.StreamReader sr = new System.IO.StreamReader(filename))
    	{
    		contents = sr.ReadToEnd(); 
    		sr.Close(); 
    	}
     
    	beginPos = contents.IndexOf(beginCapture, 0); 
    	endPos = contents.IndexOf(endCapture, 0); 
     
    	xmlPart = contents.Substring(beginPos, (endPos - beginPos) + endCapture.Length); 
     
    	return xmlPart; 
    }
    Maintenant, je cherche à écrire dans le fichier jpg pour mettre à jour les mots clés.
    Avez vous une idée ?

  6. #6
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    vu qu'apparament c'est du XML ton truc ...

    http://jfdeterme.developpez.com/tuto...rp/tuto_xpath/

    ?

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juillet 2007
    Messages : 41
    Points : 54
    Points
    54
    Par défaut
    Merci pour la doc.

    J'ai trouvé sur MSDN un peu plus simple pour moi (pas d'utilisation de Navigator).
    J'aurais besoin d'insérer 2 mots clés dans un fichier jpg. Pour l'instant, je me contentes de lire les données IPTC puis d'insérer dans le Xml créé les deux variables.
    Mais (il y a toujours un MAIS ) je n'arrive qu'à insérer les 2 noeuds :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <li>A la maison</li>
    <li>30 ans de Bidule</li>
    Voici la structure entière du XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about="" xmlns:xap="http://ns.adobe.com/xap/1.0/" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" xap:creatortool="Microsoft Windows Photo Gallery 6.0.6000.16386" xap:CreatorTool="Microsoft Windows Photo Gallery 6.0.6000.16386" xap:ModifyDate="2008-05-30T14:17:34+02:00" tiff:NativeDigest="256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;B1D92DAB13C04AE3E2058E1465E07BBC" tiff:software="Microsoft Windows Photo Gallery 6.0.6000.16386" tiff:Orientation="1" tiff:YCbCrPositioning="2" tiff:XResolution="72/1" tiff:YResolution="72/1" tiff:ResolutionUnit="2" tiff:Make="FUJIFILM" tiff:Model="FinePix S9500  " exif:NativeDigest="36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;DC697D69F04B5B285820340613A47573" exif:ImageUniqueID="21F456DD56094362B1B64B1859001BA3" exif:ColorSpace="1" exif:CompressedBitsPerPixel="40/10" exif:PixelXDimension="2279" exif:PixelYDimension="1755" exif:ExposureTime="10/260" exif:FNumber="320/100" exif:ExposureProgram="2" exif:ShutterSpeedValue="472/100" exif:ApertureValue="340/100" exif:BrightnessValue="338/100" exif:ExposureBiasValue="0/100" exif:MaxApertureValue="300/100" exif:MeteringMode="1" exif:LightSource="0" exif:FocalLength="860/100" exif:FocalPlaneXResolution="4482/1" exif:FocalPlaneYResolution="4482/1" exif:FocalPlaneResolutionUnit="3" exif:SensingMethod="2" exif:CustomRendered="0" exif:ExposureMode="0" exif:WhiteBalance="0" exif:SceneCaptureType="0" exif:Contrast="0" exif:Saturation="0" exif:Sharpness="0" exif:SubjectDistanceRange="0" exif:ExifVersion="0220" exif:FlashpixVersion="0100" exif:DateTimeOriginal="2008-05-30T09:30:34+02:00" exif:DateTimeDigitized="2008-05-30T09:30:34+02:00" exif:FileSource="3" exif:SceneType="1" xapMM:InstanceID="uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b" dc:title="Nom de l objet" dc:description="Legende" photoshop:TransmissionReference="Reference" photoshop:Instructions="Instructions" photoshop:AuthorsPosition="Titre du Createur" photoshop:Headline="Titre" photoshop:Credit="Credit" photoshop:Source="Source" photoshop:CaptionWriter="Auteur">
        <exif:ISOSpeedRatings>
          <rdf:Seq>
            <rdf:li>80</rdf:li>
          </rdf:Seq>
        </exif:ISOSpeedRatings>
        <exif:ComponentsConfiguration>
          <rdf:Seq>
            <rdf:li>1</rdf:li>
            <rdf:li>2</rdf:li>
            <rdf:li>3</rdf:li>
            <rdf:li>0</rdf:li>
          </rdf:Seq>
        </exif:ComponentsConfiguration>
        <exif:Flash exif:Fired="False" exif:Return="0" exif:Mode="2" exif:Function="False" exif:RedEyeMode="False" />
        <dc:creator>
          <rdf:Seq>
            <rdf:li>Createur</rdf:li>
          </rdf:Seq>
        </dc:creator>
        <dc:subject>
          <rdf:Bag>
            <rdf:li>Genealogie</rdf:li>
            <li>A la maison</li>
            <li>30 ans de Bidule</li>
          </rdf:Bag>
        </dc:subject>
      </rdf:Description>
    </rdf:RDF>
    J'ai utilisé ce code pour arriver à ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    XmlNode xmlNode = doc.SelectSingleNode("/rdf:RDF/rdf:Description/dc:subject/rdf:Bag", NamespaceMger);
     
    XmlElement elemOu = doc.CreateElement("rdf:li");
    elemOu.InnerText = KW_Ou;
     
    XmlElement elemQuoi = doc.CreateElement("rdf:li");
    elemQuoi.InnerText = KW_Quoi;
     
    xmlNode.InsertAfter(elemOu, xmlNode.LastChild);
    xmlNode.InsertAfter(elemQuoi, xmlNode.LastChild);
     
    doc.Save("IPTC.xml");
    Comment obtenir le "<rdf:li>" ald "<li>":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <rdf:li>A la maison</rdf:li>
    Merci....

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2013
    Messages : 1
    Points : 0
    Points
    0
    Par défaut extraction données IPTC d'un JPG en php, ou javascript
    j'utilise dans un site beaucoup d'images et je voudrais récupérer les données iptc (description) pour les insérer dans alt="..."
    Merci de m'aider

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/08/2006, 12h34
  2. Extraction données
    Par francois78 dans le forum Access
    Réponses: 5
    Dernier message: 19/05/2006, 12h56
  3. [XSLT] php xml xslt extraction données
    Par Cyrille1969 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/04/2006, 23h23
  4. Extraction données d'une ArrayList
    Par Teb dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 10/04/2006, 17h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo