Added XMP sample (incomplete), bugfixes.
parent
4d3c398ee1
commit
9beec8880d
@ -0,0 +1,67 @@
|
|||||||
|
// ***************************************************************** -*- C++ -*-
|
||||||
|
// xmpsample.cpp, $Rev$
|
||||||
|
// Sample/test for high level XMP classes
|
||||||
|
|
||||||
|
#include "value.hpp"
|
||||||
|
#include "xmp.hpp"
|
||||||
|
#include "error.hpp"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
|
using namespace Exiv2;
|
||||||
|
|
||||||
|
int main()
|
||||||
|
try {
|
||||||
|
// The XMP property container
|
||||||
|
Exiv2::XmpData xmpData;
|
||||||
|
|
||||||
|
// Add a simple XMP property in a known namespace
|
||||||
|
Exiv2::Value::AutoPtr v = Exiv2::Value::create(xmpText);
|
||||||
|
v->read("image/jpeg");
|
||||||
|
xmpData.add(Exiv2::XmpKey("Xmp.dc.format"), v.get());
|
||||||
|
|
||||||
|
// Add an ordered array of text values
|
||||||
|
v = Exiv2::Value::create(xmpSeq);
|
||||||
|
v->read("1) The first creator"); // the sequence in which the array elements
|
||||||
|
v->read("2) The second creator"); // are added is relevant
|
||||||
|
v->read("3) And another one");
|
||||||
|
xmpData.add(Exiv2::XmpKey("Xmp.dc.creator"), v.get());
|
||||||
|
|
||||||
|
// Add a language alternative property
|
||||||
|
v = Exiv2::Value::create(langAlt);
|
||||||
|
v->read("lang=de-DE Hallo, Welt"); // the default doesn't need a qualifier
|
||||||
|
v->read("Hello, World"); // and it will become the first element
|
||||||
|
xmpData.add(Exiv2::XmpKey("Xmp.dc.description"), v.get());
|
||||||
|
|
||||||
|
// Output XMP properties
|
||||||
|
for (Exiv2::XmpData::const_iterator md = xmpData.begin();
|
||||||
|
md != xmpData.end(); ++md) {
|
||||||
|
std::cout << std::setfill(' ') << std::left
|
||||||
|
<< std::setw(44)
|
||||||
|
<< md->key() << " "
|
||||||
|
<< std::setw(9) << std::setfill(' ') << std::left
|
||||||
|
<< md->typeName() << " "
|
||||||
|
<< std::dec << std::setw(3)
|
||||||
|
<< std::setfill(' ') << std::right
|
||||||
|
<< md->count() << " "
|
||||||
|
<< std::dec << md->value()
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serialize the XMP data and output the XMP packet
|
||||||
|
std::string xmpPacket;
|
||||||
|
if (0 != Exiv2::XmpParser::encode(xmpPacket, xmpData)) {
|
||||||
|
throw Exiv2::Error(1, "Failed to serialize XMP data");
|
||||||
|
}
|
||||||
|
std::cout << xmpPacket << "\n";
|
||||||
|
|
||||||
|
// Cleanup
|
||||||
|
Exiv2::XmpParser::terminate();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
catch (Exiv2::AnyError& e) {
|
||||||
|
std::cout << "Caught Exiv2 exception '" << e << "'\n";
|
||||||
|
return -1;
|
||||||
|
}
|
Loading…
Reference in New Issue