mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
All 181 docs markdown files translated into 20 languages (apps/docs/<locale>/**). Companion to the i18n code PR; admin-merged because the file count exceeds GitHub's per-PR CI trigger limit. Validated by pnpm i18n:check (all surfaces, 0 stale/missing) and a clean all-locale docs build.
212 lines
13 KiB
Markdown
212 lines
13 KiB
Markdown
---
|
|
description: "Справочник по операциям движка изображений. Все операции обработки изображений на базе Sharp и их параметры."
|
|
i18n_source_hash: 42febdf85fa8
|
|
i18n_provenance: human
|
|
i18n_output_hash: b6b18f196fbd
|
|
---
|
|
|
|
# Движок изображений {#image-engine}
|
|
|
|
Пакет `@snapotter/image-engine` обрабатывает все не-AI операции с изображениями. Он оборачивает [Sharp](https://sharp.pixelplumbing.com/) и работает полностью внутри процесса без внешних зависимостей.
|
|
|
|
## Операции {#operations}
|
|
|
|
### resize {#resize}
|
|
|
|
Масштабирование изображения до конкретных размеров или в процентах.
|
|
|
|
| Параметр | Тип | Описание |
|
|
|---|---|---|
|
|
| `width` | number | Целевая ширина в пикселях |
|
|
| `height` | number | Целевая высота в пикселях |
|
|
| `fit` | string | `cover`, `contain`, `fill`, `inside` или `outside` |
|
|
| `withoutEnlargement` | boolean | Если true, не увеличивает меньшие изображения |
|
|
| `percentage` | number | Масштабировать в процентах вместо абсолютных размеров |
|
|
|
|
Можно задать `width`, `height` или оба. Если задать только один, другой вычисляется для сохранения соотношения сторон.
|
|
|
|
### crop {#crop}
|
|
|
|
Вырезание прямоугольной области из изображения.
|
|
|
|
| Параметр | Тип | Описание |
|
|
|---|---|---|
|
|
| `left` | number | Смещение X от левого края |
|
|
| `top` | number | Смещение Y от верхнего края |
|
|
| `width` | number | Ширина области обрезки |
|
|
| `height` | number | Высота области обрезки |
|
|
| `unit` | string | `px` (по умолчанию) или `percent` |
|
|
|
|
### rotate {#rotate}
|
|
|
|
Поворот изображения на заданный угол.
|
|
|
|
| Параметр | Тип | Описание |
|
|
|---|---|---|
|
|
| `angle` | number | Угол поворота в градусах (0-360) |
|
|
| `background` | string | Цвет заливки открывшейся области (по умолчанию: `#000000`). Применяется только к углам, не кратным 90 градусам. |
|
|
|
|
### flip {#flip}
|
|
|
|
Отражение изображения по горизонтали, вертикали или обоим осям. Хотя бы одно значение должно быть true.
|
|
|
|
| Параметр | Тип | Описание |
|
|
|---|---|---|
|
|
| `horizontal` | boolean | Отразить слева направо |
|
|
| `vertical` | boolean | Отразить сверху вниз |
|
|
|
|
### convert {#convert}
|
|
|
|
Изменение формата изображения.
|
|
|
|
| Параметр | Тип | Описание |
|
|
|---|---|---|
|
|
| `format` | string | Целевой формат: `jpg`, `png`, `webp`, `avif`, `tiff`, `gif`, `jxl`, `heic`, `heif`, `bmp`, `ico`, `jp2`, `qoi` |
|
|
| `quality` | number | Качество сжатия (1-100, применяется к форматам с потерями) |
|
|
|
|
Первые семь форматов (от `jpg` до `jxl`) кодируются Sharp внутри процесса. Остальные форматы используют внешние кодеры на уровне API: `heic`/`heif` через heif-enc, `bmp`/`ico` через ImageMagick, `jp2` через opj_compress и `qoi` через встроенный TypeScript-кодек.
|
|
|
|
### compress {#compress}
|
|
|
|
Уменьшение размера файла с сохранением того же формата.
|
|
|
|
| Параметр | Тип | Описание |
|
|
|---|---|---|
|
|
| `quality` | number | Целевое качество (1-100) |
|
|
| `targetSizeBytes` | number | Опциональный целевой размер файла в байтах |
|
|
| `format` | string | Опциональное переопределение формата |
|
|
|
|
### strip-metadata {#strip-metadata}
|
|
|
|
Удаление метаданных EXIF, IPTC, XMP и ICC из изображения. Без параметров (или с `stripAll: true`) удаляет всё. Передайте отдельные флаги для выборочного удаления.
|
|
|
|
| Параметр | Тип | Описание |
|
|
|---|---|---|
|
|
| `stripAll` | boolean | Удалить все метаданные (по умолчанию, если флаги не заданы) |
|
|
| `stripExif` | boolean | Удалить данные EXIF (включая GPS, если `stripGps` не задан отдельно) |
|
|
| `stripGps` | boolean | Удалить данные о GPS-местоположении |
|
|
| `stripIcc` | boolean | Удалить цветовой профиль ICC |
|
|
| `stripXmp` | boolean | Удалить метаданные XMP |
|
|
|
|
### Настройки цвета {#color-adjustments}
|
|
|
|
Эти операции изменяют цветовые свойства изображения. Каждая принимает одно числовое значение.
|
|
|
|
| Операция | Параметр | Диапазон | Описание |
|
|
|---|---|---|---|
|
|
| `brightness` | `value` | -100 до 100 | Настройка яркости |
|
|
| `contrast` | `value` | -100 до 100 | Настройка контрастности |
|
|
| `saturation` | `value` | -100 до 100 | Настройка насыщенности цвета |
|
|
|
|
### Цветовые фильтры {#color-filters}
|
|
|
|
Применяют фиксированное цветовое преобразование. Не принимают параметров.
|
|
|
|
| Операция | Описание |
|
|
|---|---|
|
|
| `grayscale` | Преобразовать в оттенки серого |
|
|
| `sepia` | Применить тон сепии |
|
|
| `invert` | Инвертировать все цвета |
|
|
|
|
### Цветовые каналы {#color-channels}
|
|
|
|
Настройка отдельных цветовых каналов RGB. Значения являются множителями, где 100 = без изменений.
|
|
|
|
| Параметр | Тип | Описание |
|
|
|---|---|---|
|
|
| `red` | number | Множитель красного канала (0 до 200, 100 = без изменений) |
|
|
| `green` | number | Множитель зелёного канала (0 до 200, 100 = без изменений) |
|
|
| `blue` | number | Множитель синего канала (0 до 200, 100 = без изменений) |
|
|
|
|
### sharpen {#sharpen}
|
|
|
|
Простое повышение резкости, управляемое одним значением.
|
|
|
|
| Параметр | Тип | Описание |
|
|
|---|---|---|
|
|
| `value` | number | Интенсивность резкости (0 до 100). Сопоставляется с гауссовой сигмой 0.5-10. |
|
|
|
|
### sharpen-advanced {#sharpen-advanced}
|
|
|
|
Продвинутое повышение резкости с тремя выбираемыми методами и опциональным предварительным проходом шумоподавления.
|
|
|
|
| Параметр | Тип | Описание |
|
|
|---|---|---|
|
|
| `method` | string | `adaptive`, `unsharp-mask` или `high-pass` |
|
|
| `sigma` | number | Радиус гауссова размытия, 0.5-10 (адаптивный) |
|
|
| `m1` | number | Резкость плоских областей, 0-10 (адаптивный) |
|
|
| `m2` | number | Резкость текстурированных областей, 0-20 (адаптивный) |
|
|
| `x1` | number | Порог плоское/зубчатое, 0-10 (адаптивный) |
|
|
| `y2` | number | Максимальное осветление (ограничение ореола), 0-50 (адаптивный) |
|
|
| `y3` | number | Максимальное затемнение (ограничение ореола), 0-50 (адаптивный) |
|
|
| `amount` | number | Процент интенсивности, 0-500 (нерезкая маска) |
|
|
| `radius` | number | Радиус размытия, 0.1-5.0 (нерезкая маска) |
|
|
| `threshold` | number | Минимальная яркость края, 0-255 (нерезкая маска) |
|
|
| `strength` | number | Сила смешивания, 0-100 (высокочастотный) |
|
|
| `kernelSize` | number | `3` или `5` для ядра 3x3 / 5x5 (высокочастотный) |
|
|
| `denoise` | string | Предварительный проход шумоподавления: `off`, `light`, `medium` или `strong` |
|
|
|
|
Параметры специфичны для метода. Указывайте только те, что относятся к выбранному методу.
|
|
|
|
### color-blindness {#color-blindness}
|
|
|
|
Симуляция дефицита цветового зрения с помощью матрицы цветовой рекомбинации 3x3.
|
|
|
|
| Параметр | Тип | Описание |
|
|
|---|---|---|
|
|
| `type` | string | Одно из: `protanopia`, `deuteranopia`, `tritanopia`, `protanomaly`, `deuteranomaly`, `tritanomaly`, `achromatopsia`, `blueConeMonochromacy` |
|
|
|
|
### edit-metadata {#edit-metadata}
|
|
|
|
Запись или удаление отдельных полей метаданных EXIF/IPTC без удаления всего блока.
|
|
|
|
| Параметр | Тип | Описание |
|
|
|---|---|---|
|
|
| `artist` | string | Тег EXIF Artist |
|
|
| `copyright` | string | Тег EXIF Copyright |
|
|
| `imageDescription` | string | Тег EXIF ImageDescription |
|
|
| `software` | string | Тег EXIF Software |
|
|
| `dateTime` | string | Тег EXIF DateTime |
|
|
| `dateTimeOriginal` | string | Тег EXIF DateTimeOriginal |
|
|
| `clearGps` | boolean | Удалить все теги GPS |
|
|
| `fieldsToRemove` | string[] | Список имён полей EXIF для удаления |
|
|
|
|
Все параметры опциональны. Поля, перечисленные в `fieldsToRemove`, удаляются из существующего блока EXIF. Поля, заданные через именованные параметры, записываются (или перезаписываются). Двоичные/небезопасные ключи, такие как MakerNote, молча игнорируются.
|
|
|
|
## Определение формата {#format-detection}
|
|
|
|
Движок определяет входные форматы автоматически по заголовкам файлов, а не только по расширениям. Это значит, что файл `.jpg`, который на самом деле является PNG, будет обработан корректно. Определение использует многослойный подход: сначала магические байты, затем расширение файла как запасной вариант.
|
|
|
|
SnapOtter поддерживает **55+ входных форматов** и **13 выходных форматов**, включая 23 формата RAW камер от 20+ брендов, профессиональные форматы (PSD, EPS, OpenEXR, HDR), современные кодеки (JPEG XL, AVIF, HEIC, QOI, JPEG 2000) и научные/игровые форматы (FITS, DDS). Декодирование выполняется нативно через Sharp там, где это возможно, с автоматическим откатом на ImageMagick, LibRaw и специализированные CLI-декодеры.
|
|
|
|
См. страницу [Поддерживаемые форматы](/ru/guide/supported-formats) для полного списка.
|
|
|
|
## Извлечение метаданных {#metadata-extraction}
|
|
|
|
Инструмент `info` возвращает метаданные изображения. См. [Информация об изображении](/ru/tools/image/info) для полного справочника полей.
|
|
|
|
```json
|
|
{
|
|
"filename": "photo.jpg",
|
|
"fileSize": 2450000,
|
|
"width": 4032,
|
|
"height": 3024,
|
|
"format": "jpeg",
|
|
"channels": 3,
|
|
"hasAlpha": false,
|
|
"colorSpace": "srgb",
|
|
"density": 72,
|
|
"isProgressive": false,
|
|
"hasExif": true,
|
|
"hasIcc": true,
|
|
"hasXmp": false,
|
|
"bitDepth": "8",
|
|
"pages": 1,
|
|
"histogram": [
|
|
{ "channel": "red", "min": 0, "max": 255, "mean": 128.45, "stdev": 52.31 },
|
|
{ "channel": "green", "min": 2, "max": 253, "mean": 115.22, "stdev": 48.76 },
|
|
{ "channel": "blue", "min": 0, "max": 250, "mean": 102.89, "stdev": 55.14 }
|
|
]
|
|
}
|
|
```
|