Node.js Sharp Webp无损压缩

时间:2019-03-01 23:29:01

标签: node.js sharp

我正在开发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);
});

2 个答案:

答案 0 :(得分:2)

关于如何使用 Sharp 的 webp output options 的文档不存在 AFAICT,但根据此 comment 选项 nearLosslessquality 应该一起使用,而 { {1}} 选项等效于 lossless:true

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

答案 1 :(得分:1)

我看到document有一些选项:质量,alphaQuality,nearLossless,force。你可以试试看吗?并与IMGIX进行比较

  
      
  • quality 数字质量,整数1-100(可选,默认为80)
  •   
  • alphaQuality数字Alpha层的质量,整数0-100(可选,默认为100)
  •   
  • 无损布尔值使用无损压缩模式(可选,默认为false)
  •   
  • nearLossless 布尔值使用Near_lossless压缩模式(可选,默认为false)
  •   
  • force 布尔值强制WebP输出,否则尝试使用输入格式(可选,默认为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);
});