From c97c3aa54672b2e9fcfb11a11a8b5825ece09dbb Mon Sep 17 00:00:00 2001 From: Mike Phillips <140783697+mdphillips375@users.noreply.github.com> Date: Sat, 16 Sep 2023 06:48:59 -0500 Subject: [PATCH] Add JPEG Quality Option (#3285) * fixes #3188 (#3254) Add JPEG quality option Signed-off-by: Mike Phillips Revert "Add JPEG quality option" This reverts commit 046497d8273a69ea1cc0f134a996a5ada818ed8c. * Add JPEG Quality Option * Fix local variable name * JPEG Quality: Add .ini example and minor fixes. * JPEG Quality: Add .ini example and minor fixes. * Fix Formatting --------- Co-authored-by: Mehrad Mahmoudian --- flameshot.example.ini | 3 +++ src/config/generalconf.cpp | 26 ++++++++++++++++++++++++++ src/config/generalconf.h | 3 +++ src/utils/confighandler.cpp | 3 ++- src/utils/confighandler.h | 1 + src/utils/screenshotsaver.cpp | 22 ++++++++++++++++++++-- 6 files changed, 55 insertions(+), 3 deletions(-) diff --git a/flameshot.example.ini b/flameshot.example.ini index a77e9ac4..a33eb071 100644 --- a/flameshot.example.ini +++ b/flameshot.example.ini @@ -87,6 +87,9 @@ ;; Use larger color palette as the default one ; predefinedColorPaletteLarge=false ; +;; Set JPEG Quality (int in range 0-100) +; jpegQuality=75 +; ;; Shortcut Settings for all tools ;[Shortcuts] ;TYPE_ARROW=A diff --git a/src/config/generalconf.cpp b/src/config/generalconf.cpp index 6205c6b5..47de77f8 100644 --- a/src/config/generalconf.cpp +++ b/src/config/generalconf.cpp @@ -64,6 +64,7 @@ GeneralConf::GeneralConf(QWidget* parent) initShowMagnifier(); initSquareMagnifier(); + initJpegQuality(); // this has to be at the end initConfigButtons(); updateComponents(); @@ -777,11 +778,36 @@ void GeneralConf::initShowSelectionGeometry() vboxLayout->addStretch(); } +void GeneralConf::initJpegQuality() +{ + auto* tobox = new QHBoxLayout(); + + int quality = ConfigHandler().value("jpegQuality").toInt(); + m_jpegQuality = new QSpinBox(); + m_jpegQuality->setRange(0, 100); + m_jpegQuality->setToolTip(tr("Quality range of 0-100; Higher number is " + "better quality and larger file size")); + m_jpegQuality->setValue(quality); + tobox->addWidget(m_jpegQuality); + tobox->addWidget(new QLabel(tr("JPEG Quality"))); + + m_scrollAreaLayout->addLayout(tobox); + connect(m_jpegQuality, + static_cast(&QSpinBox::valueChanged), + this, + &GeneralConf::setJpegQuality); +} + void GeneralConf::setSelGeoHideTime(int v) { ConfigHandler().setValue("showSelectionGeometryHideTime", v); } +void GeneralConf::setJpegQuality(int v) +{ + ConfigHandler().setJpegQuality(v); +} + void GeneralConf::setGeometryLocation(int index) { ConfigHandler().setValue("showSelectionGeometry", diff --git a/src/config/generalconf.h b/src/config/generalconf.h index 0444de7c..e1f49791 100644 --- a/src/config/generalconf.h +++ b/src/config/generalconf.h @@ -57,6 +57,7 @@ private slots: void setSaveAsFileExtension(const QString& extension); void setGeometryLocation(int index); void setSelGeoHideTime(int v); + void setJpegQuality(int v); private: const QString chooseFolder(const QString& currentPath = ""); @@ -90,6 +91,7 @@ private: void initUploadClientSecret(); void initSaveLastRegion(); void initShowSelectionGeometry(); + void initJpegQuality(); void _updateComponents(bool allowEmptySavePath); @@ -133,4 +135,5 @@ private: QCheckBox* m_showSelectionGeometry; QComboBox* m_selectGeometryLocation; QSpinBox* m_xywhTimeout; + QSpinBox* m_jpegQuality; }; diff --git a/src/utils/confighandler.cpp b/src/utils/confighandler.cpp index effe4cb1..cb9ae5d7 100644 --- a/src/utils/confighandler.cpp +++ b/src/utils/confighandler.cpp @@ -124,7 +124,8 @@ static QMap> OPTION("copyOnDoubleClick" ,Bool ( false )), OPTION("uploadClientSecret" ,String ( "313baf0c7b4d3ff" )), OPTION("showSelectionGeometry" , BoundedInt (0,5,4)), - OPTION("showSelectionGeometryHideTime", LowerBoundedInt (0, 3000)) + OPTION("showSelectionGeometryHideTime", LowerBoundedInt (0, 3000)), + OPTION("jpegQuality", BoundedInt (0,100,75)) }; static QMap> recognizedShortcuts = { diff --git a/src/utils/confighandler.h b/src/utils/confighandler.h index 8b8844a0..aedd7329 100644 --- a/src/utils/confighandler.h +++ b/src/utils/confighandler.h @@ -126,6 +126,7 @@ public: CONFIG_GETTER_SETTER(uploadClientSecret, setUploadClientSecret, QString) CONFIG_GETTER_SETTER(saveLastRegion, setSaveLastRegion, bool) CONFIG_GETTER_SETTER(showSelectionGeometry, setShowSelectionGeometry, int) + CONFIG_GETTER_SETTER(jpegQuality, setJpegQuality, int) CONFIG_GETTER_SETTER(showSelectionGeometryHideTime, showSelectionGeometryHideTime, int) diff --git a/src/utils/screenshotsaver.cpp b/src/utils/screenshotsaver.cpp index b3ec5314..8f170fc3 100644 --- a/src/utils/screenshotsaver.cpp +++ b/src/utils/screenshotsaver.cpp @@ -35,7 +35,16 @@ bool saveToFilesystem(const QPixmap& capture, path, ConfigHandler().saveAsFileExtension()); QFile file{ completePath }; file.open(QIODevice::WriteOnly); - bool okay = capture.save(&file); + + bool okay; + QString saveExtension; + saveExtension = QFileInfo(completePath).suffix().toLower(); + if (saveExtension == "jpg" || saveExtension == "jpeg") { + okay = capture.save(&file, nullptr, ConfigHandler().jpegQuality()); + } else { + okay = capture.save(&file); + } + QString saveMessage = messagePrefix; QString notificationPath = completePath; if (!saveMessage.isEmpty()) { @@ -97,6 +106,9 @@ void saveToClipboardMime(const QPixmap& capture, const QString& imageType) QByteArray array; QBuffer buffer{ &array }; QImageWriter imageWriter{ &buffer, imageType.toUpper().toUtf8() }; + if (imageType == "jpeg") { + imageWriter.setQuality(ConfigHandler().jpegQuality()); + } imageWriter.write(capture.toImage()); QPixmap formattedPixmap; @@ -189,7 +201,13 @@ bool saveToFilesystemGUI(const QPixmap& capture) QFile file{ savePath }; file.open(QIODevice::WriteOnly); - okay = capture.save(&file); + QString saveExtension; + saveExtension = QFileInfo(savePath).suffix().toLower(); + if (saveExtension == "jpg" || saveExtension == "jpeg") { + okay = capture.save(&file, nullptr, ConfigHandler().jpegQuality()); + } else { + okay = capture.save(&file); + } if (okay) { QString pathNoFile =