39 #include <QtCore/QByteArray>
40 #include <QtCore/QString>
41 #include <QtCore/QDateTime>
42 #include <QtCore/QMap>
43 #include <QtCore/QSharedDataPointer>
44 #include <QtCore/QStringList>
45 #include <QtCore/QVariant>
46 #include <QtCore/QRegExp>
47 #include <QtGui/QImage>
75 WRITETOSIDECARONLY = 1,
78 WRITETOSIDECARANDIMAGE = 2,
81 WRITETOSIDECARONLY4READONLYFILES = 3
88 WORKSPACE_UNSPECIFIED = 0,
90 WORKSPACE_ADOBERGB = 2,
91 WORKSPACE_UNCALIBRATED = 65535
98 ORIENTATION_UNSPECIFIED = 0,
99 ORIENTATION_NORMAL = 1,
100 ORIENTATION_HFLIP = 2,
101 ORIENTATION_ROT_180 = 3,
102 ORIENTATION_VFLIP = 4,
103 ORIENTATION_ROT_90_HFLIP = 5,
104 ORIENTATION_ROT_90 = 6,
105 ORIENTATION_ROT_90_VFLIP = 7,
106 ORIENTATION_ROT_270 = 8
154 KExiv2(
const QString& filePath);
175 static bool initializeExiv2();
182 static bool cleanupExiv2();
186 static bool supportXmp();
190 static bool supportMetadataWritting(
const QString& typeMime);
194 static QString Exiv2Version();
198 static QString version();
203 static QString sidecarFilePathForFile(
const QString& path);
207 static QString sidecarPath(
const QString& path);
211 static KUrl sidecarUrl(
const KUrl& url);
215 static KUrl sidecarUrl(
const QString& path);
219 static bool hasSidecar(
const QString& path);
233 bool loadFromData(
const QByteArray& imgData)
const;
238 virtual bool load(
const QString& filePath)
const;
243 bool save(
const QString& filePath)
const;
248 bool applyChanges()
const;
252 bool isEmpty()
const;
256 void setFilePath(
const QString& path);
260 QString getFilePath()
const;
271 QSize getPixelSize()
const;
276 QString getMimeType()
const;
281 void setWriteRawFiles(
const bool on);
286 bool writeRawFiles()
const;
290 void setUseXMPSidecar4Reading(
const bool on);
294 bool useXMPSidecar4Reading()
const;
300 void setMetadataWritingMode(
const int mode);
306 int metadataWritingMode()
const;
311 void setUpdateFileTimeStamp(
bool on);
315 bool updateFileTimeStamp()
const;
326 bool setImageProgramId(
const QString& program,
const QString& version)
const;
331 QSize getImageDimensions()
const;
336 bool setImageDimensions(
const QSize& size,
bool setProgramName=
true)
const;
346 bool setImageOrientation(
ImageOrientation orientation,
bool setProgramName=
true)
const;
356 bool setImageColorWorkSpace(
ImageColorWorkSpace workspace,
bool setProgramName=
true)
const;
361 QDateTime getImageDateTime()
const;
366 bool setImageDateTime(
const QDateTime& dateTime,
bool setDateTimeDigitized=
false,
367 bool setProgramName=
true)
const;
373 QDateTime getDigitizationDateTime(
bool fallbackToCreationTime=
false)
const;
378 bool getImagePreview(QImage& preview)
const;
386 virtual bool setImagePreview(
const QImage& preview,
bool setProgramName=
true)
const;
396 static bool canWriteComment(
const QString& filePath);
400 bool hasComments()
const;
404 bool clearComments()
const;
410 QByteArray getComments()
const;
416 QString getCommentsDecoded()
const;
421 bool setComments(
const QByteArray& data)
const;
427 static QString detectLanguageAlt(
const QString& value, QString& lang);
437 TagsMap getStdExifTagsList()
const;
441 TagsMap getMakernoteTagsList()
const;
445 static bool canWriteExif(
const QString& filePath);
449 bool hasExif()
const;
453 bool clearExif()
const;
462 QByteArray getExifEncoded(
bool addExifHeader=
false)
const;
467 bool setExif(
const QByteArray& data)
const;
473 QImage getExifThumbnail(
bool fixOrientation)
const;
483 bool setExifThumbnail(
const QImage& thumb,
bool setProgramName=
true)
const;
486 bool removeExifThumbnail()
const;
489 bool setTiffThumbnail(
const QImage& thumb,
bool setProgramName=
true)
const;
494 QString getExifComment()
const;
499 bool setExifComment(
const QString& comment,
bool setProgramName=
true)
const;
504 QString getExifTagString(
const char* exifTagName,
bool escapeCR=
true)
const;
508 bool setExifTagString(
const char* exifTagName,
const QString& value,
bool setProgramName=
true)
const;
512 bool getExifTagLong(
const char* exifTagName,
long &val)
const;
516 bool getExifTagLong(
const char* exifTagName,
long &val,
int component)
const;
520 bool setExifTagLong(
const char* exifTagName,
long val,
bool setProgramName=
true)
const;
526 bool getExifTagRational(
const char* exifTagName,
long int& num,
long int& den,
int component=0)
const;
532 bool setExifTagRational(
const char* exifTagName,
long int num,
long int den,
bool setProgramName=
true)
const;
537 QByteArray getExifTagData(
const char* exifTagName)
const;
541 bool setExifTagData(
const char* exifTagName,
const QByteArray& data,
bool setProgramName=
true)
const;
551 QVariant getExifTagVariant(
const char* exifTagName,
bool rationalAsListOfInts=
true,
bool escapeCR=
true,
int component=0)
const;
559 bool setExifTagVariant(
const char* exifTagName,
const QVariant& data,
560 bool rationalWantSmallDenominator=
true,
bool setProgramName=
true)
const;
565 bool removeExifTag(
const char* exifTagName,
bool setProgramName=
true)
const;
569 QString getExifTagTitle(
const char* exifTagName);
573 QString getExifTagDescription(
const char* exifTagName);
580 QString createExifUserStringFromValue(
const char* exifTagName,
const QVariant& val,
bool escapeCR=
true);
600 KExiv2::MetaDataMap getExifTagsDataList(
const QStringList& exifKeysFilter,
bool invertSelection=
false)
const;
614 static bool canWriteIptc(
const QString& filePath);
618 bool hasIptc()
const;
622 bool clearIptc()
const;
628 QByteArray getIptc(
bool addIrbHeader=
false)
const;
633 bool setIptc(
const QByteArray& data)
const;
638 QString getIptcTagString(
const char* iptcTagName,
bool escapeCR=
true)
const;
642 bool setIptcTagString(
const char* iptcTagName,
const QString& value,
bool setProgramName=
true)
const;
651 QStringList getIptcTagsStringList(
const char* iptcTagName,
bool escapeCR=
true)
const;
656 bool setIptcTagsStringList(
const char* iptcTagName,
int maxSize,
657 const QStringList& oldValues,
const QStringList& newValues,
658 bool setProgramName=
true)
const;
663 QByteArray getIptcTagData(
const char* iptcTagName)
const;
667 bool setIptcTagData(
const char* iptcTagName,
const QByteArray& data,
bool setProgramName=
true)
const;
672 bool removeIptcTag(
const char* iptcTagName,
bool setProgramName=
true)
const;
676 QString getIptcTagTitle(
const char* iptcTagName);
680 QString getIptcTagDescription(
const char* iptcTagName);
698 KExiv2::MetaDataMap getIptcTagsDataList(
const QStringList& iptcKeysFilter,
bool invertSelection=
false)
const;
702 QStringList getIptcKeywords()
const;
709 bool setIptcKeywords(
const QStringList& oldKeywords,
const QStringList& newKeywords,
710 bool setProgramName=
true)
const;
714 QStringList getIptcSubjects()
const;
721 bool setIptcSubjects(
const QStringList& oldSubjects,
const QStringList& newSubjects,
722 bool setProgramName=
true)
const;
727 QStringList getIptcSubCategories()
const;
734 bool setIptcSubCategories(
const QStringList& oldSubCategories,
const QStringList& newSubCategories,
735 bool setProgramName=
true)
const;
749 static bool canWriteXmp(
const QString& filePath);
757 bool clearXmp()
const;
762 QByteArray getXmp()
const;
767 bool setXmp(
const QByteArray& data)
const;
772 QString getXmpTagString(
const char* xmpTagName,
bool escapeCR=
true)
const;
776 bool setXmpTagString(
const char* xmpTagName,
const QString& value,
777 bool setProgramName=
true)
const;
783 bool setXmpTagString(
const char* xmpTagName,
const QString& value,
784 XmpTagType type,
bool setProgramName=
true)
const;
788 QString getXmpTagTitle(
const char* xmpTagName);
792 QString getXmpTagDescription(
const char* xmpTagName);
810 KExiv2::MetaDataMap getXmpTagsDataList(
const QStringList& xmpKeysFilter,
bool invertSelection=
false)
const;
817 KExiv2::AltLangMap getXmpTagStringListLangAlt(
const char* xmpTagName,
bool escapeCR=
true)
const;
823 bool setXmpTagStringListLangAlt(
const char* xmpTagName,
const KExiv2::AltLangMap& values,
824 bool setProgramName)
const;
831 QString getXmpTagStringLangAlt(
const char* xmpTagName,
const QString& langAlt,
bool escapeCR)
const;
838 bool setXmpTagStringLangAlt(
const char* xmpTagName,
const QString& value,
839 const QString& langAlt,
bool setProgramName=
true)
const;
844 QStringList getXmpTagStringSeq(
const char* xmpTagName,
bool escapeCR=
true)
const;
849 bool setXmpTagStringSeq(
const char* xmpTagName,
const QStringList& seq,
850 bool setProgramName=
true)
const;
855 QStringList getXmpTagStringBag(
const char* xmpTagName,
bool escapeCR)
const;
860 bool setXmpTagStringBag(
const char* xmpTagName,
const QStringList& bag,
861 bool setProgramName=
true)
const;
868 bool addToXmpTagStringBag(
const char* xmpTagName,
const QStringList& entriesToAdd,
869 bool setProgramName)
const;
875 bool removeFromXmpTagStringBag(
const char* xmpTagName,
const QStringList& entriesToRemove,
876 bool setProgramName)
const;
888 QVariant getXmpTagVariant(
const char* xmpTagName,
bool rationalAsListOfInts=
true,
bool stringEscapeCR=
true)
const;
892 QStringList getXmpKeywords()
const;
899 bool setXmpKeywords(
const QStringList& newKeywords,
bool setProgramName=
true)
const;
904 bool removeXmpKeywords(
const QStringList& keywordsToRemove,
bool setProgramName=
true);
908 QStringList getXmpSubjects()
const;
915 bool setXmpSubjects(
const QStringList& newSubjects,
bool setProgramName=
true)
const;
920 bool removeXmpSubjects(
const QStringList& subjectsToRemove,
bool setProgramName=
true);
925 QStringList getXmpSubCategories()
const;
932 bool setXmpSubCategories(
const QStringList& newSubCategories,
bool setProgramName=
true)
const;
937 bool removeXmpSubCategories(
const QStringList& categoriesToRemove,
bool setProgramName=
true);
942 bool removeXmpTag(
const char* xmpTagName,
bool setProgramName=
true)
const;
951 static bool registerXmpNameSpace(
const QString& uri,
const QString& prefix);
954 static bool unregisterXmpNameSpace(
const QString& uri);
964 bool initializeGPSInfo(
const bool setProgramName);
968 bool getGPSInfo(
double& altitude,
double& latitude,
double& longitude)
const;
973 QString getGPSLatitudeString()
const;
974 QString getGPSLongitudeString()
const;
980 bool getGPSLatitudeNumber(
double*
const latitude)
const;
981 bool getGPSLongitudeNumber(
double*
const longitude)
const;
985 bool getGPSAltitude(
double*
const altitude)
const;
990 bool setGPSInfo(
const double altitude,
const double latitude,
const double longitude,
const bool setProgramName=
true);
995 bool setGPSInfo(
const double*
const altitude,
const double latitude,
const double longitude,
const bool setProgramName=
true);
1000 bool setGPSInfo(
const double altitude,
const QString &latitude,
const QString &longitude,
const bool setProgramName=
true);
1005 bool removeGPSInfo(
const bool setProgramName=
true);
1012 static void convertToRational(
const double number,
long int*
const numerator,
1013 long int*
const denominator,
const int rounding);
1022 static void convertToRationalSmallDenominator(
const double number,
long int*
const numerator,
1023 long int*
const denominator);
1028 static QString convertToGPSCoordinateString(
const long int numeratorDegrees,
const long int denominatorDegrees,
1029 const long int numeratorMinutes,
const long int denominatorMinutes,
1030 const long int numeratorSeconds,
long int denominatorSeconds,
1031 const char directionReference);
1036 static QString convertToGPSCoordinateString(
const bool isLatitude,
double coordinate);
1042 static bool convertFromGPSCoordinateString(
const QString& coordinate,
1043 long int*
const numeratorDegrees,
long int*
const denominatorDegrees,
1044 long int*
const numeratorMinutes,
long int*
const denominatorMinutes,
1045 long int*
const numeratorSeconds,
long int*
const denominatorSeconds,
1046 char*
const directionReference);
1052 static bool convertFromGPSCoordinateString(
const QString& gpsString,
double*
const coordinate);
1057 static bool convertToUserPresentableNumbers(
const QString& coordinate,
1058 int*
const degrees,
int*
const minutes,
1059 double*
const seconds,
char*
const directionReference);
1066 static void convertToUserPresentableNumbers(
const bool isLatitude,
double coordinate,
1067 int*
const degrees,
int*
const minutes,
1068 double*
const seconds,
char*
const directionReference);
1089 virtual bool setProgramId(
bool on=
true)
const;
===========================================================This file is a part of digiKam project htt...
QMap< QString, QString > AltLangMap
A map used to store a list of Alternative Language values.
ImageColorWorkSpace
The image color workspace values given by Exif metadata.
ImageOrientation
The image orientation values given by Exif metadata.
XmpTagType
Xmp tag types, used by setXmpTag, only first three types are used.
QMap< QString, QString > MetaDataMap
A map used to store Tags Key and Tags Value.
QMap< QString, QStringList > TagsMap
A map used to store Tags Key and a list of Tags properties :
===========================================================This file is part of the KDE project ...
MetadataWritingMode
The image metadata writing mode, between image file metadata and XMP sidecar file, depending on the context.