Как устроено · s5w

Обработка картинок

Картинку можно уменьшить и перекодировать прямо при загрузке — хранится и отдаётся уже результат.

Вход jpeg · png · gif · webp · avifВыход webp · avif · jpeg · pngПредел 25 Мпикс

Опции

Одинаковы для POST /v1/files и POST /v1/uploads.

Опция Значения Что делает
format ORIGINAL · WEBP · JPEG · PNG · AVIF Формат результата. ORIGINAL — не менять.
quality 1–100 Качество. Без него — значение по умолчанию для формата.
maxWidth 16–10000 Уменьшить до этой ширины, сохраняя пропорции.
maxHeight 16–10000 Уменьшить до этой высоты, сохраняя пропорции.

Без опций картинка сохраняется как есть.

Качество по умолчанию

Формат quality
AVIF 55
PNG 60
WEBP, JPEG 82

Что происходит

  • Только уменьшение. Картинка меньше maxWidth/maxHeight не растягивается.
  • Поворот по EXIF. JPEG, снятый «боком», поворачивается и сохраняется ровно.
  • Не больше исходника. Если менять размер и формат не нужно, а результат вышел больше оригинала, сохраняется оригинал.
  • Анимация не трогается. Анимированные GIF, WEBP и PNG (APNG) сохраняются как есть.

Что вернулось

Поле processed в ответе показывает, что было сделано:

json
{
  "applied": true,
  "operations": ["resize:300x200", "encode:webp@82"],
  "source": { "width": 600, "height": 400, "size": 3937, "mime": "image/png" },
  "result": { "width": 300, "height": 200, "size": 444, "mime": "image/webp" }
}

Если обработка не понадобилась, applied: false и причина в reason: animated, nothing to do, output is larger than source.

Ошибки

Код Когда
422 Опции заданы, но файл — не картинка или её тип не обрабатывается
422 Больше 25 мегапикселей
501 На сервере нет кодека для нужного формата