我正在开发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);
});
答案 0 :(得分:2)
关于如何使用 Sharp 的 webp output options 的文档不存在 AFAICT,但根据此 comment 选项 nearLossless
和 quality
应该一起使用,而 { {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);
});