imageio: do not fail in saving an image if no metadata is available
(cherry picked from commit 86d48be88b6f9fe36e5e25185ec4fda7696efc25)
This commit is contained in:
parent
e205ff86cc
commit
ea3cf2fe8f
@ -41,6 +41,7 @@
|
|||||||
#include "iccjpeg.h"
|
#include "iccjpeg.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "imagedata.h"
|
#include "imagedata.h"
|
||||||
|
#include "settings.h"
|
||||||
|
|
||||||
#include "jpeg.h"
|
#include "jpeg.h"
|
||||||
|
|
||||||
@ -48,6 +49,8 @@ using namespace std;
|
|||||||
using namespace rtengine;
|
using namespace rtengine;
|
||||||
using namespace rtengine::procparams;
|
using namespace rtengine::procparams;
|
||||||
|
|
||||||
|
namespace rtengine { extern const Settings *settings; }
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -1355,38 +1358,50 @@ bool ImageIO::saveMetadata(const Glib::ustring &fname) const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool has_meta = true;
|
||||||
try {
|
try {
|
||||||
metadataInfo.load();
|
metadataInfo.load();
|
||||||
metadataInfo.saveToImage(fname);
|
|
||||||
// auto src = open_exiv2(metadataInfo.filename());
|
|
||||||
// auto dst = open_exiv2(fname);
|
|
||||||
// src->readMetadata();
|
|
||||||
// dst->setMetadata(*src);
|
|
||||||
// dst->exifData()["Exif.Image.Software"] = "RawTherapee " RTVERSION;
|
|
||||||
// for (const auto& p : metadataInfo.exif()) {
|
|
||||||
// try {
|
|
||||||
// dst->exifData()[p.first] = p.second;
|
|
||||||
// } catch (const Exiv2::AnyError& exc) {
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// for (const auto& p : metadataInfo.iptc()) {
|
|
||||||
// try {
|
|
||||||
// auto& v = p.second;
|
|
||||||
// if (!v.empty()) {
|
|
||||||
// dst->iptcData()[p.first] = v[0];
|
|
||||||
// for (size_t j = 1; j < v.size(); ++j) {
|
|
||||||
// Exiv2::Iptcdatum d(Exiv2::IptcKey(p.first));
|
|
||||||
// d.setValue(v[j]);
|
|
||||||
// dst->iptcData().add(d);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// } catch (const Exiv2::AnyError& exc) {
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// dst->writeMetadata();
|
|
||||||
return true;
|
|
||||||
} catch (const std::exception& exc) {
|
} catch (const std::exception& exc) {
|
||||||
std::cout << "EXIF ERROR: " << exc.what() << std::endl;
|
if (settings->verbose) {
|
||||||
return false;
|
std::cout << "EXIF LOAD ERROR: " << exc.what() << std::endl;
|
||||||
|
}
|
||||||
|
has_meta = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (has_meta) {
|
||||||
|
try {
|
||||||
|
metadataInfo.saveToImage(fname);
|
||||||
|
// auto src = open_exiv2(metadataInfo.filename());
|
||||||
|
// auto dst = open_exiv2(fname);
|
||||||
|
// src->readMetadata();
|
||||||
|
// dst->setMetadata(*src);
|
||||||
|
// dst->exifData()["Exif.Image.Software"] = "RawTherapee " RTVERSION;
|
||||||
|
// for (const auto& p : metadataInfo.exif()) {
|
||||||
|
// try {
|
||||||
|
// dst->exifData()[p.first] = p.second;
|
||||||
|
// } catch (const Exiv2::AnyError& exc) {
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// for (const auto& p : metadataInfo.iptc()) {
|
||||||
|
// try {
|
||||||
|
// auto& v = p.second;
|
||||||
|
// if (!v.empty()) {
|
||||||
|
// dst->iptcData()[p.first] = v[0];
|
||||||
|
// for (size_t j = 1; j < v.size(); ++j) {
|
||||||
|
// Exiv2::Iptcdatum d(Exiv2::IptcKey(p.first));
|
||||||
|
// d.setValue(v[j]);
|
||||||
|
// dst->iptcData().add(d);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } catch (const Exiv2::AnyError& exc) {
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// dst->writeMetadata();
|
||||||
|
} catch (const std::exception& exc) {
|
||||||
|
std::cout << "EXIF ERROR: " << exc.what() << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user