97 ioDevice->open(QIODevice::WriteOnly);
98 Exiv2::IptcData iptcData;
100 if (
d->
kmdToIPTC.contains(entry.qualifiedName())) {
101 if (blockedEntries.contains(entry.qualifiedName())) {
102 warnKrita <<
"skipping" << entry.qualifiedName() << entry.value();
106 QString iptcKeyStr =
d->
kmdToIPTC[entry.qualifiedName()].exivTag;
107 Exiv2::IptcKey iptcKey(qPrintable(iptcKeyStr));
110 Exiv2::IptcDataSets::dataSetType(iptcKey.tag(), iptcKey.record()));
112 if (
v &&
v->typeId() != Exiv2::invalidTypeId) {
113 iptcData.add(iptcKey,
v);
115#if EXIV2_TEST_VERSION(0,28,0)
116 }
catch (Exiv2::Error &e) {
118 }
catch (Exiv2::AnyError &e) {
124#if !EXIV2_TEST_VERSION(0, 18, 0)
125 Exiv2::DataBuf rawData = iptcData.copy();
127 Exiv2::DataBuf rawData = Exiv2::IptcParser::encode(iptcData);
133 header.append(QByteArray(1, 0));
136 header.append(QByteArray(2, 0));
137#if EXIV2_TEST_VERSION(0, 28, 0)
138 qint32 size = rawData.size();
140 qint32 size = rawData.size_;
142 QByteArray sizeArray(4, 0);
143 sizeArray[0] = (char)((size & 0xff000000) >> 24);
144 sizeArray[1] = (char)((size & 0x00ff0000) >> 16);
145 sizeArray[2] = (char)((size & 0x0000ff00) >> 8);
146 sizeArray[3] = (char)(size & 0x000000ff);
147 header.append(sizeArray);
148 ioDevice->write(header);
151#if EXIV2_TEST_VERSION(0, 28, 0)
152 ioDevice->write((
const char *)rawData.data(), rawData.size());
154 ioDevice->write((
const char *)rawData.pData_, rawData.size_);
170 ioDevice->open(QIODevice::ReadOnly);
171 QByteArray arr = ioDevice->readAll();
172 Exiv2::IptcData iptcData;
173#if !EXIV2_TEST_VERSION(0, 18, 0)
174 iptcData.load((
const Exiv2::byte *)arr.data(), arr.size());
176 Exiv2::IptcParser::decode(iptcData, (
const Exiv2::byte *)arr.data(), arr.size());
178 dbgMetaData <<
"There are" << iptcData.count() <<
" entries in the IPTC section";
179 for (Exiv2::IptcMetadata::const_iterator it = iptcData.begin(); it != iptcData.end(); ++it) {
180 dbgMetaData <<
"Reading info for key" << it->key().c_str();
181 if (
d->
iptcToKMD.contains(it->key().c_str())) {
186 if (iptcToKMd.
exivTag ==
"Iptc.Application2.Keywords") {
187 Q_ASSERT(it->getValue()->typeId() == Exiv2::string);
188 QString data = it->getValue()->toString().c_str();
192 Q_FOREACH (
const QString &entry, list) {