Project

General

Profile

Library examples - Looking for an image that contains meta data from this page - Example 5: xmpsample.cpp

Added by Colin K over 3 years ago

[[http://www.exiv2.org/examples.html]] Example 5: xmpsample.cpp

Example 5 on this page includes details about adding multiple Job Name and Job Role. I do not see this meta data in any of the images on this page.

Is there an image that includes the data below?

Xmp.xmpBJ.JobRef[1]/stJob:name               XmpText    14  Birthday party
Xmp.xmpBJ.JobRef[1]/stJob:role               XmpText    12  Photographer
Xmp.xmpBJ.JobRef[2]/stJob:name               XmpText    16  Wedding ceremony
Xmp.xmpBJ.JobRef[2]/stJob:role               XmpText     8  Best man

Thanks ColinK


Replies (1)

RE: Library examples - Looking for an image that contains meta data from this page - Example 5: xmpsample.cpp - Added by Robin Mills over 3 years ago

In 10 years of contributing to Exiv2, I've never noticed this sample! Good News: I believe it's working as documented. It's possibly not working in the way in which you expect (as I will explain).

I've build it (on the Mac):

$ git clone https://github.com/exiv2/exiv2
$ cd exiv2
$ mkdir build ; cd build ; cmake .. ; make
$ bin/xmpsample
584 rmills@rmillsmbp:~/gnu/github/exiv2/exiv2/build $ bin/xmpsample 
Xmp.dc.source                                XmpText    13  xmpsample.cpp
Xmp.dc.subject                               XmpBag      2  Palmtree, Rubbertree
Xmp.dc.title                                 LangAlt     2  lang="en-US" Sunset on the beach, lang="de-DE" Sonnenuntergang am Strand
Xmp.dc.one                                   XmpText     2  -1
Xmp.dc.two                                   XmpText     6  3.1415
Xmp.dc.three                                 XmpText     3  5/7
Xmp.dc.four                                  XmpText     3  255
Xmp.dc.five                                  XmpText     3  256
Xmp.dc.six                                   XmpText     5  False
Xmp.dc.seven                                 XmpText     5  Seven
Xmp.dc.format                                XmpText    10  image/jpeg
Xmp.dc.creator                               XmpSeq      3  1) The first creator, 2) The second creator, 3) And another one
Xmp.dc.description                           LangAlt     2  lang="x-default" Hello, World, lang="de-DE" Hallo, Welt
Xmp.tiff.ImageDescription                    LangAlt     2  lang="x-default" TIFF image description, lang="de-DE" TIFF Bildbeschreibung
Xmp.ns.myProperty                            XmpText     7  myValue
Xmp.xmpDM.videoFrameSize/stDim:w             XmpText     2  16
Xmp.xmpDM.videoFrameSize/stDim:h             XmpText     1  9
Xmp.xmpDM.videoFrameSize/stDim:unit          XmpText     4  inch
Xmp.dc.publisher                             XmpBag      1  James Bond
Xmp.dc.publisher[1]/?ns:role                 XmpText    12  secret agent
Xmp.dc.creator[2]/?ns:role                   XmpText    10  programmer
Xmp.xmpBJ.JobRef                             XmpText     0  type="Bag" 
Xmp.xmpBJ.JobRef[1]/stJob:name               XmpText    14  Birthday party
Xmp.xmpBJ.JobRef[1]/stJob:role               XmpText    12  Photographer
Xmp.xmpBJ.JobRef[2]/stJob:name               XmpText    16  Wedding ceremony
Xmp.xmpBJ.JobRef[2]/stJob:role               XmpText     8  Best man
Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiAdrCity XmpText    12  Kuala Lumpur
Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiAdrCtry XmpText     8  Malaysia
Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiUrlWork XmpText    20  http://www.exiv2.org
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about="" 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:ns="myNamespace/" 
    xmlns:tiff="http://ns.adobe.com/tiff/1.0/" 
    xmlns:xmpDM="http://ns.adobe.com/xmp/1.0/DynamicMedia/" 
    xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#" 
    xmlns:xmpBJ="http://ns.adobe.com/xap/1.0/bj/" 
    xmlns:stJob="http://ns.adobe.com/xap/1.0/sType/Job#" 
    xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/" 
   dc:source="xmpsample.cpp" 
   dc:one="-1" 
   dc:two="3.1415" 
   dc:three="5/7" 
   dc:four="255" 
   dc:five="256" 
   dc:six="False" 
   dc:seven="Seven" 
   dc:format="image/jpeg" 
   ns:myProperty="myValue">
   <dc:subject>
    <rdf:Bag>
     <rdf:li>Palmtree</rdf:li>
     <rdf:li>Rubbertree</rdf:li>
    </rdf:Bag>
   </dc:subject>
   <dc:title>
    <rdf:Alt>
     <rdf:li xml:lang="en-US">Sunset on the beach</rdf:li>
     <rdf:li xml:lang="de-DE">Sonnenuntergang am Strand</rdf:li>
    </rdf:Alt>
   </dc:title>
   <dc:creator>
    <rdf:Seq>
     <rdf:li>1) The first creator</rdf:li>
     <rdf:li rdf:parseType="Resource">
      <rdf:value>2) The second creator</rdf:value>
      <ns:role>programmer</ns:role>
     </rdf:li>
     <rdf:li>3) And another one</rdf:li>
    </rdf:Seq>
   </dc:creator>
   <dc:description>
    <rdf:Alt>
     <rdf:li xml:lang="x-default">Hello, World</rdf:li>
     <rdf:li xml:lang="de-DE">Hallo, Welt</rdf:li>
    </rdf:Alt>
   </dc:description>
   <dc:publisher>
    <rdf:Bag>
     <rdf:li rdf:parseType="Resource">
      <rdf:value>James Bond</rdf:value>
      <ns:role>secret agent</ns:role>
     </rdf:li>
    </rdf:Bag>
   </dc:publisher>
   <tiff:ImageDescription>
    <rdf:Alt>
     <rdf:li xml:lang="x-default">TIFF image description</rdf:li>
     <rdf:li xml:lang="de-DE">TIFF Bildbeschreibung</rdf:li>
    </rdf:Alt>
   </tiff:ImageDescription>
   <xmpDM:videoFrameSize
    stDim:w="16" 
    stDim:h="9" 
    stDim:unit="inch"/>
   <xmpBJ:JobRef>
    <rdf:Bag>
     <rdf:li
      stJob:name="Birthday party" 
      stJob:role="Photographer"/>
     <rdf:li
      stJob:name="Wedding ceremony" 
      stJob:role="Best man"/>
    </rdf:Bag>
   </xmpBJ:JobRef>
   <Iptc4xmpCore:CreatorContactInfo
    Iptc4xmpCore:CiAdrCity="Kuala Lumpur" 
    Iptc4xmpCore:CiAdrCtry="Malaysia" 
    Iptc4xmpCore:CiUrlWork="http://www.exiv2.org"/>
  </rdf:Description>
 </rdf:RDF>
</x:xmpmeta>
...
<?xpacket end="w"?>
585 rmills@rmillsmbp:~/gnu/github/exiv2/exiv2/build $ bin/xmpsample  | cet
bbedit "/var/tmp/tmp.0.tgL3U7" 2>/dev/null >/dev/null
586 rmills@rmillsmbp:~/gnu/github/exiv2/exiv2/build $ 
The code is managing XMP in memory. It doesn't write it to an image file! So, it creates the object Exiv2::XmpMeta xmpData on the stack and proceeds to update it. At the end, it encodes the data (as XML) and reports.

This is an unusual use case for Exiv2. The more common pattern (see samples/exifprint.cpp) is to use the ImageFactory to open an image, and call image->readMetadata(); Exiv2::ExifData &xmpData = image-xmpData(); to obtain xmpData. You can modify the xmpData (in memory) and store changes by calling image->writeMetadata().

Thank You for raising this subject on the forum. If you're puzzled by my explanation, I'm happy to discuss this further. Thank You for using Exiv2.

    (1-1/1)