00001 // ***************************************************************** -*- C++ -*- 00002 // exifprint.cpp, $Rev: 1757 $ 00003 // Sample program to print the Exif metadata of an image 00004 00005 #include <exiv2/image.hpp> 00006 #include <exiv2/exif.hpp> 00007 #include <iostream> 00008 #include <iomanip> 00009 #include <cassert> 00010 00011 int main(int argc, char* const argv[]) 00012 try { 00013 00014 if (argc != 2) { 00015 std::cout << "Usage: " << argv[0] << " file\n"; 00016 return 1; 00017 } 00018 00019 Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(argv[1]); 00020 assert(image.get() != 0); 00021 image->readMetadata(); 00022 00023 Exiv2::ExifData &exifData = image->exifData(); 00024 if (exifData.empty()) { 00025 std::string error(argv[1]); 00026 error += ": No Exif data found in the file"; 00027 throw Exiv2::Error(1, error); 00028 } 00029 Exiv2::ExifData::const_iterator end = exifData.end(); 00030 for (Exiv2::ExifData::const_iterator i = exifData.begin(); i != end; ++i) { 00031 const char* tn = i->typeName(); 00032 std::cout << std::setw(44) << std::setfill(' ') << std::left 00033 << i->key() << " " 00034 << "0x" << std::setw(4) << std::setfill('0') << std::right 00035 << std::hex << i->tag() << " " 00036 << std::setw(9) << std::setfill(' ') << std::left 00037 << (tn ? tn : "Unknown") << " " 00038 << std::dec << std::setw(3) 00039 << std::setfill(' ') << std::right 00040 << i->count() << " " 00041 << std::dec << i->value() 00042 << "\n"; 00043 } 00044 00045 return 0; 00046 } 00047 catch (Exiv2::AnyError& e) { 00048 std::cout << "Caught Exiv2 exception '" << e << "'\n"; 00049 return -1; 00050 }