yandex

Sharp: ошибка при обработке изображений (Invalid SOS parameters)

Ошибка при использовании 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