88
99#include < exiv2/exif.hpp>
1010#include < exiv2/image.hpp>
11+ #include < exiv2/properties.hpp>
12+ #include < exiv2/types.hpp>
13+ #include < exiv2/value.hpp>
1114
1215#include < cassert>
13- #include < iostream>
1416#include < filesystem>
17+ #include < iostream>
18+ #include < iomanip>
1519
1620namespace fs = std::filesystem;
1721
18- void exifPrint (const Exiv2::ExifData& exifData);
22+ static void exifPrint (const Exiv2::ExifData& exifData);
1923
20- #define METADATA_KEY " Exif.Image.XResolution"
21-
22- const std::string IMAGE_TEST_PATH (TEST_IMAGE_PATH);
24+ constexpr auto METADATA_KEY = " Exif.Image.XResolution" ;
2325
2426TEST_CASE (" Edit" ){
25- const std::string filename = IMAGE_TEST_PATH + " dummy.tif" ;
27+ constexpr auto filename = TEST_IMAGE_PATH " dummy.tif" ;
2628 {
2729
28- auto image = Exiv2::ImageFactory::open (filename);
30+ const auto image = Exiv2::ImageFactory::open (filename);
2931 assert (image.get () != nullptr );
3032 assert (image->good ());
3133 assert (image->checkMode (Exiv2::MetadataId::mdExif) !=Exiv2::AccessMode::amRead);
3234
3335 image->readMetadata ();
3436
3537 Exiv2::ExifData exifData = image->exifData ();
36- std::cout << " The original value of " << METADATA_KEY << " is " << exifData[METADATA_KEY] << std::endl;
37- Exiv2::Exifdatum d = exifData[" Exif.Image.XResolution" ];
38- std::cout << " family name " << d .familyName () << std::endl;
39- std::cout << " groupName " << d .groupName () << std::endl;
40- std::cout << " tagName " << d .tagName () << std::endl;
38+ std::cout << " The original value of " << METADATA_KEY << " is " << exifData[METADATA_KEY] << std::endl;
39+ const Exiv2::Exifdatum data = exifData[" Exif.Image.XResolution" ];
40+ std::cout << " family name " << data .familyName () << std::endl;
41+ std::cout << " groupName " << data .groupName () << std::endl;
42+ std::cout << " tagName " << data .tagName () << std::endl;
4143
4244 Exiv2::RationalValue value;
4345 value.read (" 300/1" );
@@ -50,21 +52,21 @@ TEST_CASE("Edit"){
5052
5153 std::cout << " Written to " << filename <<std::endl;
5254 {
53- auto image = Exiv2::ImageFactory::open (filename);
54- assert (image.get () != 0 );
55+ const auto image = Exiv2::ImageFactory::open (filename);
56+ assert (image.get () != nullptr );
5557 image->readMetadata ();
5658 Exiv2::ExifData exifData_second = image->exifData ();
5759 std::cout << " Now the value of " << exifData_second[METADATA_KEY].key () << " is " << exifData_second[METADATA_KEY].value ().toFloat () << std::endl;
5860 exifPrint (exifData_second);
5961 }
6062}
6163TEST_CASE (" Edit tiff" ) {
62- const std::string filename = IMAGE_TEST_PATH + " dummy.tif" ;
64+ constexpr auto filename = TEST_IMAGE_PATH " dummy.tif" ;
6365 {
6466
65- auto image = Exiv2::ImageFactory::open (filename);
67+ const auto image = Exiv2::ImageFactory::open (filename);
6668
67- assert (image.get () != 0 );
69+ assert (image.get () != nullptr );
6870 assert (image->good ());
6971 assert (image->checkMode (Exiv2::MetadataId::mdExif) != Exiv2::AccessMode::amRead);
7072
@@ -74,10 +76,7 @@ TEST_CASE("Edit tiff") {
7476 exifPrint (exifData);
7577 exifData[" Exif.Image.XResolution" ] = 300 ;
7678 exifData[" Exif.Image.YResolution" ] = 300 ;
77- std::string stringvalue = exifData[METADATA_KEY].toString ();
7879 exifData[" Exif.Image.ResolutionUnit" ] = 2 ;
79- Exiv2::Exifdatum d = exifData[" Exif.Image.ResolutionUnit" ];
80-
8180 image->setExifData (exifData);
8281 image->writeMetadata ();
8382 std::cout << " Written to " << filename << std::endl;
@@ -87,8 +86,8 @@ TEST_CASE("Edit tiff") {
8786 }
8887
8988 {
90- auto image = Exiv2::ImageFactory::open (filename);
91- assert (image.get () != 0 );
89+ const auto image = Exiv2::ImageFactory::open (filename);
90+ assert (image.get () != nullptr );
9291 image->readMetadata ();
9392 Exiv2::ExifData exifData_second = image->exifData ();
9493 std::cout << " Now the value of " << exifData_second[" Exif.Image.XResolution" ].key () << " is "
@@ -101,8 +100,7 @@ TEST_CASE("Edit tiff") {
101100
102101void exifPrint (const Exiv2::ExifData& exifData)
103102{
104- Exiv2::ExifData::const_iterator i = exifData.begin ();
105- for (; i != exifData.end (); ++i) {
103+ for (auto i = exifData.begin (); i != exifData.end (); ++i) {
106104 std::cout << std::setw (44 ) << std::setfill (' ' ) << std::left
107105 << i->key () << " "
108106 << " 0x" << std::setw (4 ) << std::setfill (' 0' ) << std::right
@@ -118,8 +116,6 @@ void exifPrint(const Exiv2::ExifData& exifData)
118116}
119117
120118TEST_CASE (" edit jp2 metadata" , " [integration,upstream]" ){
121- const std::string source = IMAGE_TEST_PATH + " dummy.jp2" ;
122- const std::string out = IMAGE_TEST_PATH + " changeme.jp2" ;
123119 auto [key, startingValue, value] = GENERATE (table<std::string, std::string, std::string>({
124120 {" Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiAdrCity" , " Urbana" , " Champaign" },
125121 {
" Xmp.iptc.CreatorContactInfo/Iptc4xmpCore:CiEmailWork" ,
" [email protected] " ,
" [email protected] " },
@@ -129,24 +125,25 @@ TEST_CASE("edit jp2 metadata", "[integration,upstream]"){
129125 }
130126 ) );
131127 DYNAMIC_SECTION (" Change " << key <<" to " << value){
128+ constexpr auto source = TEST_IMAGE_PATH " dummy.jp2" ;
129+ constexpr auto out = TEST_IMAGE_PATH " changeme.jp2" ;
132130 fs::copy (source, out, fs::copy_options::overwrite_existing);
133131 {
134132 auto image = Exiv2::ImageFactory::open (out);
135- assert (image.get () != 0 );
133+ assert (image.get () != nullptr );
136134 image->readMetadata ();
137135 auto xmpData = image->xmpData ();
138136 REQUIRE (xmpData[key].value ().toString () == startingValue);
139- auto x = xmpData.findKey (Exiv2::XmpKey (key));
140- if (x != xmpData.end ()){
141- xmpData.erase (x);
137+ if (auto erase_key = xmpData.findKey (Exiv2::XmpKey (key)); erase_key != xmpData.end ()){
138+ xmpData.erase (erase_key);
142139 }
143140 xmpData[key].setValue (value);
144141 image->setXmpData (xmpData);
145142 image->writeMetadata ();
146143 }
147144 {
148145 auto second_image = Exiv2::ImageFactory::open (out);
149- assert (second_image.get () != 0 );
146+ assert (second_image.get () != nullptr );
150147 second_image->readMetadata ();
151148 auto secondXmpData = second_image->xmpData ();
152149 REQUIRE (secondXmpData[key].value ().toString () == value);
0 commit comments