Nodejs Sharp webp无损压缩

Nodejs Sharp webp lossless compression

我正在开发 Imgix 的类似服务,我正在使用 Sharp。

但是webp无损压缩Imgix比Sharp得到更好的效果。在 Imgix 中具有相同宽度和高度的相同图像有 453 KB,而在 Sharp 中为 1.3 MB。

在不降低质量的情况下提高压缩率的一些建议?

我使用的代码:

https.get(url, function (response) {
    let transform = sharp().toFormat('webp').resize(width, height);
    return response.pipe(transform).webp({lossless:true}).pipe(res);
});

我看到 document 在选项中有一些字段:质量、alpha 质量、接近无损、力。你能试试吗?并与 IMGIX

比较
  • quality: Number quality, integer 1-100 (optional, default 80)
  • alphaQuality: Number quality of alpha layer, integer 0-100 (optional, default 100)
  • lossless: Boolean use lossless compression mode (optional, default false)
  • nearLossless: Boolean use near_lossless compression mode (optional, default false)
  • force: Boolean force WebP output, otherwise attempt to use input format (optional, default true)
https.get(url, function (response) {
    let transform = sharp().toFormat('webp').resize(width, height);
    return response.pipe(transform).webp({lossless:true, quality: 60, alphaQuality: 80, force: false}).pipe(res);
});

有关如何使用 Sharp 的 webp output options is non-existent AFAICT, but according to this comment 选项的文档 nearLosslessquality 应该一起使用,而 lossless:true 选项等同于 nearLossless:true,quality:100

根据我的经验,nearLossless:true,quality:50 会将文件大小减少到不到 lossless:true 的一半,同时保留大部分质量。