You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
exiv2/src/exiftest.cpp

160 lines
4.3 KiB
C++

22 years ago
// ***************************************************************** -*- C++ -*-
/*
Abstract : This is playground code, do what you want with it.
22 years ago
Author(s): Andreas Huggel (ahu) <ahuggel@gmx.net>
Version : $Name: $ $Revision: 1.17 $
22 years ago
*/
// *****************************************************************************
#include "rcsid.hpp"
EXIV2_RCSID("@(#) $Name: $ $Revision: 1.17 $ $RCSfile: exiftest.cpp,v $")
22 years ago
// *****************************************************************************
// included header files
#include "exif.hpp"
22 years ago
#include <iostream>
#include <iomanip>
22 years ago
#include <sstream>
22 years ago
22 years ago
// *****************************************************************************
// local declarations
using namespace Exif;
22 years ago
void exifPrint(const ExifData& exifData);
22 years ago
std::string readError(int rc, const char* file);
std::string writeError(int rc, const char* file);
22 years ago
22 years ago
// *****************************************************************************
// Main
int main(int argc, char* const argv[])
22 years ago
try {
if (argc != 2) {
std::cout << "Usage: exiftest file\n";
return 1;
}
22 years ago
22 years ago
ExifData exifData;
int rc = exifData.read(argv[1]);
22 years ago
if (rc) {
22 years ago
std::string error = readError(rc, argv[1]);
22 years ago
throw Error(error);
}
22 years ago
exifPrint(exifData);
exifData.writeThumbnail("thumb");
22 years ago
char* buf = new char[1024*128];
long siz = exifData.copy(buf);
std::cout << siz << " Bytes written.\n"
<< "=======================\n";
ExifData e2;
e2.read(buf, siz);
exifPrint(e2);
e2.writeThumbnail("t2");
22 years ago
// Assumes that such a file exists...
rc = e2.write("test.jpg");
if (rc) {
std::string error = writeError(rc, "test.jpg");
throw Error(error);
}
return rc;
22 years ago
}
22 years ago
catch (Error& e) {
std::cout << "Caught Exif exception '" << e << "'\n";
return 1;
}
// *****************************************************************************
// local definitions
22 years ago
void exifPrint(const ExifData& exifData)
{
ExifData::const_iterator beg = exifData.begin();
ExifData::const_iterator end = exifData.end();
ExifData::const_iterator i = beg;
for (; i != end; ++i) {
std::cout << "0x"
<< std::hex << std::setw(4) << std::setfill('0') << std::right
<< i->tag() << " "
<< std::setw(27) << std::setfill(' ') << std::left
<< i->tagName() << " "
<< std::setw(17) << std::setfill(' ') << std::left
<< i->typeName() << " "
<< std::dec << std::setw(3)
<< std::setfill(' ') << std::right
<< i->count() << " "
<< std::dec << *i
// << std::dec << i->value()
22 years ago
// << " | " << i->key()
22 years ago
<< " | " << i->ifdName()
<< "\n";
}
}
22 years ago
std::string readError(int rc, const char* file)
{
std::string error;
switch (rc) {
case -1:
error = "Couldn't open file `" + std::string(file) + "'";
break;
case 1:
error = "Couldn't read from the input stream";
break;
case 2:
error = "This does not look like a JPEG image";
break;
case 3:
error = "No Exif data found in the file";
break;
case -99:
error = "Unsupported Exif or GPS data found in IFD 1";
break;
default:
error = "Reading Exif data failed, rc = " + toString(rc);
break;
}
return error;
}
std::string writeError(int rc, const char* file)
{
std::string error;
switch (rc) {
case -1:
error = "Couldn't open file `" + std::string(file) + "'";
break;
case -2:
error = "Couldn't open temporary file";
break;
case -3:
error = "Renaming temporary file failed";
break;
case 1:
error = "Couldn't read from the input stream";
break;
case 2:
error = "This does not look like a JPEG image";
break;
case 3:
error = "No JFIF APP0 or Exif APP1 segment found in the file";
break;
case 4:
error = "Writing to the output stream failed";
break;
default:
error = "Reading Exif data failed, rc = " + toString(rc);
break;
}
return error;
}