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 =