File indexing completed on 2024-05-12 15:59:02

0001 /*
0002  * SPDX-FileCopyrightText: 2016 Boudewijn Rempt <boud@valdyas.org>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #ifndef ExifCHECK_H
0008 #define ExifCHECK_H
0009 
0010 #include "KisExportCheckRegistry.h"
0011 #include <KoID.h>
0012 #include <klocalizedstring.h>
0013 #include <kis_assert.h>
0014 #include <kis_image.h>
0015 #include <KoColorSpace.h>
0016 #include <kis_meta_data_store.h>
0017 #include <kis_meta_data_filter_registry_model.h>
0018 #include <kis_exif_info_visitor.h>
0019 
0020 class ExifCheck : public KisExportCheckBase
0021 {
0022 public:
0023 
0024     ExifCheck(const QString &id, Level level, const QString &customWarning = QString())
0025         : KisExportCheckBase(id, level, customWarning)
0026     {
0027         if (customWarning.isEmpty()) {
0028             m_warning = i18nc("image conversion warning", "The image contains <b>Exif</b> metadata. The metadata will not be saved.");
0029         }
0030     }
0031 
0032     bool checkNeeded(KisImageSP image) const override
0033     {
0034         KisExifInfoVisitor eIV;
0035         eIV.visit(image->rootLayer().data());
0036         return eIV.exifInfo();
0037     }
0038 
0039     Level check(KisImageSP /*image*/) const override
0040     {
0041         return m_level;
0042     }
0043 
0044 };
0045 
0046 class ExifCheckFactory : public KisExportCheckFactory
0047 {
0048 public:
0049 
0050     ExifCheckFactory()
0051     {
0052     }
0053 
0054     ~ExifCheckFactory() override {}
0055 
0056     KisExportCheckBase *create(KisExportCheckBase::Level level, const QString &customWarning) override
0057     {
0058         return new ExifCheck(id(), level, customWarning);
0059     }
0060 
0061     QString id() const override {
0062         return "ExifCheck";
0063     }
0064 
0065 };
0066 
0067 class TiffExifCheck : public KisExportCheckBase
0068 {
0069 public:
0070     TiffExifCheck(const QString &id, Level level, const QString &customWarning = QString())
0071         : KisExportCheckBase(id, level, customWarning)
0072     {
0073         if (customWarning.isEmpty()) {
0074             m_warning = i18nc("image conversion warning",
0075                               "The image has <b>Exif</b> metadata and multiple layers. Only metadata <b>in the first "
0076                               "layer</b> will be saved.");
0077         }
0078     }
0079 
0080     bool checkNeeded(KisImageSP image) const override
0081     {
0082         KIS_ASSERT_RECOVER_RETURN_VALUE(image->rootLayer(), false);
0083         KisExifInfoVisitor eIV;
0084         eIV.visit(image->rootLayer().data());
0085         return eIV.exifInfo() && image->rootLayer()->childCount() > 1;
0086     }
0087 
0088     Level check(KisImageSP /*image*/) const override
0089     {
0090         return m_level;
0091     }
0092 };
0093 
0094 class TiffExifCheckFactory : public KisExportCheckFactory
0095 {
0096 public:
0097     TiffExifCheckFactory()
0098     {
0099     }
0100 
0101     ~TiffExifCheckFactory() override
0102     {
0103     }
0104 
0105     KisExportCheckBase *create(KisExportCheckBase::Level level, const QString &customWarning) override
0106     {
0107         return new TiffExifCheck(id(), level, customWarning);
0108     }
0109 
0110     QString id() const override
0111     {
0112         return "TiffExifCheck";
0113     }
0114 };
0115 
0116 #endif // ExifCHECK_H