xmpprint.cpp

Read an XMP from a file, parse it and print all (known) properties

// ***************************************************************** -*- C++ -*-
/*
* Copyright (C) 2004-2021 Exiv2 authors
* This program is part of the Exiv2 distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
*/
// xmpprint.cpp
// Read an XMP from a video or graphic file, parse it and print
// all (known) properties.
// ========================================================================
// Linux standalone compilation :
// g++ -o xmpprint xmpprint.cpp `pkg-config --cflags --libs exiv2`
// ========================================================================
#include <exiv2/exiv2.hpp>
#include <string>
#include <iostream>
#include <iomanip>
#include <cassert>
int main(int argc, char** argv)
{
#ifdef EXV_ENABLE_BMFF
Exiv2::enableBMFF();
#endif
try
{
if (argc != 2)
{
std::cout << "Usage: " << argv[0] << " file\n";
return 1;
}
assert (image.get() != 0);
image->readMetadata();
Exiv2::XmpData &xmpData = image->xmpData();
if (xmpData.empty()) {
std::string error(argv[1]);
error += ": No XMP data found in the file";
throw Exiv2::Error(Exiv2::kerErrorMessage, error);
}
if (xmpData.empty())
{
std::string error(argv[1]);
error += ": No XMP properties found in the XMP packet";
throw Exiv2::Error(Exiv2::kerErrorMessage, error);
}
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->toString()
<< std::endl;
}
return 0;
}
catch (Exiv2::AnyError& e)
{
std::cout << "Caught Exiv2 exception '" << e << "'\n";
return -1;
}
}
static bool initialize(XmpParser::XmpLockFct xmpLockFct=0, void *pLockData=0)
Initialize the XMP Toolkit.
Error class interface. Allows the definition and use of a hierarchy of error classes which can all be...
Definition: error.hpp:174
A container for XMP data. This is a top-level class of the Exiv2 library.
Definition: xmp_exiv2.hpp:166
iterator begin()
Begin of the metadata.
bool empty() const
Return true if there is no XMP metadata.
static void terminate()
Terminate the XMP Toolkit and unregister custom namespaces.
iterator end()
End of the metadata.
XmpMetadata::const_iterator const_iterator
XmpMetadata const iterator type.
Definition: xmp_exiv2.hpp:174
std::auto_ptr< Image > AutoPtr
Image auto_ptr type.
Definition: image.hpp:81
static Image::AutoPtr open(const std::string &path, bool useCurl=true)
Create an Image subclass of the appropriate type by reading the specified file. Image type is derived...
BasicError< char > Error
Error class used for exceptions (std::string based)
Definition: error.hpp:324