WebP转换后图片质量评估方法有哪些?如何避免模糊又保证压缩率?
最近在用Sharp库批量转WebP图片,发现设置quality: 80后图片边缘明显发虚。尝试过改chromaSubsampling和alphaQuality参数,但不确定哪个指标最合理。用Google PSI测试时,WebP比原JPG节省了40%体积,但视觉上感觉质量下降明显。有没有更科学的评估方法?比如同时参考PSNR和SSIM数值?
另外,测试代码如下:
sharp(inputPath)
.webp({ quality: 80, effort: 7 })
.toFile(outputPath, (err, info) => {
console.log('Compression ratio:', info.size / originalSize);
});
但不同图片压缩后的ratio差异很大,有没有自动化评估质量的工具或指标能统一标准?
先上工具链。用sharp转完图后,搞个自动化比对脚本,核心是加俩指标:PSNR和SSIM。直接上image-ssim库算结构相似性,再结合opencv或者命令行工具compare(ImageMagick的)出PSNR值。你现在的quality:80可能在某些图上过压缩了,特别是线条多的图。
具体改你的代码成这样:
SSIM > 0.95 算安全,PSNR > 35dB 也可以接受。如果低于这俩阈值,就调高quality到85甚至90,同时把effort拉到4以下提速但保质量。chromaSubsampling设为'4:4:4'避免色度抽样损失,尤其对截图类图片很重要。
另外别全盘用固定quality,改成根据内容动态调整。比如先判断图片类型,照片用quality:80,截图/文字图直接上90。可以靠sharp.metadata()读分辨率+通道信息,结合文件名关键词或简单分类逻辑。
最后压测时跑个样本集,记录每张图的SSIM、PSNR、体积比,画个散点图看分布。你要的是那个“省40%但不糊”的平衡点,通常quality 85 + effort 4 + 4:4:4 能打多数情况。