92{
94
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();
102 continue;
103 }
104 try {
105 QString iptcKeyStr =
d->
kmdToIPTC[entry.qualifiedName()].exivTag;
106 Exiv2::IptcKey iptcKey(qPrintable(iptcKeyStr));
109 Exiv2::IptcDataSets::dataSetType(iptcKey.tag(), iptcKey.record()));
110
111 if (
v &&
v->typeId() != Exiv2::invalidTypeId) {
112 iptcData.add(iptcKey,
v);
113 }
114#if EXIV2_TEST_VERSION(0,28,0)
115 } catch (Exiv2::Error &e) {
116#else
117 } catch (Exiv2::AnyError &e) {
118#endif
120 }
121 }
122 }
123#if !EXIV2_TEST_VERSION(0, 18, 0)
124 Exiv2::DataBuf rawData = iptcData.copy();
125#else
126 Exiv2::DataBuf rawData = Exiv2::IptcParser::encode(iptcData);
127#endif
128
130 QByteArray header;
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();
138#else
139 qint32
size = rawData.size_;
140#endif
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);
148 }
149
150#if EXIV2_TEST_VERSION(0, 28, 0)
151 ioDevice->write((const char *)rawData.data(), rawData.size());
152#else
153 ioDevice->write((const char *)rawData.pData_, rawData.size_);
154#endif
155 ioDevice->close();
156 return true;
157}
QList< QString > QStringList
Exiv2::Value * kmdValueToExivValue(const KisMetaData::Value &value, Exiv2::TypeId type)
Convert a KisMetaData to an Exiv value.
const char photoshopBimId_[]
const char photoshopMarker[]
const QByteArray photoshopIptc_((char *)&photoshopIptc, 2)
int size(const Forest< T > &forest)