mrwthumb.cpp

Sample program to extract a Minolta thumbnail from the makernote

// SPDX-License-Identifier: GPL-2.0-or-later
// Sample program to extract a Minolta thumbnail from the makernote
#include <exiv2/exiv2.hpp>
#include <iostream>
int main(int argc, char* const argv[]) {
try {
if (argc != 2) {
std::cout << "Usage: " << argv[0] << " file\n";
return EXIT_FAILURE;
}
auto image = Exiv2::ImageFactory::open(argv[1]);
image->readMetadata();
Exiv2::ExifData& exifData = image->exifData();
if (exifData.empty()) {
std::string error(argv[1]);
error += ": No Exif data found in the file";
throw Exiv2::Error(Exiv2::ErrorCode::kerErrorMessage, error);
}
Exiv2::ExifKey key("Exif.Minolta.ThumbnailOffset");
auto format = exifData.findKey(key);
if (format != exifData.end()) {
Exiv2::DataBuf buf = format->dataArea();
// The first byte of the buffer needs to be patched
buf.write_uint8(0, 0xff);
Exiv2::FileIo file("img_thumb.jpg");
file.open("wb");
file.write(buf.c_data(), buf.size());
file.close();
}
return EXIT_SUCCESS;
} catch (Exiv2::Error& e) {
std::cout << "Caught Exiv2 exception '" << e << "'\n";
return EXIT_FAILURE;
}
}
Simple error class used for exceptions. An output operator is provided to print errors to a stream.
Definition: error.hpp:235
A container for Exif data. This is a top-level class of the Exiv2 library. The container holds Exifda...
Definition: exif.hpp:379
bool empty() const
Return true if there is no Exif metadata.
Definition: exif.hpp:465
iterator findKey(const ExifKey &key)
Find the first Exifdatum with the given key, return an iterator to it.
iterator end()
End of the metadata.
Definition: exif.hpp:439
Concrete keys for Exif metadata and access to Exif tag reference data.
Definition: tags.hpp:271
static Image::UniquePtr 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...
static void terminate()
Terminate the XMP Toolkit and unregister custom namespaces.
static bool initialize(XmpParser::XmpLockFct xmpLockFct=nullptr, void *pLockData=nullptr)
Initialize the XMP Toolkit.
Utility class containing a character array. All it does is to take care of memory allocation and dele...
Definition: types.hpp:124
const byte * c_data(size_t offset=0) const
Returns a (read-only) data pointer.