void EXIFAdjust::applyMetadata(QByteArray& exifData) { KPMetadata meta; meta.setExif(exifData); long int num=1, den=1; if (d->brightnessCheck->isChecked()) { meta.convertToRational(d->brightnessEdit->value(), &num, &den, 1); meta.setExifTagRational("Exif.Photo.BrightnessValue", num, den); } else meta.removeExifTag("Exif.Photo.BrightnessValue"); if (d->gainControlCheck->isChecked()) meta.setExifTagLong("Exif.Photo.GainControl", d->gainControlCB->currentIndex()); else if (d->gainControlCheck->isValid()) meta.removeExifTag("Exif.Photo.GainControl"); if (d->contrastCheck->isChecked()) meta.setExifTagLong("Exif.Photo.Contrast", d->contrastCB->currentIndex()); else if (d->contrastCheck->isValid()) meta.removeExifTag("Exif.Photo.Contrast"); if (d->saturationCheck->isChecked()) meta.setExifTagLong("Exif.Photo.Saturation", d->saturationCB->currentIndex()); else if (d->saturationCheck->isValid()) meta.removeExifTag("Exif.Photo.Saturation"); if (d->sharpnessCheck->isChecked()) meta.setExifTagLong("Exif.Photo.Sharpness", d->sharpnessCB->currentIndex()); else if (d->sharpnessCheck->isValid()) meta.removeExifTag("Exif.Photo.Sharpness"); if (d->customRenderedCheck->isChecked()) meta.setExifTagLong("Exif.Photo.CustomRendered", d->customRenderedCB->currentIndex()); else if (d->customRenderedCheck->isValid()) meta.removeExifTag("Exif.Photo.CustomRendered"); #if KEXIV2_VERSION >= 0x010000 exifData = meta.getExifEncoded(); #else exifData = meta.getExif(); #endif }
void XMPContent::applyMetadata(QByteArray& exifData, QByteArray& xmpData) { KPMetadata meta; meta.setExif(exifData); meta.setXmp(xmpData); if (d->headlineCheck->isChecked()) meta.setXmpTagString("Xmp.photoshop.Headline", d->headlineEdit->text()); else meta.removeXmpTag("Xmp.photoshop.Headline"); KPMetadata::AltLangMap oldAltLangMap, newAltLangMap; if (d->captionEdit->getValues(oldAltLangMap, newAltLangMap)) { meta.setXmpTagStringListLangAlt("Xmp.dc.description", newAltLangMap, false); if (syncEXIFCommentIsChecked()) meta.setExifComment(getXMPCaption()); if (syncJFIFCommentIsChecked()) meta.setComments(getXMPCaption().toUtf8()); } else if (d->captionEdit->isValid()) meta.removeXmpTag("Xmp.dc.description"); if (d->writerCheck->isChecked()) meta.setXmpTagString("Xmp.photoshop.CaptionWriter", d->writerEdit->text()); else meta.removeXmpTag("Xmp.photoshop.CaptionWriter"); if (d->copyrightEdit->getValues(oldAltLangMap, newAltLangMap)) meta.setXmpTagStringListLangAlt("Xmp.dc.rights", newAltLangMap, false); else if (d->copyrightEdit->isValid()) meta.removeXmpTag("Xmp.dc.rights"); #if KEXIV2_VERSION >= 0x010000 exifData = meta.getExifEncoded(); #else exifData = meta.getExif(); #endif xmpData = meta.getXmp(); }
void XMPEditWidget::slotItemChanged() { KPMetadata meta; meta.load((*d->dlg->currentItem()).path()); #if KEXIV2_VERSION >= 0x010000 d->exifData = meta.getExifEncoded(); #else d->exifData = meta.getExif(); #endif d->iptcData = meta.getIptc(); d->xmpData = meta.getXmp(); d->contentPage->readMetadata(d->xmpData); d->originPage->readMetadata(d->xmpData); d->subjectsPage->readMetadata(d->xmpData); d->keywordsPage->readMetadata(d->xmpData); d->categoriesPage->readMetadata(d->xmpData); d->creditsPage->readMetadata(d->xmpData); d->statusPage->readMetadata(d->xmpData); d->propertiesPage->readMetadata(d->xmpData); d->isReadOnly = !KPMetadata::canWriteXmp((*d->dlg->currentItem()).path()); emit signalSetReadOnly(d->isReadOnly); d->page_content->setEnabled(!d->isReadOnly); d->page_origin->setEnabled(!d->isReadOnly); d->page_subjects->setEnabled(!d->isReadOnly); d->page_keywords->setEnabled(!d->isReadOnly); d->page_categories->setEnabled(!d->isReadOnly); d->page_credits->setEnabled(!d->isReadOnly); d->page_status->setEnabled(!d->isReadOnly); d->page_properties->setEnabled(!d->isReadOnly); }
void XMPOrigin::applyMetadata(QByteArray& exifData, QByteArray& xmpData) { KPMetadata meta; meta.setExif(exifData); meta.setXmp(xmpData); if (d->dateCreatedCheck->isChecked()) { meta.setXmpTagString("Xmp.photoshop.DateCreated", getXMPCreationDate().toString("yyyy:MM:dd hh:mm:ss")); meta.setXmpTagString("Xmp.xmp.CreateDate", getXMPCreationDate().toString("yyyy:MM:dd hh:mm:ss")); meta.setXmpTagString("Xmp.exif.DateTimeCreated", getXMPCreationDate().toString("yyyy:MM:dd hh:mm:ss")); meta.setXmpTagString("Xmp.exif.DateTimeOriginal", getXMPCreationDate().toString("yyyy:MM:dd hh:mm:ss")); meta.setXmpTagString("Xmp.tiff.DateTime", getXMPCreationDate().toString("yyyy:MM:dd hh:mm:ss")); meta.setXmpTagString("Xmp.xmp.ModifyDate", getXMPCreationDate().toString("yyyy:MM:dd hh:mm:ss")); meta.setXmpTagString("Xmp.xmp.MetadataDate", getXMPCreationDate().toString("yyyy:MM:dd hh:mm:ss")); if (syncEXIFDateIsChecked()) { meta.setExifTagString("Exif.Image.DateTime", getXMPCreationDate().toString(QString("yyyy:MM:dd hh:mm:ss")).toAscii()); } } else { meta.removeXmpTag("Xmp.photoshop.DateCreated"); meta.removeXmpTag("Xmp.xmp.CreateDate"); meta.removeXmpTag("Xmp.exif.DateTimeCreated"); meta.removeXmpTag("Xmp.exif.DateTimeOriginal"); meta.removeXmpTag("Xmp.tiff.DateTime"); meta.removeXmpTag("Xmp.xmp.ModifyDate"); meta.removeXmpTag("Xmp.xmp.MetadataDate"); } if (d->dateDigitalizedCheck->isChecked()) meta.setXmpTagString("Xmp.exif.DateTimeDigitized", d->dateDigitalizedSel->dateTime().toString("yyyy:MM:dd hh:mm:ss")); else meta.removeXmpTag("Xmp.exif.DateTimeDigitized"); if (d->cityCheck->isChecked()) meta.setXmpTagString("Xmp.photoshop.City", d->cityEdit->text()); else meta.removeXmpTag("Xmp.photoshop.City"); if (d->sublocationCheck->isChecked()) meta.setXmpTagString("Xmp.iptc.Location", d->sublocationEdit->text()); else meta.removeXmpTag("Xmp.iptc.Location"); if (d->provinceCheck->isChecked()) meta.setXmpTagString("Xmp.photoshop.State", d->provinceEdit->text()); else meta.removeXmpTag("Xmp.photoshop.State"); if (d->countryCheck->isChecked()) { QString countryName = d->countryCB->currentText().mid(6); QString countryCode = d->countryCB->currentText().left(3); meta.setXmpTagString("Xmp.iptc.CountryCode", countryCode); meta.setXmpTagString("Xmp.photoshop.Country", countryName); } else if (d->countryCheck->isValid()) { meta.removeXmpTag("Xmp.iptc.CountryCode"); meta.removeXmpTag("Xmp.photoshop.Country"); } #if KEXIV2_VERSION >= 0x010000 exifData = meta.getExifEncoded(); #else exifData = meta.getExif(); #endif xmpData = meta.getXmp(); }
void EXIFDevice::applyMetadata(QByteArray& exifData) { KPMetadata meta; meta.setExif(exifData); long int num=1, den=1; if (d->makeCheck->isChecked()) meta.setExifTagString("Exif.Image.Make", d->makeEdit->text()); else meta.removeExifTag("Exif.Image.Make"); if (d->modelCheck->isChecked()) meta.setExifTagString("Exif.Image.Model", d->modelEdit->text()); else meta.removeExifTag("Exif.Image.Model"); if (d->deviceTypeCheck->isChecked()) meta.setExifTagLong("Exif.Photo.FileSource", d->deviceTypeCB->currentIndex()+1); else if (d->deviceTypeCheck->isValid()) meta.removeExifTag("Exif.Photo.FileSource"); if (d->exposureTimeCheck->isChecked()) { meta.setExifTagRational("Exif.Photo.ExposureTime", d->exposureTimeNumEdit->value(), d->exposureTimeDenEdit->value()); double exposureTime = (double)(d->exposureTimeNumEdit->value())/ (double)(d->exposureTimeDenEdit->value()); double shutterSpeed = (-1.0)*(std::log(exposureTime)/std::log(2.0)); meta.convertToRational(shutterSpeed, &num, &den, 8); meta.setExifTagRational("Exif.Photo.ShutterSpeedValue", num, den); } else { meta.removeExifTag("Exif.Photo.ExposureTime"); meta.removeExifTag("Exif.Photo.ShutterSpeedValue"); } if (d->exposureProgramCheck->isChecked()) meta.setExifTagLong("Exif.Photo.ExposureProgram", d->exposureProgramCB->currentIndex()); else if (d->exposureProgramCheck->isValid()) meta.removeExifTag("Exif.Photo.ExposureProgram"); if (d->exposureModeCheck->isChecked()) meta.setExifTagLong("Exif.Photo.ExposureMode", d->exposureModeCB->currentIndex()); else if (d->exposureModeCheck->isValid()) meta.removeExifTag("Exif.Photo.ExposureMode"); if (d->exposureBiasCheck->isChecked()) { meta.convertToRational(d->exposureBiasEdit->value(), &num, &den, 1); meta.setExifTagRational("Exif.Photo.ExposureBiasValue", num, den); } else { meta.removeExifTag("Exif.Photo.ExposureBiasValue"); } if (d->meteringModeCheck->isChecked()) { long met = d->meteringModeCB->currentIndex(); meta.setExifTagLong("Exif.Photo.MeteringMode", met > 6 ? 255 : met); } else if (d->meteringModeCheck->isValid()) meta.removeExifTag("Exif.Photo.MeteringMode"); if (d->ISOSpeedCheck->isChecked()) { meta.setExifTagLong("Exif.Photo.ISOSpeedRatings", d->ISOSpeedCB->currentText().toLong()); meta.convertToRational(d->ISOSpeedCB->currentText().toDouble(), &num, &den, 1); meta.setExifTagRational("Exif.Photo.ExposureIndex", num, den); } else if (d->ISOSpeedCheck->isValid()) { meta.removeExifTag("Exif.Photo.ISOSpeedRatings"); meta.removeExifTag("Exif.Photo.ExposureIndex"); } if (d->sensingMethodCheck->isChecked()) { long sem = d->sensingMethodCB->currentIndex(); meta.setExifTagLong("Exif.Photo.SensingMethod", sem > 4 ? sem+2 : sem+1); } else if (d->sensingMethodCheck->isValid()) { meta.removeExifTag("Exif.Photo.SensingMethod"); } if (d->sceneTypeCheck->isChecked()) meta.setExifTagLong("Exif.Photo.SceneCaptureType", d->sceneTypeCB->currentIndex()); else if (d->sceneTypeCheck->isValid()) meta.removeExifTag("Exif.Photo.SceneCaptureType"); if (d->subjectDistanceTypeCheck->isChecked()) meta.setExifTagLong("Exif.Photo.SubjectDistanceRange", d->subjectDistanceTypeCB->currentIndex()); else if (d->subjectDistanceTypeCheck->isValid()) meta.removeExifTag("Exif.Photo.SubjectDistanceRange"); #if KEXIV2_VERSION >= 0x010000 exifData = meta.getExifEncoded(); #else exifData = meta.getExif(); #endif }
bool Utils::updateMetadataImageMagick(const QString& src, QString& err) { QFileInfo finfo(src); if (src.isEmpty() || !finfo.isReadable()) { err = i18n("unable to open source file"); return false; } QImage img(src); QImage iptcPreview = img.scaled(1280, 1024, Qt::KeepAspectRatio, Qt::SmoothTransformation); QImage exifThumbnail = iptcPreview.scaled(160, 120, Qt::KeepAspectRatio, Qt::SmoothTransformation); KPMetadata meta; meta.load(src); meta.setImageOrientation(KPMetadata::ORIENTATION_NORMAL); meta.setImageProgramId(QString("Kipi-plugins"), QString(kipiplugins_version)); meta.setImageDimensions(img.size()); meta.setExifThumbnail(exifThumbnail); meta.setImagePreview(iptcPreview); #if KEXIV2_VERSION >= 0x010000 QByteArray exifData = meta.getExifEncoded(true); #else QByteArray exifData = meta.getExif(true); #endif QByteArray iptcData = meta.getIptc(true); QByteArray xmpData = meta.getXmp(); KTemporaryFile exifTemp; exifTemp.setSuffix(QString("kipipluginsexif.app1")); exifTemp.setAutoRemove(true); if ( !exifTemp.open() ) { err = i18n("unable to open temp file"); return false; } QString exifFile = exifTemp.fileName(); QDataStream streamExif( &exifTemp ); streamExif.writeRawData(exifData.data(), exifData.size()); exifTemp.close(); KTemporaryFile iptcTemp; iptcTemp.setSuffix(QString("kipipluginsiptc.8bim")); iptcTemp.setAutoRemove(true); iptcTemp.open(); if ( !iptcTemp.open() ) { err = i18n("Cannot rotate: unable to open temp file"); return false; } QString iptcFile = iptcTemp.fileName(); QDataStream streamIptc( &iptcTemp ); streamIptc.writeRawData(iptcData.data(), iptcData.size()); iptcTemp.close(); KTemporaryFile xmpTemp; xmpTemp.setSuffix(QString("kipipluginsxmp.xmp")); xmpTemp.setAutoRemove(true); if ( !xmpTemp.open() ) { err = i18n("unable to open temp file"); return false; } QString xmpFile = xmpTemp.fileName(); QDataStream streamXmp( &xmpTemp ); streamXmp.writeRawData(xmpData.data(), xmpData.size()); xmpTemp.close(); KProcess process; process.clearProgram(); process << "mogrify"; process << "-profile"; process << exifFile; process << "-profile"; process << iptcFile; process << "-profile"; process << xmpFile; process << src + QString("[0]"); kDebug() << "ImageMagick Command line: " << process.program(); process.start(); if (!process.waitForFinished()) return false; if (process.exitStatus() != QProcess::NormalExit) return false; switch (process.exitCode()) { case 0: // Process finished successfully ! { return true; break; } case 15: // process aborted ! { return false; break; } } // Processing error ! m_stdErr = process.readAllStandardError(); err = i18n("Cannot update metadata: %1", m_stdErr.replace('\n', ' ')); return false; }