summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEirik Aavitsland <eirik.aavitsland@qt.io>2018-05-28 15:05:13 +0200
committerEirik Aavitsland <eirik.aavitsland@qt.io>2018-05-30 07:35:48 +0000
commit9749e824a53afd1490a85ea42dddeda696a4f90e (patch)
tree3638c32dec9d694354f8231b1d1ed590f7e6289e
parentb9ba2217566531b51f3c5c5158bfcc386539d810 (diff)
webp handler: improve quality-level handling
In lossless mode, libwebp interpretes the quality setting as a compression-effort setting instead. The code used to set it to 100 (maximum), which could lead to unreasonable compression times (several seconds for a small image). Instead set it to libweb's own default value. Also, since the alpha channel compression has its own quality setting, make sure it follows the main quality/effort setting. Change-Id: I595d42c61f61c9932b27b185745bde6e7cfb3526 Reviewed-by: Liang Qi <liang.qi@qt.io>
-rw-r--r--src/plugins/imageformats/webp/qwebphandler.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/plugins/imageformats/webp/qwebphandler.cpp b/src/plugins/imageformats/webp/qwebphandler.cpp
index 12c4001..578a701 100644
--- a/src/plugins/imageformats/webp/qwebphandler.cpp
+++ b/src/plugins/imageformats/webp/qwebphandler.cpp
@@ -248,8 +248,15 @@ bool QWebpHandler::write(const QImage &image)
return false;
}
- config.quality = m_quality < 0 ? 75 : qMin(m_quality, 100);
- config.lossless = (config.quality >= 100);
+ int reqQuality = m_quality < 0 ? 75 : qMin(m_quality, 100);
+ if (reqQuality < 100) {
+ config.lossless = 0;
+ config.quality = reqQuality;
+ } else {
+ config.lossless = 1;
+ config.quality = 70; // For lossless, specifies compression effort; 70 is libwebp default
+ }
+ config.alpha_quality = config.quality;
picture.writer = pictureWriter;
picture.custom_ptr = device();