diff --git a/plugins/impex/qimageio/CMakeLists.txt b/plugins/impex/qimageio/CMakeLists.txt index 07221802c9..b23f4a2952 100644 --- a/plugins/impex/qimageio/CMakeLists.txt +++ b/plugins/impex/qimageio/CMakeLists.txt @@ -1,27 +1,27 @@ add_subdirectory(tests) set(kritaqimageioexport_SOURCES kis_qimageio_export.cpp ) ki18n_wrap_ui(kritaqimageioexport_SOURCES ) add_library(kritaqimageioexport MODULE ${kritaqimageioexport_SOURCES}) target_link_libraries(kritaqimageioexport kritaui kritaimpex) install(TARGETS kritaqimageioexport DESTINATION ${KRITA_PLUGIN_INSTALL_DIR}) set(kritaqimageioimport_SOURCES kis_qimageio_import.cpp ) -ki18n_wrap_ui(kritaqimageioimport_SOURCES ) +ki18n_wrap_ui(kritaqimageioimport_SOURCES kis_wdg_options_qimageio.ui) add_library(kritaqimageioimport MODULE ${kritaqimageioimport_SOURCES}) target_link_libraries(kritaqimageioimport kritaui) install(TARGETS kritaqimageioimport DESTINATION ${KRITA_PLUGIN_INSTALL_DIR}) install( PROGRAMS krita_qimageio.desktop DESTINATION ${XDG_APPS_INSTALL_DIR}) diff --git a/plugins/impex/qimageio/kis_qimageio_export.cpp b/plugins/impex/qimageio/kis_qimageio_export.cpp index 55db76bcc3..08fa9b96ff 100644 --- a/plugins/impex/qimageio/kis_qimageio_export.cpp +++ b/plugins/impex/qimageio/kis_qimageio_export.cpp @@ -1,69 +1,127 @@ /* * Copyright (c) 2007 Boudewijn Rempt * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "kis_qimageio_export.h" +#include "ui_kis_wdg_options_qimageio.h" #include #include #include #include #include #include #include #include #include #include #include +#include K_PLUGIN_FACTORY_WITH_JSON(KisQImageIOExportFactory, "krita_qimageio_export.json", registerPlugin();) +class KisWdgOptionsQImageIO : public KisConfigWidget, public Ui::KisWdgOptionsQImageIO +{ + Q_OBJECT + +public: + KisWdgOptionsQImageIO(QWidget *parent); + + void setConfiguration(const KisPropertiesConfigurationSP cfg) override; + KisPropertiesConfigurationSP configuration() const override; +}; + +KisWdgOptionsQImageIO::KisWdgOptionsQImageIO(QWidget *parent) + : KisConfigWidget(parent) +{ + setupUi(this); + imageQuality->setRange(1, 100, 0); +} + +KisPropertiesConfigurationSP KisWdgOptionsQImageIO::configuration() const +{ + KisPropertiesConfigurationSP cfg(new KisPropertiesConfiguration()); + + cfg->setProperty("quality", (int)imageQuality->value()); + return cfg; +} + +void KisWdgOptionsQImageIO::setConfiguration(const KisPropertiesConfigurationSP cfg) +{ + imageQuality->setValue(cfg->getInt("quality", 75)); +} + KisQImageIOExport::KisQImageIOExport(QObject *parent, const QVariantList &) : KisImportExportFilter(parent) { } KisQImageIOExport::~KisQImageIOExport() { } -KisImportExportErrorCode KisQImageIOExport::convert(KisDocument *document, QIODevice *io, KisPropertiesConfigurationSP /*configuration*/) +KisImportExportErrorCode KisQImageIOExport::convert(KisDocument *document, QIODevice *io, KisPropertiesConfigurationSP configuration) { QRect rc = document->savingImage()->bounds(); QImage image = document->savingImage()->projection()->convertToQImage(0, 0, 0, rc.width(), rc.height(), KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::internalConversionFlags()); - bool result = image.save(io, QFileInfo(filename()).suffix().toLatin1()); + int quality = -1; + if (configuration) { + quality = configuration->getInt("quality", -1); + } + + bool result = image.save(io, QFileInfo(filename()).suffix().toLatin1(), quality); if (result) { return ImportExportCodes::OK; } else { return ImportExportCodes::FileFormatIncorrect; } } void KisQImageIOExport::initializeCapabilities() { QList > supportedColorModels; supportedColorModels << QPair() << QPair(RGBAColorModelID, Integer8BitsColorDepthID); addSupportedColorModels(supportedColorModels, KisMimeDatabase::descriptionForMimeType(mimeType())); addCapability(KisExportCheckRegistry::instance()->get("ColorModelPerLayerCheck/" + RGBAColorModelID.id() + "/" + Integer8BitsColorDepthID.id())->create(KisExportCheckBase::SUPPORTED)); } +KisConfigWidget *KisQImageIOExport::createConfigurationWidget(QWidget *parent, const QByteArray& /*from*/, const QByteArray& /*to*/) const +{ + if (mimeType() == "image/webp") { + return new KisWdgOptionsQImageIO(parent); + } + + return 0; +} + +KisPropertiesConfigurationSP KisQImageIOExport::defaultConfiguration(const QByteArray &, const QByteArray &) const +{ + if (mimeType() == "image/webp") { + KisPropertiesConfigurationSP cfg = new KisPropertiesConfiguration(); + // the Qt webp plugin chooses 75 when passing -1 (default argument) to QImage::save() + cfg->setProperty("quality", 75); + return cfg; + } + return 0; +} + #include "kis_qimageio_export.moc" diff --git a/plugins/impex/qimageio/kis_qimageio_export.h b/plugins/impex/qimageio/kis_qimageio_export.h index 423f9876b5..60b80ce90c 100644 --- a/plugins/impex/qimageio/kis_qimageio_export.h +++ b/plugins/impex/qimageio/kis_qimageio_export.h @@ -1,38 +1,40 @@ /* * Copyright (c) 2007 Boudewijn Rempt * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef _KIS_BMP_EXPORT_H_ #define _KIS_BMP_EXPORT_H_ #include #include class KisQImageIOExport : public KisImportExportFilter { Q_OBJECT public: KisQImageIOExport(QObject *parent, const QVariantList &); ~KisQImageIOExport() override; -public: + KisImportExportErrorCode convert(KisDocument *document, QIODevice *io, KisPropertiesConfigurationSP configuration = 0) override; + KisConfigWidget *createConfigurationWidget(QWidget *parent, const QByteArray& from, const QByteArray& to) const override; + KisPropertiesConfigurationSP defaultConfiguration(const QByteArray &, const QByteArray &) const override; void initializeCapabilities() override; }; #endif diff --git a/plugins/impex/qimageio/kis_wdg_options_qimageio.ui b/plugins/impex/qimageio/kis_wdg_options_qimageio.ui new file mode 100644 index 0000000000..2e8b763a50 --- /dev/null +++ b/plugins/impex/qimageio/kis_wdg_options_qimageio.ui @@ -0,0 +1,127 @@ + + + KisWdgOptionsQImageIO + + + + 0 + 0 + 489 + 70 + + + + WebP Options + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 6 + + + + + <p>Adjust the compression time. Better compression takes longer. +<br>Note: the compression level does not change the quality of the result.</p> + + + Highest quality + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + <p>Adjust the compression time. Better compression takes longer. +<br>Note: the compression level does not change the quality of the result.</p> + + + Lowest quality + + + + + + + Note: 100 uses lossless compression, everything below is lossy. + + + <p>Adjust image quality. The lower the quality, the more compression artifacts get introduced. <br/>Note: A quality of 100 switches to lossless compression similar to (but often more efficient than) PNG.</p> + + + Quality: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + Note: 100 uses lossless compression, everything below is lossy. + + + <p>Adjust image quality. The lower the quality, the more compression artifacts get introduced. <br/>Note: A quality of 100 switches to lossless compression similar to (but often more efficient than) PNG.</p> + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 414 + 16 + + + + + + + + + KisDoubleSliderSpinBox + QWidget +
kis_slider_spin_box.h
+ 1 +
+
+ + +