Files
SnapOtter/apps/docs/ru/tools/image/gif-tools.md
T
SnapOtterandGitHub 4963ab3bbd feat(docs-i18n): translate all documentation into 20 languages
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.
2026-07-11 13:52:47 +08:00

148 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: "Изменение размера, оптимизация, изменение скорости, реверс, поворот и извлечение кадров анимированных GIF в одном инструменте."
i18n_source_hash: 5e525e80db92
i18n_provenance: human
i18n_output_hash: b17a88f42542
---
# Инструменты GIF {#gif-tools}
Изменяйте размер, оптимизируйте, меняйте скорость, реверсируйте, извлекайте кадры и поворачивайте анимированные GIF. Предоставляет несколько режимов работы в одном инструменте.
## Конечная точка API {#api-endpoint}
`POST /api/v1/tools/image/gif-tools`
## Параметры {#parameters}
### Общие параметры {#common-parameters}
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|-----------|------|----------|---------|-------------|
| mode | string | Нет | `"resize"` | Режим работы: `resize`, `optimize`, `speed`, `reverse`, `extract`, `rotate` |
| loop | number | Нет | 0 | Число повторов выходного GIF (0 = бесконечно, 1-100 = конечное число повторов) |
### Параметры режима изменения размера {#resize-mode-parameters}
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|-----------|------|----------|---------|-------------|
| width | integer | Нет | - | Целевая ширина в пикселях (от 1 до 16384) |
| height | integer | Нет | - | Целевая высота в пикселях (от 1 до 16384) |
| percentage | number | Нет | - | Масштабирование в процентах (от 1 до 500). Переопределяет width/height, если задан. |
### Параметры режима оптимизации {#optimize-mode-parameters}
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|-----------|------|----------|---------|-------------|
| colors | number | Нет | 256 | Максимальное число цветов в палитре (от 2 до 256) |
| dither | number | Нет | 1.0 | Сила дизеринга (от 0 до 1, где 0 отключает дизеринг) |
| effort | number | Нет | 7 | Уровень усилий оптимизации (от 1 до 10, выше = медленнее, но меньше) |
### Параметры режима скорости {#speed-mode-parameters}
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|-----------|------|----------|---------|-------------|
| speedFactor | number | Нет | 1.0 | Множитель скорости (от 0.1 до 10). Значения > 1 ускоряют, < 1 замедляют. |
### Параметры режима извлечения {#extract-mode-parameters}
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|-----------|------|----------|---------|-------------|
| extractMode | string | Нет | `"single"` | Режим извлечения: `single`, `range`, `all` |
| frameNumber | number | Нет | 0 | Индекс кадра для извлечения в режиме `single` (отсчёт с 0) |
| frameStart | number | Нет | 0 | Индекс начального кадра для режима `range` (отсчёт с 0) |
| frameEnd | number | Нет | - | Индекс конечного кадра для режима `range` (отсчёт с 0, включительно) |
| extractFormat | string | Нет | `"png"` | Формат извлекаемых кадров: `png`, `webp` |
### Параметры режима поворота {#rotate-mode-parameters}
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|-----------|------|----------|---------|-------------|
| angle | number | Нет | - | Угол поворота: `90`, `180` или `270` градусов |
| flipH | boolean | Нет | `false` | Отразить по горизонтали |
| flipV | boolean | Нет | `false` | Отразить по вертикали |
## Примеры запросов {#example-requests}
### Изменение размера {#resize}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools \
-F "file=@animation.gif" \
-F 'settings={"mode":"resize","percentage":50}'
```
### Оптимизация {#optimize}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools \
-F "file=@large.gif" \
-F 'settings={"mode":"optimize","colors":128,"effort":9}'
```
### Ускорение {#speed-up}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools \
-F "file=@animation.gif" \
-F 'settings={"mode":"speed","speedFactor":2.0}'
```
### Извлечение одного кадра {#extract-single-frame}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools \
-F "file=@animation.gif" \
-F 'settings={"mode":"extract","extractMode":"single","frameNumber":5,"extractFormat":"png"}'
```
## Пример ответа {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/animation.gif",
"originalSize": 2345678,
"processedSize": 1234567
}
```
## Подмаршрут Info {#info-sub-route}
`POST /api/v1/tools/image/gif-tools/info`
Возвращает метаданные об анимированном GIF без его обработки.
### Запрос Info {#info-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools/info \
-F "file=@animation.gif"
```
### Ответ Info {#info-response}
```json
{
"width": 480,
"height": 320,
"pages": 24,
"delay": [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100],
"loop": 0,
"fileSize": 2345678,
"duration": 2400
}
```
## Примечания {#notes}
- Основная конечная точка обработки использует стандартную фабрику `createToolRoute`.
- Конечной точке info требуется только загрузка файла (настройки не нужны).
- В режиме `resize`, если задан `percentage`, он имеет приоритет над `width`/`height`. Изменение размера использует `fit: inside` для сохранения соотношения сторон.
- В режиме `speed` задержки кадров делятся на коэффициент скорости. Минимальная задержка на кадр составляет 20 мс (ограничение спецификации GIF).
- В режиме `reverse` также доступен параметр `speedFactor` для одновременной регулировки скорости при реверсе.
- В режиме `extract` с `range` или `all` вывод представляет собой ZIP-файл с отдельными кадрами.
- В режиме `rotate` каждый кадр обрабатывается отдельно и вновь собирается в анимацию.
- Параметр `loop` управляет тем, сколько раз повторяется выходной GIF. Используйте 0 для бесконечного повтора.
- Поле `duration` в ответе info представляет собой общую длительность анимации в миллисекундах.