本文整理汇总了C++中exiv2::iptcdata::iterator类的典型用法代码示例。如果您正苦于以下问题:C++ iterator类的具体用法?C++ iterator怎么用?C++ iterator使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了iterator类的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: g_bytes_new_take
GBytes* gexiv2_metadata_get_iptc_tag_raw (GExiv2Metadata *self, const gchar* tag) {
g_return_val_if_fail(GEXIV2_IS_METADATA (self), NULL);
g_return_val_if_fail(tag != NULL, NULL);
g_return_val_if_fail(self->priv->image.get() != NULL, NULL);
Exiv2::IptcData& iptc_data = self->priv->image->iptcData();
try {
Exiv2::IptcData::iterator it = iptc_data.findKey(Exiv2::IptcKey(tag));
while (it != iptc_data.end() && it->count() == 0)
it++;
if (it != iptc_data.end()) {
long size = it->size();
if( size > 0 ) {
gpointer data = g_malloc(size);
it->copy((Exiv2::byte*)data, Exiv2::invalidByteOrder);
return g_bytes_new_take(data, size);
}
}
} catch (Exiv2::Error& e) {
LOG_ERROR(e);
}
return NULL;
}
开发者ID:GNOME,项目名称:gexiv2,代码行数:26,代码来源:gexiv2-metadata-iptc.cpp
示例2: iptcData
QStringList KExiv2::getIptcSubCategories() const
{
try
{
if (!d->iptcMetadata().empty())
{
QStringList subCategories;
Exiv2::IptcData iptcData(d->iptcMetadata());
for (Exiv2::IptcData::iterator it = iptcData.begin(); it != iptcData.end(); ++it)
{
QString key = QString::fromLocal8Bit(it->key().c_str());
if (key == QString("Iptc.Application2.SuppCategory"))
{
QString val(it->toString().c_str());
subCategories.append(val);
}
}
return subCategories;
}
}
catch( Exiv2::Error& e )
{
d->printExiv2ExceptionError("Cannot get Iptc Sub Categories from image using Exiv2 ", e);
}
return QStringList();
}
开发者ID:UIKit0,项目名称:digikam,代码行数:30,代码来源:kexiv2iptc.cpp
示例3: while
bool KExiv2::removeIptcTag(const char* iptcTagName, bool setProgramName) const
{
if (!setProgramId(setProgramName))
return false;
try
{
Exiv2::IptcData::iterator it = d->iptcMetadata().begin();
int i = 0;
while(it != d->iptcMetadata().end())
{
QString key = QString::fromLocal8Bit(it->key().c_str());
if (key == QString(iptcTagName))
{
it = d->iptcMetadata().erase(it);
++i;
}
else
{
++it;
}
};
if (i > 0)
return true;
}
catch( Exiv2::Error& e )
{
d->printExiv2ExceptionError("Cannot remove Iptc tag using Exiv2 ", e);
}
return false;
}
开发者ID:UIKit0,项目名称:digikam,代码行数:34,代码来源:kexiv2iptc.cpp
示例4: main
// *****************************************************************************
// Main
int main(int argc, char* const argv[])
try {
if (argc != 2) {
std::cout << "Usage: " << argv[0] << " file\n";
return 1;
}
Exiv2::IptcData iptcData;
int rc = iptcData.read(argv[1]);
if (rc) {
std::string error = Exiv2::IptcData::strError(rc, argv[1]);
throw Exiv2::Error(error);
}
Exiv2::IptcData::iterator end = iptcData.end();
for (Exiv2::IptcData::iterator i = iptcData.begin(); i != end; ++i) {
std::cout << std::setw(40) << std::setfill(' ') << std::left
<< i->key() << " "
<< "0x" << std::setw(4) << std::setfill('0') << std::right
<< std::hex << i->tag() << " "
<< std::dec << i->value()
<< "\n";
}
return rc;
}
catch (Exiv2::Error& e) {
std::cout << "Caught Exiv2 exception '" << e << "'\n";
return -1;
}
开发者ID:,项目名称:,代码行数:33,代码来源:
示例5: gexiv2_metadata_has_iptc_tag
gboolean gexiv2_metadata_has_iptc_tag(GExiv2Metadata *self, const gchar* tag) {
g_return_val_if_fail(GEXIV2_IS_METADATA(self), FALSE);
g_return_val_if_fail(tag != NULL, FALSE);
g_return_val_if_fail(self->priv->image.get() != NULL, FALSE);
Exiv2::IptcData &iptc_data = self->priv->image->iptcData();
for (Exiv2::IptcData::iterator it = iptc_data.begin(); it != iptc_data.end(); ++it) {
if (it->count() > 0 && g_ascii_strcasecmp(tag, it->key().c_str()) == 0)
return TRUE;
}
return FALSE;
}
开发者ID:GNOME,项目名称:gexiv2,代码行数:14,代码来源:gexiv2-metadata-iptc.cpp
示例6: updateExifInfo
void ThumbView::updateExifInfo(QString imageFullPath)
{
Exiv2::Image::AutoPtr exifImage;
QString key;
QString val;
try {
exifImage = Exiv2::ImageFactory::open(imageFullPath.toStdString());
exifImage->readMetadata();
}
catch (Exiv2::Error &error) {
return;
}
Exiv2::ExifData &exifData = exifImage->exifData();
if (!exifData.empty()) {
Exiv2::ExifData::const_iterator end = exifData.end();
infoView->addTitleEntry("Exif");
for (Exiv2::ExifData::const_iterator md = exifData.begin(); md != end; ++md) {
key = QString::fromUtf8(md->tagName().c_str());
val = QString::fromUtf8(md->print().c_str());
infoView->addEntry(key, val);
}
}
Exiv2::IptcData &iptcData = exifImage->iptcData();
if (!iptcData.empty()) {
Exiv2::IptcData::iterator end = iptcData.end();
infoView->addTitleEntry("IPTC");
for (Exiv2::IptcData::iterator md = iptcData.begin(); md != end; ++md) {
key = QString::fromUtf8(md->tagName().c_str());
val = QString::fromUtf8(md->print().c_str());
infoView->addEntry(key, val);
}
}
Exiv2::XmpData &xmpData = exifImage->xmpData();
if (!xmpData.empty()) {
Exiv2::XmpData::iterator end = xmpData.end();
infoView->addTitleEntry("XMP");
for (Exiv2::XmpData::iterator md = xmpData.begin(); md != end; ++md) {
key = QString::fromUtf8(md->tagName().c_str());
val = QString::fromUtf8(md->print().c_str());
infoView->addEntry(key, val);
}
}
}
开发者ID:JHooverman,项目名称:phototonic,代码行数:47,代码来源:thumbview.cpp
示例7: writeTagsToImage
bool ImageTags::writeTagsToImage(QString &imageFileName, QSet<QString> &newTags)
{
QSet<QString> imageTags;
Exiv2::Image::AutoPtr exifImage;
try {
exifImage = Exiv2::ImageFactory::open(imageFileName.toStdString());
exifImage->readMetadata();
Exiv2::IptcData newIptcData;
/* copy existing data */
Exiv2::IptcData &iptcData = exifImage->iptcData();
if (!iptcData.empty()) {
QString key;
Exiv2::IptcData::iterator end = iptcData.end();
for (Exiv2::IptcData::iterator iptcIt = iptcData.begin(); iptcIt != end; ++iptcIt) {
if (iptcIt->tagName() != "Keywords") {
newIptcData.add(*iptcIt);
}
}
}
/* add new tags */
QSetIterator<QString> newTagsIt(newTags);
while (newTagsIt.hasNext()) {
QString tag = newTagsIt.next();
Exiv2::Value::AutoPtr value = Exiv2::Value::create(Exiv2::string);
value->read(tag.toStdString());
Exiv2::IptcKey key("Iptc.Application2.Keywords");
newIptcData.add(key, value.get());
}
exifImage->setIptcData(newIptcData);
exifImage->writeMetadata();
}
catch (Exiv2::Error &error) {
QMessageBox msgBox;
msgBox.critical(this, tr("Error"), tr("Failed to save tags to ") + imageFileName);
return false;
}
return true;
}
开发者ID:JHooverman,项目名称:phototonic,代码行数:44,代码来源:tags.cpp
示例8: getIptcKeywords
bool getIptcKeywords(Exiv2::IptcData &iptcData, bool isIptcUtf8, QStringList &keywords) {
bool anyAdded = false;
try {
QString keywordsTagName = QString::fromLatin1(IPTC_KEYWORDS);
for (Exiv2::IptcData::iterator it = iptcData.begin(); it != iptcData.end(); ++it) {
QString key = QString::fromLocal8Bit(it->key().c_str());
if (key == keywordsTagName) {
QString tag;
if (isIptcUtf8) {
tag = QString::fromUtf8(it->toString().c_str());
} else {
tag = QString::fromLocal8Bit(it->toString().c_str());
}
keywords.append(tag);
anyAdded = true;
}
}
if (keywords.length() == 1 && keywords[0].contains(',')) {
LOG_DEBUG << "processing legacy saved keywords";
QString composite = keywords[0];
keywords.clear();
keywords += decomposeKeyword(composite);
}
}
catch (Exiv2::Error &e) {
LOG_WARNING << "Exiv2 error:" << e.what();
anyAdded = false;
}
catch (...) {
LOG_WARNING << "Exception";
anyAdded = false;
#ifdef QT_DEBUG
throw;
#endif
}
return anyAdded;
}
开发者ID:RostaTasha,项目名称:xpiks,代码行数:43,代码来源:exiv2readingworker.cpp
示例9: g_strdup
gchar* gexiv2_metadata_get_iptc_tag_string (GExiv2Metadata *self, const gchar* tag) {
g_return_val_if_fail(GEXIV2_IS_METADATA (self), NULL);
g_return_val_if_fail(tag != NULL, NULL);
g_return_val_if_fail(self->priv->image.get() != NULL, NULL);
Exiv2::IptcData& iptc_data = self->priv->image->iptcData();
try {
Exiv2::IptcData::iterator it = iptc_data.findKey(Exiv2::IptcKey(tag));
while (it != iptc_data.end() && it->count() == 0)
it++;
if (it != iptc_data.end())
return g_strdup (it->toString ().c_str ());
} catch (Exiv2::Error& e) {
LOG_ERROR(e);
}
return NULL;
}
开发者ID:GNOME,项目名称:gexiv2,代码行数:20,代码来源:gexiv2-metadata-iptc.cpp
示例10: gexiv2_metadata_clear_iptc_tag
gboolean gexiv2_metadata_clear_iptc_tag(GExiv2Metadata *self, const gchar* tag) {
g_return_val_if_fail(GEXIV2_IS_METADATA(self), FALSE);
g_return_val_if_fail(tag != NULL, FALSE);
g_return_val_if_fail(self->priv->image.get() != NULL, FALSE);
Exiv2::IptcData &iptc_data = self->priv->image->iptcData();
gboolean erased = FALSE;
Exiv2::IptcData::iterator it = iptc_data.begin();
while (it != iptc_data.end()) {
if (it->count() > 0 && g_ascii_strcasecmp(tag, it->key().c_str()) == 0) {
it = iptc_data.erase(it);
erased = TRUE;
} else {
it++;
}
}
return erased;
}
开发者ID:GNOME,项目名称:gexiv2,代码行数:21,代码来源:gexiv2-metadata-iptc.cpp
示例11: exifData
QDateTime KExiv2::getDigitizationDateTime(bool fallbackToCreationTime) const
{
try
{
// In first, trying to get Date & time from Exif tags.
if (!d->exifMetadata().empty())
{
// Try Exif date time digitized.
Exiv2::ExifData exifData(d->exifMetadata());
Exiv2::ExifKey key("Exif.Photo.DateTimeDigitized");
Exiv2::ExifData::iterator it = exifData.findKey(key);
if (it != exifData.end())
{
QDateTime dateTime = QDateTime::fromString(it->toString().c_str(), Qt::ISODate);
if (dateTime.isValid())
{
kDebug() << "DateTime (Exif digitalized): " << dateTime.toString().toAscii().constData();
return dateTime;
}
}
}
// In second, trying to get Date & time from Iptc tags.
if (!d->iptcMetadata().empty())
{
// Try digitization Iptc date time entries.
Exiv2::IptcData iptcData(d->iptcMetadata());
Exiv2::IptcKey keyDigitizationDate("Iptc.Application2.DigitizationDate");
Exiv2::IptcData::iterator it = iptcData.findKey(keyDigitizationDate);
if (it != iptcData.end())
{
QString IptcDateDigitization(it->toString().c_str());
Exiv2::IptcKey keyDigitizationTime("Iptc.Application2.DigitizationTime");
Exiv2::IptcData::iterator it2 = iptcData.findKey(keyDigitizationTime);
if (it2 != iptcData.end())
{
QString IptcTimeDigitization(it2->toString().c_str());
QDate date = QDate::fromString(IptcDateDigitization, Qt::ISODate);
QTime time = QTime::fromString(IptcTimeDigitization, Qt::ISODate);
QDateTime dateTime = QDateTime(date, time);
if (dateTime.isValid())
{
kDebug() << "Date (IPTC digitalized): " << dateTime.toString().toAscii().constData();
return dateTime;
}
}
}
}
}
catch( Exiv2::Error& e )
{
d->printExiv2ExceptionError("Cannot parse Exif digitization date & time tag using Exiv2 ", e);
}
catch(...)
{
kError() << "Default exception from Exiv2";
}
if (fallbackToCreationTime)
return getImageDateTime();
else
return QDateTime();
}
开发者ID:fluxer,项目名称:kdelibs,代码行数:74,代码来源:kexiv2image.cpp
示例12: getDigitizationDateTime
QDateTime MetaEngine::getDigitizationDateTime(bool fallbackToCreationTime) const
{
try
{
// In first, trying to get Date & time from Exif tags.
if (!d->exifMetadata().empty())
{
// Try Exif date time digitized.
Exiv2::ExifData exifData(d->exifMetadata());
Exiv2::ExifKey key("Exif.Photo.DateTimeDigitized");
Exiv2::ExifData::iterator it = exifData.findKey(key);
if (it != exifData.end())
{
QDateTime dateTime = QDateTime::fromString(QString::fromLatin1(it->toString().c_str()), Qt::ISODate);
if (dateTime.isValid())
{
qCDebug(DIGIKAM_METAENGINE_LOG) << "DateTime (Exif digitalized): " << dateTime.toString().toLatin1().constData();
return dateTime;
}
}
}
// In second, we trying XMP
#ifdef _XMP_SUPPORT_
if (!d->xmpMetadata().empty())
{
Exiv2::XmpData xmpData(d->xmpMetadata());
{
Exiv2::XmpKey key("Xmp.exif.DateTimeDigitized");
Exiv2::XmpData::iterator it = xmpData.findKey(key);
if (it != xmpData.end())
{
QDateTime dateTime = QDateTime::fromString(QString::fromLatin1(it->toString().c_str()), Qt::ISODate);
if (dateTime.isValid())
{
qCDebug(DIGIKAM_METAENGINE_LOG) << "DateTime (XMP-Exif digitalized): " << dateTime.toString().toLatin1().constData();
return dateTime;
}
}
}
{
Exiv2::XmpKey key("Xmp.video.DateTimeDigitized");
Exiv2::XmpData::iterator it = xmpData.findKey(key);
if (it != xmpData.end())
{
QDateTime dateTime = QDateTime::fromString(QString::fromLatin1(it->toString().c_str()), Qt::ISODate);
if (dateTime.isValid())
{
qCDebug(DIGIKAM_METAENGINE_LOG) << "DateTime (XMP-Video digitalized): " << dateTime.toString().toLatin1().constData();
return dateTime;
}
}
}
}
#endif // _XMP_SUPPORT_
// In third, trying to get Date & time from Iptc tags.
if (!d->iptcMetadata().empty())
{
// Try digitization Iptc date time entries.
Exiv2::IptcData iptcData(d->iptcMetadata());
Exiv2::IptcKey keyDigitizationDate("Iptc.Application2.DigitizationDate");
Exiv2::IptcData::iterator it = iptcData.findKey(keyDigitizationDate);
if (it != iptcData.end())
{
QString IptcDateDigitization(QString::fromLatin1(it->toString().c_str()));
Exiv2::IptcKey keyDigitizationTime("Iptc.Application2.DigitizationTime");
Exiv2::IptcData::iterator it2 = iptcData.findKey(keyDigitizationTime);
if (it2 != iptcData.end())
{
QString IptcTimeDigitization(QString::fromLatin1(it2->toString().c_str()));
QDate date = QDate::fromString(IptcDateDigitization, Qt::ISODate);
QTime time = QTime::fromString(IptcTimeDigitization, Qt::ISODate);
QDateTime dateTime = QDateTime(date, time);
if (dateTime.isValid())
{
qCDebug(DIGIKAM_METAENGINE_LOG) << "Date (IPTC digitalized): " << dateTime.toString().toLatin1().constData();
return dateTime;
}
}
}
}
//.........这里部分代码省略.........
开发者ID:KDE,项目名称:digikam,代码行数:101,代码来源:metaengine_image.cpp
示例13: ModifyMeta
// Overwrites existing value if found, otherwise creates a new one.
// Passing invalidTypeId causes the type to be guessed.
// Guessing types is accurate for IPTC, but not for EXIF.
// Returns 0 on success
EXIVSIMPLE_API int ModifyMeta(HIMAGE img, const char *key, const char *val, DllTypeId type)
{
assert(img && key && val);
if (img==0 || key==0 || val==0) return -1;
ImageWrapper *imgWrap = (ImageWrapper*)img;
int rc = 2;
Exiv2::IptcData &iptcData = imgWrap->image->iptcData();
Exiv2::ExifData &exifData = imgWrap->image->exifData();
std::string data(val);
// if data starts and ends with quotes, remove them
if (data.at(0) == '\"' && data.at(data.size()-1) == '\"') {
data = data.substr(1, data.size()-2);
}
try {
Exiv2::IptcKey iptcKey(key);
rc = 1;
if (type == invalidTypeId)
type = (DllTypeId)Exiv2::IptcDataSets::dataSetType(iptcKey.tag(), iptcKey.record());
Exiv2::Value::AutoPtr value = Exiv2::Value::create((Exiv2::TypeId)type);
value->read(data);
Exiv2::IptcData::iterator iter = iptcData.findKey(iptcKey);
if (iter != iptcData.end()) {
iter->setValue(value.get());
rc = 0;
}
else {
rc = iptcData.add(iptcKey, value.get());
}
}
catch(const Exiv2::AnyError&) {
}
if (rc) {
// Failed with iptc, so try exif
try {
Exiv2::ExifKey exifKey(key);
rc = 1;
// No way to get value type for exif... string is the most common
if (type == invalidTypeId)
type = asciiString;
Exiv2::Value::AutoPtr value = Exiv2::Value::create((Exiv2::TypeId)type);
value->read(data);
Exiv2::ExifData::iterator iter = exifData.findKey(exifKey);
if (iter != exifData.end()) {
iter->setValue(value.get());
rc = 0;
}
else {
exifData.add(exifKey, value.get());
rc = 0;
}
}
catch(const Exiv2::AnyError&) {
}
}
return rc;
}
开发者ID:,项目名称:,代码行数:69,代码来源:
示例14: MetaDataMap
KExiv2::MetaDataMap KExiv2::getIptcTagsDataList(const QStringList& iptcKeysFilter, bool invertSelection) const
{
if (d->iptcMetadata().empty())
return MetaDataMap();
try
{
Exiv2::IptcData iptcData = d->iptcMetadata();
iptcData.sortByKey();
QString ifDItemName;
MetaDataMap metaDataMap;
for (Exiv2::IptcData::iterator md = iptcData.begin(); md != iptcData.end(); ++md)
{
QString key = QString::fromLocal8Bit(md->key().c_str());
// Decode the tag value with a user friendly output.
std::ostringstream os;
os << *md;
QString value = QString(os.str().c_str());
// To make a string just on one line.
value.replace('\n', ' ');
// Some Iptc key are redondancy. check if already one exist...
MetaDataMap::iterator it = metaDataMap.find(key);
// We apply a filter to get only the Iptc tags that we need.
if (!invertSelection)
{
if (iptcKeysFilter.contains(key.section('.', 1, 1)))
{
if (it == metaDataMap.end())
metaDataMap.insert(key, value);
else
{
QString v = *it;
v.append(", ");
v.append(value);
metaDataMap.insert(key, v);
}
}
}
else
{
if (!iptcKeysFilter.contains(key.section('.', 1, 1)))
{
if (it == metaDataMap.end())
metaDataMap.insert(key, value);
else
{
QString v = *it;
v.append(", ");
v.append(value);
metaDataMap.insert(key, v);
}
}
}
}
return metaDataMap;
}
catch (Exiv2::Error& e)
{
d->printExiv2ExceptionError("Cannot parse Iptc metadata using Exiv2 ", e);
}
return MetaDataMap();
}
开发者ID:UIKit0,项目名称:digikam,代码行数:70,代码来源:kexiv2iptc.cpp
注:本文中的exiv2::iptcdata::iterator类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论