21#include "exiv2extractor.h"
23#include <KExiv2/KExiv2>
33#include "geolocation/cities.h"
34#include "geolocation/city.h"
52Exiv2Extractor::~Exiv2Extractor()
58void Exiv2Extractor::setUrl(
const QUrl &url)
60 qDebug() <<
"Start parsing image file url for metadata";
63 if (!
QFileInfo::exists(m_url.toLocalFile()) || m_url.isEmpty() || !m_url.isValid()) {
64 qDebug() <<
"Image file is not valid or does not exists.";
68 m_error = !m_exiv2->load(m_url.toLocalFile());
70 qWarning() <<
"Failed to load Exiv2 metadata";
73Coordinates Exiv2Extractor::extractGPS()
const
78 if(!m_exiv2->initializeGPSInfo(
true))
80 qWarning() <<
"failed to initialized GPS data";
88 m_exiv2->getGPSLatitudeNumber(&latitude);
89 m_exiv2->getGPSLongitudeNumber(&longitude);
90 m_exiv2->getGPSAltitude(&altitude);
92 return {altitude, latitude, longitude};
96bool Exiv2Extractor::error()
const
101QString Exiv2Extractor::getExifTagString(
const char* exifTagName,
bool escapeCR)
const
106 return m_exiv2->getExifTagString(exifTagName, escapeCR);
109QByteArray Exiv2Extractor::getExifTagData(
const char* exifTagName)
const
114 return m_exiv2->getExifTagData(exifTagName);
117QVariant Exiv2Extractor::getExifTagVariant(
const char* exifTagName,
bool rationalAsListOfInts,
bool stringEscapeCR,
int component)
const
121 return m_exiv2->getExifTagVariant(exifTagName, rationalAsListOfInts, stringEscapeCR, component);
124MetaDataMap Exiv2Extractor::getExifTagsDataList(
const QStringList& exifKeysFilter,
bool invertSelection)
const
128 return m_exiv2->getExifTagsDataList(exifKeysFilter, invertSelection);
131QString Exiv2Extractor::getExifComment()
const
135 return m_exiv2->getExifComment();
138QString Exiv2Extractor::GPSString()
const
145 if(!m_city.isValid())
150 return m_city.name();
153QString Exiv2Extractor::cityId()
const
161City Exiv2Extractor::city()
const
166 auto c = extractGPS();
168 if(c.latitude == 0.0 || c.longitude == 0.0)
173 return Cities::getInstance()->findCity(c.latitude, c.longitude);
176QSize Exiv2Extractor::getPixelSize()
181 return m_exiv2->getPixelSize();
184bool Exiv2Extractor::applyChanges()
188 return m_exiv2->applyChanges();
191bool Exiv2Extractor::setGpsData(
const double latitude,
const double longitude,
const double altitude)
195 qDebug() <<
"Setting gps data as:" << latitude << longitude << altitude;
196 return m_exiv2->setGPSInfo(altitude,latitude, longitude);
201bool Exiv2Extractor::removeGpsData()
205 return m_exiv2->removeGPSInfo();
208bool Exiv2Extractor::clearData()
213 if(m_exiv2->isEmpty())
217 ok = m_exiv2->clearExif ( );
221bool Exiv2Extractor::writeTag(
const char *tagName,
const QVariant &value)
225 return m_exiv2->setExifTagVariant(tagName, value);
228bool Exiv2Extractor::removeTag(
const char *tagName)
232 return m_exiv2->removeExifTag(tagName);
235bool Exiv2Extractor::setComment(
const QString &comment)
239 return m_exiv2->setExifComment(comment);
242QString Exiv2Extractor::getComments()
const
246 return m_exiv2->getCommentsDecoded();
249bool Exiv2Extractor::removeComment()
const
253 auto ok = m_exiv2->removeExifTag(
"Exif.Image.ImageDescription");
254 ok = m_exiv2->removeExifTag(
"Exif.Photo.UserComment");
A class for representing the GPS coordinates and information of a city.
static bool cleanupExiv2()
bool exists() const const