metadata: filter out unwanted tags when syncing with xmp sidecars
(cherry picked from commit 239f3f59b931efb15482134fffd5f6065616e574)
This commit is contained in:
parent
d16bc6f6ea
commit
3d209e687d
@ -130,7 +130,7 @@ void Exiv2Metadata::load() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (merge_xmp_) {
|
if (merge_xmp_) {
|
||||||
do_merge_xmp(image_.get());
|
do_merge_xmp(image_.get(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -190,14 +190,18 @@ void Exiv2Metadata::setIptc(const rtengine::procparams::IPTCPairs &iptc)
|
|||||||
*iptc_ = iptc;
|
*iptc_ = iptc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Exiv2Metadata::do_merge_xmp(Exiv2::Image *dst) const
|
void Exiv2Metadata::do_merge_xmp(Exiv2::Image *dst, bool keep_all) const
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
auto xmp = getXmpSidecar(src_);
|
auto xmp = getXmpSidecar(src_);
|
||||||
Exiv2::ExifData exif;
|
Exiv2::ExifData exif;
|
||||||
Exiv2::IptcData iptc;
|
Exiv2::IptcData iptc;
|
||||||
Exiv2::copyXmpToIptc(xmp, iptc);
|
Exiv2::copyXmpToIptc(xmp, iptc);
|
||||||
Exiv2::copyXmpToExif(xmp, exif);
|
Exiv2::moveXmpToExif(xmp, exif);
|
||||||
|
|
||||||
|
if (!keep_all) {
|
||||||
|
remove_unwanted(exif);
|
||||||
|
}
|
||||||
|
|
||||||
for (auto &datum : exif) {
|
for (auto &datum : exif) {
|
||||||
dst->exifData()[datum.key()] = datum;
|
dst->exifData()[datum.key()] = datum;
|
||||||
@ -224,7 +228,7 @@ void Exiv2Metadata::saveToImage(const Glib::ustring &path, bool preserve_all_tag
|
|||||||
dst->setIptcData(image_->iptcData());
|
dst->setIptcData(image_->iptcData());
|
||||||
dst->setXmpData(image_->xmpData());
|
dst->setXmpData(image_->xmpData());
|
||||||
if (merge_xmp_) {
|
if (merge_xmp_) {
|
||||||
do_merge_xmp(dst.get());
|
do_merge_xmp(dst.get(), preserve_all_tags);
|
||||||
}
|
}
|
||||||
auto srcexif = image_->exifData();
|
auto srcexif = image_->exifData();
|
||||||
if (!preserve_all_tags) {
|
if (!preserve_all_tags) {
|
||||||
@ -258,7 +262,7 @@ void Exiv2Metadata::saveToImage(const Glib::ustring &path, bool preserve_all_tag
|
|||||||
!dst->xmpData().empty()) {
|
!dst->xmpData().empty()) {
|
||||||
dst->xmpData().clear();
|
dst->xmpData().clear();
|
||||||
if (!xmp_tried && merge_xmp_) {
|
if (!xmp_tried && merge_xmp_) {
|
||||||
do_merge_xmp(dst.get());
|
do_merge_xmp(dst.get(), preserve_all_tags);
|
||||||
xmp_tried = true;
|
xmp_tried = true;
|
||||||
}
|
}
|
||||||
} else if (msg.find("IPTC") != std::string::npos &&
|
} else if (msg.find("IPTC") != std::string::npos &&
|
||||||
|
@ -67,7 +67,7 @@ public:
|
|||||||
static void cleanup();
|
static void cleanup();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void do_merge_xmp(Exiv2::Image* dst) const;
|
void do_merge_xmp(Exiv2::Image* dst, bool keep_all) const;
|
||||||
void import_exif_pairs(Exiv2::ExifData& out) const;
|
void import_exif_pairs(Exiv2::ExifData& out) const;
|
||||||
void import_iptc_pairs(Exiv2::IptcData& out) const;
|
void import_iptc_pairs(Exiv2::IptcData& out) const;
|
||||||
void remove_unwanted(Exiv2::ExifData& dst) const;
|
void remove_unwanted(Exiv2::ExifData& dst) const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user