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>
This commit is contained in:
parent
b9ba221756
commit
9749e824a5
|
@ -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();
|
||||
|
||||
|
|
Loading…
Reference in New Issue