96 ioDevice->open(QIODevice::WriteOnly);
97 Exiv2::IptcData iptcData;
99 if (
d->
kmdToIPTC.contains(entry.qualifiedName())) {
100 if (blockedEntries.contains(entry.qualifiedName())) {
101 warnKrita <<
"skipping" << entry.qualifiedName() << entry.value();
105 QString iptcKeyStr =
d->
kmdToIPTC[entry.qualifiedName()].exivTag;
106 Exiv2::IptcKey iptcKey(qPrintable(iptcKeyStr));
109 Exiv2::IptcDataSets::dataSetType(iptcKey.tag(), iptcKey.record()));
111 if (
v &&
v->typeId() != Exiv2::invalidTypeId) {
112 iptcData.add(iptcKey,
v);
114#if EXIV2_TEST_VERSION(0,28,0)
115 }
catch (Exiv2::Error &e) {
117 }
catch (Exiv2::AnyError &e) {
123#if !EXIV2_TEST_VERSION(0, 18, 0)
124 Exiv2::DataBuf rawData = iptcData.copy();
126 Exiv2::DataBuf rawData = Exiv2::IptcParser::encode(iptcData);
132 header.append(QByteArray(1, 0));
135 header.append(QByteArray(2, 0));
136#if EXIV2_TEST_VERSION(0, 28, 0)
137 qint32 size = rawData.size();
139 qint32 size = rawData.size_;
141 QByteArray sizeArray(4, 0);
142 sizeArray[0] = (char)((size & 0xff000000) >> 24);
143 sizeArray[1] = (char)((size & 0x00ff0000) >> 16);
144 sizeArray[2] = (char)((size & 0x0000ff00) >> 8);
145 sizeArray[3] = (char)(size & 0x000000ff);
146 header.append(sizeArray);
147 ioDevice->write(header);
150#if EXIV2_TEST_VERSION(0, 28, 0)
151 ioDevice->write((
const char *)rawData.data(), rawData.size());
153 ioDevice->write((
const char *)rawData.pData_, rawData.size_);
169 ioDevice->open(QIODevice::ReadOnly);
170 QByteArray arr = ioDevice->readAll();
171 Exiv2::IptcData iptcData;
172#if !EXIV2_TEST_VERSION(0, 18, 0)
173 iptcData.load((
const Exiv2::byte *)arr.data(), arr.size());
175 Exiv2::IptcParser::decode(iptcData, (
const Exiv2::byte *)arr.data(), arr.size());
177 dbgMetaData <<
"There are" << iptcData.count() <<
" entries in the IPTC section";
178 for (Exiv2::IptcMetadata::const_iterator it = iptcData.begin(); it != iptcData.end(); ++it) {
179 dbgMetaData <<
"Reading info for key" << it->key().c_str();
180 if (
d->
iptcToKMD.contains(it->key().c_str())) {
185 if (iptcToKMd.
exivTag ==
"Iptc.Application2.Keywords") {
186 Q_ASSERT(it->getValue()->typeId() == Exiv2::string);
187 QString data = it->getValue()->toString().c_str();
191 Q_FOREACH (
const QString &entry, list) {