93{
95
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();
103 continue;
104 }
105 try {
106 QString iptcKeyStr =
d->
kmdToIPTC[entry.qualifiedName()].exivTag;
107 Exiv2::IptcKey iptcKey(qPrintable(iptcKeyStr));
110 Exiv2::IptcDataSets::dataSetType(iptcKey.tag(), iptcKey.record()));
111
112 if (
v &&
v->typeId() != Exiv2::invalidTypeId) {
113 iptcData.add(iptcKey,
v);
114 }
115#if EXIV2_TEST_VERSION(0,28,0)
116 } catch (Exiv2::Error &e) {
117#else
118 } catch (Exiv2::AnyError &e) {
119#endif
121 }
122 }
123 }
124#if !EXIV2_TEST_VERSION(0, 18, 0)
125 Exiv2::DataBuf rawData = iptcData.copy();
126#else
127 Exiv2::DataBuf rawData = Exiv2::IptcParser::encode(iptcData);
128#endif
129
131 QByteArray header;
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();
139#else
140 qint32
size = rawData.size_;
141#endif
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);
149 }
150
151#if EXIV2_TEST_VERSION(0, 28, 0)
152 ioDevice->write((const char *)rawData.data(), rawData.size());
153#else
154 ioDevice->write((const char *)rawData.pData_, rawData.size_);
155#endif
156 ioDevice->close();
157 return true;
158}
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)