Nodejs Sharp WebP сжатие без потерь
Я разрабатываю аналогичный сервис Imgix и использую Sharp.
Но сжатие webg без потерь Imgix дает лучшие результаты, чем Sharp. Одно и то же изображение с одинаковой шириной и высотой в Imgix имеет 453 КБ и Sharp 1,3 МБ.
Некоторые рекомендации по увеличению компрессии без потери качества?
Код, который я использую:
https.get(url, function (response) {
let transform = sharp().toFormat('webp').resize(width, height);
return response.pipe(transform).webp({lossless:true}).pipe(res);
});
2 ответа
Я вижу, что в этом документе есть несколько полей в параметрах: качество, качество, качество, почти без потерь, сила. Вы можете попробовать? И сравните с IMGIX
- качество: качество чисел, целое число от 1 до 100 (необязательно, по умолчанию 80)
- alphaQuality: качество числа альфа-слоя, целое число 0-100 (необязательно, по умолчанию 100)
- lossless: логическое использование режима сжатия без потерь (необязательно, по умолчанию false)
- nearLossless: логическое значение использовать режим сжатия near_lossless (необязательно, по умолчанию false)
- force: Boolean принудительный вывод 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);
});
Документация о том, как использовать параметры вывода Sharp webp , отсутствует AFAICT, но, согласно этому комментарию , параметры
nearLossless
а также
quality
следует использовать вместе, в то время как опция эквивалентна
nearLossless:true,quality:100
По моему опыту,
nearLossless:true,quality:50
сократит размер файла до менее чем половины
lossless:true
, сохраняя при этом большую часть качества.