Ошибка при использовании SharpJS: "Invalid SOS parameters for sequential JPEG"
Проблема при оптимизации изображений через Sharp: VipsJpeg Invalid SOS parameters
Описание: При обработке изображений с помощью библиотеки Sharp
в Node.js возникает ошибка на этапе сохранения файла.
Пример кода на Node.js:
await Sharp(img_buffer)
.resize(width, height, { fit: "cover" })
.composite([compositeParams])
.jpeg({ mozjpeg: true })
.toFormat("jpeg", { progressive: true, quality: parseInt(quality) })
.sharpen()
.toFile(`${filePath}_${width}.jpeg`)
.catch((err) => {
console.log(err);
});
Вывод ошибки в консоли:
Error: VipsJpeg: Invalid SOS parameters for sequential JPEG
at Sharp.toFile (../node_modules/sharp/lib/output.js:89:19)
at transform (../utils/files.utils.js:410:6)
at async saveFilesTemporary (../utils/files.utils.js:234:11)
at async ../routes/an.router.js:1271:21
Предположительно ошибка возникает при обработке JPEG-файлов, загруженных с устройств Samsung.
Решение:
Необходимо передать опцию failOn: 'truncated'
в Sharp. Это позволит Sharp корректно обрабатывать изображения.
Обновлённый код:
await Sharp(img_buffer, { failOn: 'truncated' })
.resize(width, height, { fit: "cover" })
.composite([compositeParams])
.jpeg({ mozjpeg: true })
.toFormat("jpeg", { progressive: true, quality: parseInt(quality) })
.sharpen()
.toFile(`${filePath}_${width}.jpeg`)
.catch((err) => {
console.log(err);
});
Итог: Добавление параметра failOn: 'truncated'
позволяет безопасно обрабатывать изображения и устраняет ошибку Invalid SOS parameters
при сохранении JPEG.
1