Dart
Dart
Extract XMP MetaData as XML
See more XMP Examples
Demonstrates how to open a JPG or TIF image file and extract the XMP metadata as XML.Chilkat Dart Downloads
import 'package:chilkat/chilkat.dart';
void main() {
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
final xmp = CkXmp();
// Load a JPG or TIF image file.
// Sample JPG's with XMP metadata may be found at:
// https://www.chilkatsoft.com/testData/xmp/sample1.jpg
// https://www.chilkatsoft.com/testData/xmp/sample2.jpg
// https://www.chilkatsoft.com/testData/xmp/sample3.jpg
try {
xmp.loadAppFile('qa_data/xmp/sample1.jpg');
} on ChilkatException catch (e) {
print(e.lastErrorText);
return;
}
print('Num embedded XMP docs: ${xmp.numEmbedded}');
// Assuming there is at least one, get the 1st.
// (There is typically never more than one, but theoretically it's possible.)
final CkXml xml;
try {
xml = xmp.getEmbedded(0);
} on ChilkatException {
print('No XMP metadata found.');
return;
}
print(xml.getXml());
// Sample output:
// <?xml version="1.0" encoding="utf-8"?>
// <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP toolkit 3.0-28, framework 1.6">
// <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:iX="http://ns.adobe.com/iX/1.0/">
// <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:xmpPLUS="XMP Photographic Licensing Universal System (xmpPLUS, http://ns.adobe.com/xap/1.0/PLUS/)">
// <xmpPLUS:CreditLineReq>False</xmpPLUS:CreditLineReq>
// <xmpPLUS:ReuseAllowed>False</xmpPLUS:ReuseAllowed>
// </rdf:Description>
// <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/">
// <Iptc4xmpCore:IntellectualGenre>Profile</Iptc4xmpCore:IntellectualGenre>
// <Iptc4xmpCore:Location>Lake Superior</Iptc4xmpCore:Location>
// <Iptc4xmpCore:CountryCode>US</Iptc4xmpCore:CountryCode>
// <Iptc4xmpCore:CreatorContactInfo rdf:parseType="Resource">
// <Iptc4xmpCore:CiAdrExtadr>John Doe Photography, 123 Maple Lane</Iptc4xmpCore:CiAdrExtadr>
// <Iptc4xmpCore:CiAdrCity>Champaign</Iptc4xmpCore:CiAdrCity>
// <Iptc4xmpCore:CiAdrRegion>Illinois</Iptc4xmpCore:CiAdrRegion>
// <Iptc4xmpCore:CiAdrPcode>61820</Iptc4xmpCore:CiAdrPcode>
// <Iptc4xmpCore:CiAdrCtry>USA</Iptc4xmpCore:CiAdrCtry>
// <Iptc4xmpCore:CiTelWork>+1 (217) 1234567</Iptc4xmpCore:CiTelWork>
// <Iptc4xmpCore:CiEmailWork>john@doe.com</Iptc4xmpCore:CiEmailWork>
// <Iptc4xmpCore:CiUrlWork>www.doe.com</Iptc4xmpCore:CiUrlWork>
// </Iptc4xmpCore:CreatorContactInfo>
// <Iptc4xmpCore:SubjectCode>
// <rdf:Bag>
// <rdf:li>14024001</rdf:li>
// </rdf:Bag>
// </Iptc4xmpCore:SubjectCode>
// <Iptc4xmpCore:Scene>
// <rdf:Bag>
// <rdf:li>012300</rdf:li>
// </rdf:Bag>
// </Iptc4xmpCore:Scene>
// </rdf:Description>
// <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:exif="http://ns.adobe.com/exif/1.0/">
// <exif:ColorSpace>1</exif:ColorSpace>
// <exif:PixelXDimension>288</exif:PixelXDimension>
// <exif:PixelYDimension>432</exif:PixelYDimension>
// </rdf:Description>
// <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"/>
// <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
// <photoshop:AuthorsPosition>Photographer</photoshop:AuthorsPosition>
// <photoshop:Headline>Young boy yelling</photoshop:Headline>
// <photoshop:CaptionWriter>John Doe</photoshop:CaptionWriter>
// <photoshop:DateCreated>2004-08-19</photoshop:DateCreated>
// <photoshop:City>Marquette</photoshop:City>
// <photoshop:State>Michigan</photoshop:State>
// <photoshop:Country>United States</photoshop:Country>
// <photoshop:TransmissionReference>PO 34567</photoshop:TransmissionReference>
// <photoshop:Instructions>Original RAW capture Nikon D2X, Adobe RGB 1998.</photoshop:Instructions>
// <photoshop:Credit>John Doe Photography</photoshop:Credit>
// <photoshop:Source>John Doe Photography</photoshop:Source>
// <photoshop:History/>
// </rdf:Description>
// <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:tiff="http://ns.adobe.com/tiff/1.0/">
// <tiff:XResolution>72/1</tiff:XResolution>
// <tiff:YResolution>72/1</tiff:YResolution>
// <tiff:ResolutionUnit>2</tiff:ResolutionUnit>
// <tiff:Orientation>1</tiff:Orientation>
// </rdf:Description>
// <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:xap="http://ns.adobe.com/xap/1.0/">
// <xap:CreateDate>2005-03-13T02:02:29-06:00</xap:CreateDate>
// <xap:ModifyDate>2005-03-13T02:02:29-06:00</xap:ModifyDate>
// <xap:MetadataDate>2005-03-13T02:02:29-06:00</xap:MetadataDate>
// <xap:CreatorTool>Adobe Photoshop CS Windows</xap:CreatorTool>
// </rdf:Description>
// <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/">
// <xapMM:DerivedFrom rdf:parseType="Resource">
// <stRef:instanceID>uuid:f5b64171-9394-11d9-bb8e-a67e6693b6e9</stRef:instanceID>
// <stRef:documentID>adobe:docid:photoshop:e4d002a4-9392-11d9-bb8e-a67e6693b6e9</stRef:documentID>
// </xapMM:DerivedFrom>
// <xapMM:DocumentID>adobe:docid:photoshop:0f410647-9396-11d9-bb8e-a67e6693b6e9</xapMM:DocumentID>
// </rdf:Description>
// <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:xapRights="http://ns.adobe.com/xap/1.0/rights/">
// <xapRights:Marked>True</xapRights:Marked>
// <xapRights:WebStatement>http://www.doe.com</xapRights:WebStatement>
// <xapRights:RightsUsageTerms>
// <rdf:Alt>
// <rdf:li xml:lang="x-default">For consideration only, no reproduction without prior permission</rdf:li>
// </rdf:Alt>
// </xapRights:RightsUsageTerms>
// <xapRights:UsageTerms>
// <rdf:Alt>
// <rdf:li xml:lang="x-default">For consideration only, no reproduction without prior permission</rdf:li>
// </rdf:Alt>
// </xapRights:UsageTerms>
// </rdf:Description>
// <rdf:Description rdf:about="uuid:0f410648-9396-11d9-bb8e-a67e6693b6e9" xmlns:dc="http://purl.org/dc/elements/1.1/">
// <dc:format>image/jpeg</dc:format>
// <dc:description>
// <rdf:Alt>
// <rdf:li xml:lang="x-default">Three year old African American boy yells with joy on beach during vacation.</rdf:li>
// </rdf:Alt>
// </dc:description>
// <dc:title>
// <rdf:Alt>
// <rdf:li xml:lang="x-default">20040819_pe_014578d.nef</rdf:li>
// </rdf:Alt>
// </dc:title>
// <dc:rights>
// <rdf:Alt>
// <rdf:li xml:lang="x-default">�2004 John Doe, all rights reserved</rdf:li>
// </rdf:Alt>
// </dc:rights>
// <dc:creator>
// <rdf:Seq>
// <rdf:li>John Doe</rdf:li>
// </rdf:Seq>
// </dc:creator>
// <dc:subject>
// <rdf:Bag>
// <rdf:li>boy</rdf:li>
// <rdf:li>gender</rdf:li>
// <rdf:li>human beings</rdf:li>
// <rdf:li>humans</rdf:li>
// <rdf:li>lad</rdf:li>
// <rdf:li>male</rdf:li>
// <rdf:li>people</rdf:li>
// <rdf:li>3-12 years old</rdf:li>
// <rdf:li>age</rdf:li>
// <rdf:li>child</rdf:li>
// <rdf:li>youth</rdf:li>
// <rdf:li>african american</rdf:li>
// <rdf:li>african-american</rdf:li>
// <rdf:li>black</rdf:li>
// <rdf:li>ethnic</rdf:li>
// <rdf:li>ethnicity</rdf:li>
// <rdf:li>people of color</rdf:li>
// <rdf:li>race</rdf:li>
// <rdf:li>beach</rdf:li>
// <rdf:li>nature</rdf:li>
// <rdf:li>scenery</rdf:li>
// <rdf:li>emotion</rdf:li>
// <rdf:li>emotional</rdf:li>
// <rdf:li>emotions</rdf:li>
// <rdf:li>happiness</rdf:li>
// <rdf:li>happy</rdf:li>
// <rdf:li>joy</rdf:li>
// <rdf:li>joyful</rdf:li>
// <rdf:li>joyous</rdf:li>
// </rdf:Bag>
// </dc:subject>
// </rdf:Description>
// </rdf:RDF>
// </x:xmpmeta>
// You can generate parsing code using Chilkat's online tool :
// Generate Parsing Code from XML
var rdfDescriptionRdfAbout = '';
var rdfDescriptionXmlnsXmpPLUS = '';
var rdfDescriptionXmlnsIptc4xmpCore = '';
var rdfDescriptionXmlnsExif = '';
var rdfDescriptionXmlnsPdf = '';
var rdfDescriptionXmlnsPhotoshop = '';
var rdfDescriptionXmlnsTiff = '';
var rdfDescriptionXmlnsXap = '';
var rdfDescriptionXmlnsStRef = '';
var rdfDescriptionXmlnsXapMM = '';
var rdfDescriptionXmlnsXapRights = '';
var rdfDescriptionXmlnsDc = '';
var xmpPLUSCreditLineReq = '';
var xmpPLUSReuseAllowed = '';
var iptc4xmpCoreIntellectualGenre = '';
var iptc4xmpCoreLocation = '';
var iptc4xmpCoreCountryCode = '';
var iptc4xmpCoreCreatorContactInfoRdfParseType = '';
var iptc4xmpCoreCiAdrExtadr = '';
var iptc4xmpCoreCiAdrCity = '';
var iptc4xmpCoreCiAdrRegion = '';
var iptc4xmpCoreCiAdrPcode = 0;
var iptc4xmpCoreCiAdrCtry = '';
var iptc4xmpCoreCiTelWork = '';
var iptc4xmpCoreCiEmailWork = '';
var iptc4xmpCoreCiUrlWork = '';
var rdfLi = 0;
var exifColorSpace = 0;
var exifPixelXDimension = 0;
var exifPixelYDimension = 0;
var photoshopAuthorsPosition = '';
var photoshopHeadline = '';
var photoshopCaptionWriter = '';
var photoshopDateCreated = '';
var photoshopCity = '';
var photoshopState = '';
var photoshopCountry = '';
var photoshopTransmissionReference = '';
var photoshopInstructions = '';
var photoshopCredit = '';
var photoshopSource = '';
var tiffXResolution = '';
var tiffYResolution = '';
var tiffResolutionUnit = 0;
var tiffOrientation = 0;
var xapCreateDate = '';
var xapModifyDate = '';
var xapMetadataDate = '';
var xapCreatorTool = '';
var xapMMDerivedFromRdfParseType = '';
var stRefInstanceID = '';
var stRefDocumentID = '';
var xapMMDocumentID = '';
var xapRightsMarked = '';
var xapRightsWebStatement = '';
var rdfLiXmlLang = '';
var strRdfLi = '';
var dcFormat = '';
var j = 0;
var countJ = 0;
final xXmpmetaXmlnsX = xml.getAttrValue('xmlns:x');
final xXmpmetaXXmptk = xml.getAttrValue('x:xmptk');
final rdfRDFXmlnsRdf = xml.chilkatPath('rdf:RDF|(xmlns:rdf)');
final rdfRDFXmlnsIX = xml.chilkatPath('rdf:RDF|(xmlns:iX)');
var i = 0;
final countI = xml.numChildrenHavingTag('rdf:RDF|rdf:Description');
while (i < countI) {
xml.i = i;
rdfDescriptionRdfAbout = xml.chilkatPath('rdf:RDF|rdf:Description[i]|(rdf:about)');
rdfDescriptionXmlnsXmpPLUS = xml.chilkatPath('rdf:RDF|rdf:Description[i]|(xmlns:xmpPLUS)');
rdfDescriptionXmlnsIptc4xmpCore = xml.chilkatPath('rdf:RDF|rdf:Description[i]|(xmlns:Iptc4xmpCore)');
rdfDescriptionXmlnsExif = xml.chilkatPath('rdf:RDF|rdf:Description[i]|(xmlns:exif)');
rdfDescriptionXmlnsPdf = xml.chilkatPath('rdf:RDF|rdf:Description[i]|(xmlns:pdf)');
rdfDescriptionXmlnsPhotoshop = xml.chilkatPath('rdf:RDF|rdf:Description[i]|(xmlns:photoshop)');
rdfDescriptionXmlnsTiff = xml.chilkatPath('rdf:RDF|rdf:Description[i]|(xmlns:tiff)');
rdfDescriptionXmlnsXap = xml.chilkatPath('rdf:RDF|rdf:Description[i]|(xmlns:xap)');
rdfDescriptionXmlnsStRef = xml.chilkatPath('rdf:RDF|rdf:Description[i]|(xmlns:stRef)');
rdfDescriptionXmlnsXapMM = xml.chilkatPath('rdf:RDF|rdf:Description[i]|(xmlns:xapMM)');
rdfDescriptionXmlnsXapRights = xml.chilkatPath('rdf:RDF|rdf:Description[i]|(xmlns:xapRights)');
rdfDescriptionXmlnsDc = xml.chilkatPath('rdf:RDF|rdf:Description[i]|(xmlns:dc)');
xmpPLUSCreditLineReq = xml.getChildContent('rdf:RDF|rdf:Description[i]|xmpPLUS:CreditLineReq');
xmpPLUSReuseAllowed = xml.getChildContent('rdf:RDF|rdf:Description[i]|xmpPLUS:ReuseAllowed');
iptc4xmpCoreIntellectualGenre = xml.getChildContent('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:IntellectualGenre');
iptc4xmpCoreLocation = xml.getChildContent('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:Location');
iptc4xmpCoreCountryCode = xml.getChildContent('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CountryCode');
iptc4xmpCoreCreatorContactInfoRdfParseType = xml.chilkatPath('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|(rdf:parseType)');
iptc4xmpCoreCiAdrExtadr = xml.getChildContent('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiAdrExtadr');
iptc4xmpCoreCiAdrCity = xml.getChildContent('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiAdrCity');
iptc4xmpCoreCiAdrRegion = xml.getChildContent('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiAdrRegion');
iptc4xmpCoreCiAdrPcode = xml.getChildIntValue('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiAdrPcode');
iptc4xmpCoreCiAdrCtry = xml.getChildContent('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiAdrCtry');
iptc4xmpCoreCiTelWork = xml.getChildContent('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiTelWork');
iptc4xmpCoreCiEmailWork = xml.getChildContent('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiEmailWork');
iptc4xmpCoreCiUrlWork = xml.getChildContent('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:CreatorContactInfo|Iptc4xmpCore:CiUrlWork');
rdfLi = xml.getChildIntValue('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:SubjectCode|rdf:Bag|rdf:li');
rdfLi = xml.getChildIntValue('rdf:RDF|rdf:Description[i]|Iptc4xmpCore:Scene|rdf:Bag|rdf:li');
exifColorSpace = xml.getChildIntValue('rdf:RDF|rdf:Description[i]|exif:ColorSpace');
exifPixelXDimension = xml.getChildIntValue('rdf:RDF|rdf:Description[i]|exif:PixelXDimension');
exifPixelYDimension = xml.getChildIntValue('rdf:RDF|rdf:Description[i]|exif:PixelYDimension');
photoshopAuthorsPosition = xml.getChildContent('rdf:RDF|rdf:Description[i]|photoshop:AuthorsPosition');
photoshopHeadline = xml.getChildContent('rdf:RDF|rdf:Description[i]|photoshop:Headline');
photoshopCaptionWriter = xml.getChildContent('rdf:RDF|rdf:Description[i]|photoshop:CaptionWriter');
photoshopDateCreated = xml.getChildContent('rdf:RDF|rdf:Description[i]|photoshop:DateCreated');
photoshopCity = xml.getChildContent('rdf:RDF|rdf:Description[i]|photoshop:City');
photoshopState = xml.getChildContent('rdf:RDF|rdf:Description[i]|photoshop:State');
photoshopCountry = xml.getChildContent('rdf:RDF|rdf:Description[i]|photoshop:Country');
photoshopTransmissionReference = xml.getChildContent('rdf:RDF|rdf:Description[i]|photoshop:TransmissionReference');
photoshopInstructions = xml.getChildContent('rdf:RDF|rdf:Description[i]|photoshop:Instructions');
photoshopCredit = xml.getChildContent('rdf:RDF|rdf:Description[i]|photoshop:Credit');
photoshopSource = xml.getChildContent('rdf:RDF|rdf:Description[i]|photoshop:Source');
tiffXResolution = xml.getChildContent('rdf:RDF|rdf:Description[i]|tiff:XResolution');
tiffYResolution = xml.getChildContent('rdf:RDF|rdf:Description[i]|tiff:YResolution');
tiffResolutionUnit = xml.getChildIntValue('rdf:RDF|rdf:Description[i]|tiff:ResolutionUnit');
tiffOrientation = xml.getChildIntValue('rdf:RDF|rdf:Description[i]|tiff:Orientation');
xapCreateDate = xml.getChildContent('rdf:RDF|rdf:Description[i]|xap:CreateDate');
xapModifyDate = xml.getChildContent('rdf:RDF|rdf:Description[i]|xap:ModifyDate');
xapMetadataDate = xml.getChildContent('rdf:RDF|rdf:Description[i]|xap:MetadataDate');
xapCreatorTool = xml.getChildContent('rdf:RDF|rdf:Description[i]|xap:CreatorTool');
xapMMDerivedFromRdfParseType = xml.chilkatPath('rdf:RDF|rdf:Description[i]|xapMM:DerivedFrom|(rdf:parseType)');
stRefInstanceID = xml.getChildContent('rdf:RDF|rdf:Description[i]|xapMM:DerivedFrom|stRef:instanceID');
stRefDocumentID = xml.getChildContent('rdf:RDF|rdf:Description[i]|xapMM:DerivedFrom|stRef:documentID');
xapMMDocumentID = xml.getChildContent('rdf:RDF|rdf:Description[i]|xapMM:DocumentID');
xapRightsMarked = xml.getChildContent('rdf:RDF|rdf:Description[i]|xapRights:Marked');
xapRightsWebStatement = xml.getChildContent('rdf:RDF|rdf:Description[i]|xapRights:WebStatement');
rdfLiXmlLang = xml.chilkatPath('rdf:RDF|rdf:Description[i]|xapRights:RightsUsageTerms|rdf:Alt|rdf:li|(xml:lang)');
strRdfLi = xml.getChildContent('rdf:RDF|rdf:Description[i]|xapRights:RightsUsageTerms|rdf:Alt|rdf:li');
rdfLiXmlLang = xml.chilkatPath('rdf:RDF|rdf:Description[i]|xapRights:UsageTerms|rdf:Alt|rdf:li|(xml:lang)');
strRdfLi = xml.getChildContent('rdf:RDF|rdf:Description[i]|xapRights:UsageTerms|rdf:Alt|rdf:li');
dcFormat = xml.getChildContent('rdf:RDF|rdf:Description[i]|dc:format');
rdfLiXmlLang = xml.chilkatPath('rdf:RDF|rdf:Description[i]|dc:description|rdf:Alt|rdf:li|(xml:lang)');
strRdfLi = xml.getChildContent('rdf:RDF|rdf:Description[i]|dc:description|rdf:Alt|rdf:li');
rdfLiXmlLang = xml.chilkatPath('rdf:RDF|rdf:Description[i]|dc:title|rdf:Alt|rdf:li|(xml:lang)');
strRdfLi = xml.getChildContent('rdf:RDF|rdf:Description[i]|dc:title|rdf:Alt|rdf:li');
rdfLiXmlLang = xml.chilkatPath('rdf:RDF|rdf:Description[i]|dc:rights|rdf:Alt|rdf:li|(xml:lang)');
strRdfLi = xml.getChildContent('rdf:RDF|rdf:Description[i]|dc:rights|rdf:Alt|rdf:li');
strRdfLi = xml.getChildContent('rdf:RDF|rdf:Description[i]|dc:creator|rdf:Seq|rdf:li');
j = 0;
countJ = xml.numChildrenHavingTag('rdf:RDF|rdf:Description[i]|dc:subject|rdf:Bag|rdf:li');
while (j < countJ) {
xml.j = j;
strRdfLi = xml.getChildContent('rdf:RDF|rdf:Description[i]|dc:subject|rdf:Bag|rdf:li[j]');
j++;
}
i++;
}
}