mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
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.
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
---
|
||||
description: "Регулювання яскравості, контрастності, насиченості, температури, відтінку, каналів та застосування колірних ефектів."
|
||||
i18n_source_hash: 41b35fe5c2ba
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 32f098184cbf
|
||||
---
|
||||
|
||||
# Регулювання кольорів {#adjust-colors}
|
||||
|
||||
Комплексний інструмент регулювання кольорів, що поєднує яскравість, контрастність, експозицію, насиченість, температуру, тонування, обертання відтінку, порівневі налаштування окремих каналів та ефекти в один клік (відтінки сірого, сепія, інверсія) в одній кінцевій точці.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/adjust-colors`
|
||||
|
||||
Приймає дані форми у форматі multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | Типове значення | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| brightness | number | Ні | `0` | Регулювання яскравості (-100 до 100) |
|
||||
| contrast | number | Ні | `0` | Регулювання контрастності (-100 до 100) |
|
||||
| exposure | number | Ні | `0` | Експозиція / гамма середніх тонів (-100 до 100) |
|
||||
| saturation | number | Ні | `0` | Насиченість кольору (-100 до 100) |
|
||||
| temperature | number | Ні | `0` | Баланс білого: холодний/синій до теплого/помаранчевого (-100 до 100) |
|
||||
| tint | number | Ні | `0` | Зсув тонування: зелений до пурпурового (-100 до 100) |
|
||||
| hue | number | Ні | `0` | Обертання відтінку у градусах (-180 до 180) |
|
||||
| sharpness | number | Ні | `0` | Сила різкості (0 до 100) |
|
||||
| red | number | Ні | `100` | Рівень червоного каналу (0 до 200, 100 = без змін) |
|
||||
| green | number | Ні | `100` | Рівень зеленого каналу (0 до 200, 100 = без змін) |
|
||||
| blue | number | Ні | `100` | Рівень синього каналу (0 до 200, 100 = без змін) |
|
||||
| effect | string | Ні | `"none"` | Колірний ефект: `none`, `grayscale`, `sepia`, `invert` |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/adjust-colors \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"brightness": 20, "contrast": 10, "saturation": -30, "effect": "none"}'
|
||||
```
|
||||
|
||||
Застосувати теплий вінтажний вигляд:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/adjust-colors \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"temperature": 40, "saturation": -15, "contrast": 10, "effect": "sepia"}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2380000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Усі параметри за замовчуванням мають нейтральні значення, тож ви можете регулювати лише те, що потрібно.
|
||||
- Регулювання застосовуються в такому порядку: яскравість, контрастність, експозиція, насиченість/відтінок, температура/тонування, різкість, канали, ефекти.
|
||||
- Температура використовує матрицю колірної рекомбінації 3x3 по осях синій-помаранчевий та зелений-пурпуровий.
|
||||
- Експозиція зіставляється з функцією гамми Sharp (додатні значення освітлюють середні тони, від'ємні затемнюють їх).
|
||||
- Ця кінцева точка також відповідає на застарілих шляхах `/api/v1/tools/image/brightness-contrast`, `/api/v1/tools/image/saturation`, `/api/v1/tools/image/color-channels` та `/api/v1/tools/image/color-effects`. Усі використовують однакову схему.
|
||||
- Вихідний формат відповідає вхідному. Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
description: "Розширення полотна зображення за допомогою ШІ-домальовування, розширюючи його в будь-якому напрямку та заповнюючи нові області відповідно до оригіналу."
|
||||
i18n_source_hash: 1b00db4ed40d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 32d0968bfa56
|
||||
---
|
||||
|
||||
# ШІ-розширення полотна {#ai-canvas-expand}
|
||||
|
||||
Розширення полотна зображення за допомогою заповнення на основі ШІ (домальовування назовні). Розширює зображення в будь-якому напрямку та заповнює нові області згенерованим ШІ вмістом, що відповідає наявному зображенню.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/ai-canvas-expand`
|
||||
|
||||
**Обробка:** Асинхронна (повертає 202, опитуйте `/api/v1/jobs/{jobId}/progress` щодо статусу через SSE)
|
||||
|
||||
**Пакет моделі:** `object-eraser-colorize` (1-2 ГБ)
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | Типове значення | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Так | - | Файл зображення (multipart) |
|
||||
| extendTop | integer | Ні | `0` | Пікселі для розширення зверху |
|
||||
| extendRight | integer | Ні | `0` | Пікселі для розширення справа |
|
||||
| extendBottom | integer | Ні | `0` | Пікселі для розширення знизу |
|
||||
| extendLeft | integer | Ні | `0` | Пікселі для розширення зліва |
|
||||
| tier | string | Ні | `"balanced"` | Рівень якості: `fast`, `balanced`, `high` |
|
||||
| format | string | Ні | `"auto"` | Вихідний формат: `auto`, `png`, `jpg`, `jpeg`, `webp`, `tiff`, `gif`, `avif`, `heic`, `heif`, `jxl` |
|
||||
| quality | integer | Ні | `95` | Якість виводу (1-100) |
|
||||
|
||||
Принаймні один напрямок розширення повинен бути більшим за 0.
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/ai-canvas-expand \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"extendTop":200,"extendBottom":200,"extendLeft":100,"extendRight":100,"tier":"balanced"}'
|
||||
```
|
||||
|
||||
## Відповідь {#response}
|
||||
|
||||
### Початкова відповідь (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Перебіг (SSE за адресою `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Expanding canvas...","percent":50}
|
||||
```
|
||||
|
||||
### Кінцевий результат (через SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/photo_extended.png",
|
||||
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
|
||||
"originalSize": 300000,
|
||||
"processedSize": 520000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Потребує встановлення пакета моделі `object-eraser-colorize` (1-2 ГБ).
|
||||
- Використовує домальовування назовні на основі LaMa для генерації вмісту розширених областей.
|
||||
- Параметр `tier` обмінює швидкість на якість: `fast` швидко дає результати з можливими артефактами, `high` триває довше, але дає плавніші, узгодженіші заповнення.
|
||||
- Значення розширення вказуються в пікселях. Кінцеві розміри зображення будуть такими: початкова ширина + extendLeft + extendRight на початкову висоту + extendTop + extendBottom.
|
||||
- Для вихідних форматів, які не переглядаються в браузері (HEIC, JXL, TIFF), поряд з основним виводом генерується попередній перегляд WebP.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
description: "Заміна фону зображення суцільним кольором або градієнтом за допомогою ШІ."
|
||||
i18n_source_hash: 930fe8890e55
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 6732f77d11df
|
||||
---
|
||||
|
||||
# Заміна фону {#background-replace}
|
||||
|
||||
Заміна фону зображення суцільним кольором або градієнтом. Модель ШІ виявляє об'єкт, видаляє початковий фон і компонує об'єкт на обраному вами фоні.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/background-replace`
|
||||
|
||||
Приймає дані форми у форматі multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | Типове значення | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| backgroundType | string | Ні | `"color"` | Режим фону: `color` або `gradient` |
|
||||
| color | string | Ні | `"#ffffff"` | Шістнадцятковий колір фону (коли backgroundType має значення `color`) |
|
||||
| gradientColor1 | string | Ні | - | Перший шістнадцятковий колір градієнта |
|
||||
| gradientColor2 | string | Ні | - | Другий шістнадцятковий колір градієнта |
|
||||
| gradientAngle | integer | Ні | `180` | Кут градієнта у градусах (0-360) |
|
||||
| feather | integer | Ні | `0` | Радіус розмиття країв (0-20) |
|
||||
| format | string | Ні | `"png"` | Вихідний формат: `png` або `webp` |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/background-replace \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"backgroundType": "color", "color": "#2563eb", "feather": 2}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
Відстежуйте перебіг через SSE за адресою `GET /api/v1/jobs/{jobId}/progress`. Після завершення завдання потік SSE видає подію `completed` з URL для завантаження.
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Це інструмент на основі ШІ, який повертає `202 Accepted` і обробляється асинхронно. Підключіться до кінцевої точки SSE, щоб отримувати оновлення перебігу та кінцевий результат.
|
||||
- Потребує встановлення пакета функцій **background-removal**. Повертає `501`, якщо пакет недоступний.
|
||||
- Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
- Вихідний формат за замовчуванням PNG для збереження прозорості навколо об'єкта.
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
description: "Генерація штрихкодів у форматах Code 128, EAN-13, UPC-A, Code 39, ITF-14 та Data Matrix."
|
||||
i18n_source_hash: e84b1df40c7e
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 06e0f512914e
|
||||
---
|
||||
|
||||
# Генератор штрихкодів {#barcode-generator}
|
||||
|
||||
Генерація зображень штрихкодів із текстового введення. Підтримує формати Code 128, EAN-13, UPC-A, Code 39, ITF-14 та Data Matrix.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/barcode-generate`
|
||||
|
||||
Приймає тіло `application/json` (не multipart). Штрихкод генерується з наданого тексту, а не із завантаженого файлу.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | Типове значення | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| text | string | Так | - | Текст для кодування в штрихкоді (1-256 символів) |
|
||||
| type | string | Ні | `"code128"` | Формат штрихкоду: `code128`, `ean13`, `upca`, `code39`, `itf14`, `datamatrix` |
|
||||
| scale | integer | Ні | `3` | Коефіцієнт масштабу зображення (1-8) |
|
||||
| includeText | boolean | Ні | `true` | Чи відображати текст під штрихкодом |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/barcode-generate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"text": "5901234123457", "type": "ean13", "scale": 4}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/barcode.png",
|
||||
"originalSize": 0,
|
||||
"processedSize": 4520
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- На відміну від більшості інструментів, ця кінцева точка приймає тіло JSON, а не дані форми multipart, оскільки штрихкоди генеруються з тексту, а не із завантаженого файлу.
|
||||
- EAN-13 потребує рівно 12 або 13 цифр. UPC-A потребує рівно 11 або 12 цифр. Якщо контрольну цифру пропущено, вона обчислюється автоматично.
|
||||
- Code 128 є найгнучкішим форматом і підтримує повний набір символів ASCII.
|
||||
- Data Matrix створює двовимірний штрихкод, придатний для кодування довших рядків у компактному квадраті.
|
||||
@@ -0,0 +1,97 @@
|
||||
---
|
||||
description: "Сканування зображень на наявність QR-кодів, штрихкодів та двовимірних кодів з анотованим виводом."
|
||||
i18n_source_hash: 97c9d395c257
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: b74b7d7c8b5a
|
||||
---
|
||||
|
||||
# Зчитувач штрихкодів {#barcode-reader}
|
||||
|
||||
Сканування завантажених зображень на наявність усіх типів штрихкодів та QR-кодів. Повертає розшифрований текст, тип штрихкоду та дані про положення для кожного виявленого коду. Також генерує анотоване зображення з кольоровими обмежувальними рамками навколо виявлених кодів.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/barcode-read`
|
||||
|
||||
Приймає дані форми у форматі multipart із файлом зображення та необов'язковим полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | Типове значення | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| tryHarder | boolean | Ні | `true` | Увімкнути агресивний режим сканування для складніших для зчитування штрихкодів (повільніше, але ретельніше) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/barcode-read \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@receipt.jpg" \
|
||||
-F 'settings={"tryHarder": true}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"filename": "receipt.jpg",
|
||||
"barcodes": [
|
||||
{
|
||||
"type": "QRCode",
|
||||
"text": "https://example.com/product/123",
|
||||
"position": {
|
||||
"topLeft": { "x": 100, "y": 50 },
|
||||
"topRight": { "x": 250, "y": 50 },
|
||||
"bottomLeft": { "x": 100, "y": 200 },
|
||||
"bottomRight": { "x": 250, "y": 200 }
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "EAN-13",
|
||||
"text": "5901234123457",
|
||||
"position": {
|
||||
"topLeft": { "x": 50, "y": 400 },
|
||||
"topRight": { "x": 300, "y": 400 },
|
||||
"bottomLeft": { "x": 50, "y": 450 },
|
||||
"bottomRight": { "x": 300, "y": 450 }
|
||||
}
|
||||
}
|
||||
],
|
||||
"annotatedUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/annotated-receipt.png",
|
||||
"previewUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/annotated-receipt.png"
|
||||
}
|
||||
```
|
||||
|
||||
## Поля відповіді {#response-fields}
|
||||
|
||||
| Поле | Тип | Опис |
|
||||
|-------|------|-------------|
|
||||
| filename | string | Початкове ім'я файлу |
|
||||
| barcodes | array | Масив об'єктів виявлених штрихкодів |
|
||||
| annotatedUrl | string або null | URL для завантаження анотованого зображення (null, якщо штрихкодів не знайдено) |
|
||||
| previewUrl | string або null | Те саме, що annotatedUrl (для сумісності з попереднім переглядом фронтенду) |
|
||||
|
||||
### Об'єкт штрихкоду {#barcode-object}
|
||||
|
||||
| Поле | Тип | Опис |
|
||||
|-------|------|-------------|
|
||||
| type | string | Формат штрихкоду (QRCode, EAN-13, Code128, DataMatrix, PDF417 тощо) |
|
||||
| text | string | Розшифрований вміст штрихкоду |
|
||||
| position | object | Обмежувальна рамка з координатами topLeft, topRight, bottomLeft, bottomRight |
|
||||
|
||||
## Підтримувані типи штрихкодів {#supported-barcode-types}
|
||||
|
||||
Одновимірні штрихкоди: Code128, Code39, Code93, Codabar, EAN-8, EAN-13, ITF, UPC-A, UPC-E
|
||||
|
||||
Двовимірні штрихкоди: QRCode, DataMatrix, PDF417, Aztec, MaxiCode
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Використовує бібліотеку zxing-wasm для виявлення штрихкодів.
|
||||
- Анотоване зображення накладає кольорові багатокутні обмежувальні рамки та пронумеровані підписи на кожен виявлений штрихкод.
|
||||
- В одному зображенні можна виявити до 255 штрихкодів.
|
||||
- Якщо штрихкодів не знайдено, `barcodes` є порожнім масивом, а `annotatedUrl` дорівнює null.
|
||||
- Режим `tryHarder` виконує ретельніше сканування ціною часу обробки. Вимкніть його для швидшої обробки чистих, добре вирівняних штрихкодів.
|
||||
- Анотований вивід завжди у форматі PNG.
|
||||
- Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед скануванням.
|
||||
- Орієнтація EXIF застосовується автоматично перед обробкою.
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
description: "Перетворення простих знімків екрана на відшліфовані зображення з градієнтними фонами, рамками пристроїв, тінями та розмірами для соціальних мереж."
|
||||
i18n_source_hash: 8fd8a930a45e
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: b18161b63c04
|
||||
---
|
||||
|
||||
# Прикрашання знімка екрана {#beautify-screenshot}
|
||||
|
||||
Додавання градієнтних фонів, рамок пристроїв, тіней, водяних знаків та розмірів для соціальних мереж до знімків екрана. Ідеально для створення відшліфованих зображень для маркетингу продукту, соціальних мереж та документації.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/beautify`
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | Типове значення | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| backgroundType | string | Ні | `"linear-gradient"` | Тип фону: `solid`, `linear-gradient`, `radial-gradient`, `image`, `transparent` |
|
||||
| backgroundColor | string | Ні | `"#667eea"` | Суцільний колір фону (використовується, коли `backgroundType` має значення `solid`) |
|
||||
| gradientStops | array | Ні | `[{"color":"#667eea","position":0},{"color":"#764ba2","position":100}]` | Точки зупинки кольору градієнта (мінімум 2). Кожна точка має `color` (hex) та `position` (0-100). |
|
||||
| gradientAngle | number | Ні | 135 | Кут градієнта у градусах (0 до 360) |
|
||||
| padding | number | Ні | 64 | Відступ навколо зображення в пікселях (0 до 256) |
|
||||
| borderRadius | number | Ні | 12 | Радіус кутів на знімку екрана (0 до 64) |
|
||||
| shadowPreset | string | Ні | `"subtle"` | Пресет тіні: `none`, `subtle`, `medium`, `dramatic`, `custom` |
|
||||
| shadowBlur | number | Ні | 20 | Користувацький радіус розмиття тіні (0 до 100, використовується, коли `shadowPreset` має значення `custom`) |
|
||||
| shadowOffsetX | number | Ні | 0 | Користувацький горизонтальний зсув тіні (-50 до 50) |
|
||||
| shadowOffsetY | number | Ні | 10 | Користувацький вертикальний зсув тіні (-50 до 50) |
|
||||
| shadowColor | string | Ні | `"#000000"` | Користувацький колір тіні як hex |
|
||||
| shadowOpacity | number | Ні | 30 | Користувацька непрозорість тіні (0 до 100) |
|
||||
| frame | string | Ні | `"none"` | Рамка пристрою або вікна: `none`, `macos-light`, `macos-dark`, `windows-light`, `windows-dark`, `browser-light`, `browser-dark`, `iphone`, `iphone-dark`, `macbook`, `macbook-dark`, `ipad`, `ipad-dark` |
|
||||
| frameTitle | string | Ні | - | Текст заголовка, що відображається в рядках заголовка рамок вікон |
|
||||
| socialPreset | string | Ні | `"none"` | Зміна розміру до розмірів соціальних мереж: `none`, `twitter`, `linkedin`, `instagram-square`, `instagram-story`, `facebook`, `producthunt` |
|
||||
| watermarkText | string | Ні | - | Необов'язкове накладання тексту водяного знака |
|
||||
| watermarkPosition | string | Ні | `"bottom-right"` | Положення водяного знака: `top-left`, `top-right`, `bottom-left`, `bottom-right`, `center` |
|
||||
| watermarkOpacity | number | Ні | 50 | Непрозорість водяного знака (0 до 100) |
|
||||
| outputFormat | string | Ні | `"png"` | Вихідний формат: `png`, `jpeg`, `webp` |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/beautify \
|
||||
-F "file=@screenshot.png" \
|
||||
-F 'settings={"backgroundType":"linear-gradient","gradientStops":[{"color":"#667eea","position":0},{"color":"#764ba2","position":100}],"gradientAngle":135,"padding":64,"borderRadius":12,"shadowPreset":"medium","frame":"macos-dark","socialPreset":"twitter"}'
|
||||
```
|
||||
|
||||
### З фоновим зображенням {#with-background-image}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/beautify \
|
||||
-F "file=@screenshot.png" \
|
||||
-F "backgroundImage=@bg-texture.jpg" \
|
||||
-F 'settings={"backgroundType":"image","padding":80,"borderRadius":16,"shadowPreset":"dramatic"}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/screenshot.png",
|
||||
"originalSize": 234567,
|
||||
"processedSize": 567890
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Приймає два поля файлів: `file` (обов'язкове, основний знімок екрана) та `backgroundImage` (необов'язкове, використовується, коли `backgroundType` має значення `image`).
|
||||
- Підтримує вхідні формати HEIC, RAW, PSD та SVG (автоматично декодуються).
|
||||
- Пресети тіней зіставляються з конкретними значеннями:
|
||||
- `subtle`: розмиття 20, offsetY 4, непрозорість 20%
|
||||
- `medium`: розмиття 40, offsetY 10, непрозорість 35%
|
||||
- `dramatic`: розмиття 80, offsetY 20, непрозорість 50%
|
||||
- Пресети соціальних мереж змінюють розмір кінцевого виводу під цільові розміри в режимі `contain`:
|
||||
- `twitter`: 1600x900
|
||||
- `linkedin`: 1200x627
|
||||
- `instagram-square`: 1080x1080
|
||||
- `instagram-story`: 1080x1920
|
||||
- `facebook`: 1200x630
|
||||
- `producthunt`: 1270x760
|
||||
- Рамки пристроїв (`iphone`, `macbook`, `ipad`) застосовують апаратну окантовку навколо зображення та пропускають налаштування `borderRadius`.
|
||||
- Коли потрібна прозорість (тінь, радіус кутів, рамки пристроїв або прозорий фон), вивід примусово встановлюється у PNG, навіть якщо обрано `jpeg`.
|
||||
- Фонові зображення не підтримуються в режимі конвеєра/пакетної обробки.
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "Розмиття фону зі збереженням різкості об'єкта за допомогою ШІ."
|
||||
i18n_source_hash: 9073f10e6e9d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 036810c3d622
|
||||
---
|
||||
|
||||
# Розмиття фону {#blur-background}
|
||||
|
||||
Розмиття фону зображення зі збереженням різкості об'єкта. Модель ШІ ізолює об'єкт, застосовує розмиття до початкового фону та компонує різкий об'єкт зверху.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/blur-background`
|
||||
|
||||
Приймає дані форми у форматі multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | Типове значення | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| intensity | integer | Ні | `50` | Інтенсивність розмиття (1-100) |
|
||||
| feather | integer | Ні | `0` | Радіус розмиття країв (0-20) |
|
||||
| format | string | Ні | `"png"` | Вихідний формат: `png` або `webp` |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/blur-background \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"intensity": 75, "feather": 3}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
Відстежуйте перебіг через SSE за адресою `GET /api/v1/jobs/{jobId}/progress`. Після завершення завдання потік SSE видає подію `completed` з URL для завантаження.
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Це інструмент на основі ШІ, який повертає `202 Accepted` і обробляється асинхронно. Підключіться до кінцевої точки SSE, щоб отримувати оновлення перебігу та кінцевий результат.
|
||||
- Потребує встановлення пакета функцій **background-removal**. Повертає `501`, якщо пакет недоступний.
|
||||
- Вищі значення інтенсивності дають сильніший ефект розмиття. Значення понад 80 створюють виражене боке-подібне відокремлення.
|
||||
- Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
description: "Автоматичне виявлення та розмиття облич на зображеннях за допомогою ШІ-виявлення облич для конфіденційності та GDPR-сумісної анонімізації."
|
||||
i18n_source_hash: fb861c12aea5
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: bd07b81e5727
|
||||
---
|
||||
|
||||
# Розмиття облич / PII {#face-pii-blur}
|
||||
|
||||
Автоматичне виявлення та розмиття облич на зображеннях за допомогою виявлення облич на основі ШІ (MediaPipe).
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/blur-faces`
|
||||
|
||||
**Обробка:** Асинхронна (повертає 202, опитуйте `/api/v1/jobs/{jobId}/progress` щодо статусу через SSE)
|
||||
|
||||
**Пакет моделі:** `face-detection` (200-300 МБ)
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | Типове значення | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Так | - | Файл зображення (multipart) |
|
||||
| blurRadius | number | Ні | `30` | Радіус розмиття, застосований до виявлених облич (1-100) |
|
||||
| sensitivity | number | Ні | `0.5` | Чутливість виявлення облич (0-1). Нижчі значення виявляють менше облич з вищою впевненістю |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/blur-faces \
|
||||
-F "file=@group-photo.jpg" \
|
||||
-F 'settings={"blurRadius":40,"sensitivity":0.3}'
|
||||
```
|
||||
|
||||
## Відповідь {#response}
|
||||
|
||||
### Початкова відповідь (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Перебіг (SSE за адресою `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Detecting faces...","percent":40}
|
||||
```
|
||||
|
||||
### Кінцевий результат (через SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/group-photo_blurred.jpg",
|
||||
"originalSize": 450000,
|
||||
"processedSize": 420000,
|
||||
"facesDetected": 3,
|
||||
"faces": [
|
||||
{"x": 100, "y": 50, "w": 80, "h": 80},
|
||||
{"x": 300, "y": 60, "w": 75, "h": 75},
|
||||
{"x": 500, "y": 55, "w": 85, "h": 85}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Обличчя не виявлено {#no-faces-detected}
|
||||
|
||||
Якщо обличчя не знайдено, результат містить попередження:
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"facesDetected": 0,
|
||||
"warning": "No faces detected in this image. Try increasing detection sensitivity."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Потребує встановлення пакета моделі `face-detection` (200-300 МБ).
|
||||
- Вихідний формат автоматично відповідає вхідному.
|
||||
- Масив `faces` містить координати обмежувальної рамки (x, y, ширина, висота) для кожного виявленого обличчя.
|
||||
- Збільшіть `sensitivity` (ближче до 1.0), щоб виявити більше облич, зокрема частково закриті.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
description: "Додавання рамок, відступів, заокруглених кутів та падаючих тіней до зображень у передбачуваному, контрольованому порядку."
|
||||
i18n_source_hash: 8845150736a9
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 42105f7bbe49
|
||||
---
|
||||
|
||||
# Рамка та обрамлення {#border-frame}
|
||||
|
||||
Додавання рамок, відступів, заокруглених кутів та падаючих тіней до зображень. Інструмент застосовує ефекти в порядку: відступ, рамка, радіус кутів, потім тінь.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/border`
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | Типове значення | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| borderWidth | number | Ні | 10 | Товщина рамки в пікселях (0 до 2000) |
|
||||
| borderColor | string | Ні | `"#000000"` | Колір рамки як hex (наприклад, `#FF0000`) |
|
||||
| padding | number | Ні | 0 | Внутрішній відступ між зображенням та рамкою в пікселях (0 до 200) |
|
||||
| paddingColor | string | Ні | `"#FFFFFF"` | Колір заповнення відступу як hex |
|
||||
| cornerRadius | number | Ні | 0 | Радіус кутів у пікселях (0 до 2000) |
|
||||
| shadow | boolean | Ні | `false` | Чи додавати падаючу тінь |
|
||||
| shadowBlur | number | Ні | 15 | Радіус розмиття тіні (1 до 200) |
|
||||
| shadowOffsetX | number | Ні | 0 | Горизонтальний зсув тіні (-50 до 50) |
|
||||
| shadowOffsetY | number | Ні | 5 | Вертикальний зсув тіні (-50 до 50) |
|
||||
| shadowColor | string | Ні | `"#000000"` | Колір тіні як hex |
|
||||
| shadowOpacity | number | Ні | 40 | Відсоток непрозорості тіні (0 до 100) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/border \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"borderWidth":20,"borderColor":"#333333","cornerRadius":16,"shadow":true,"shadowBlur":25,"shadowOpacity":50}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.png",
|
||||
"originalSize": 456789,
|
||||
"processedSize": 523456
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Використовує стандартну фабрику `createToolRoute`. Приймає один файл зображення через завантаження multipart.
|
||||
- Підтримує вхідні формати HEIC, RAW, PSD та SVG (автоматично декодуються).
|
||||
- Порядок обробки: спочатку додається відступ, потім рамка обгортає навколо, потім застосовується радіус кутів, потім компонується тінь.
|
||||
- Коли `cornerRadius` або `shadow` увімкнено, вивід примусово встановлюється у PNG (незалежно від вхідного формату) для збереження прозорості. Формати, що підтримують альфа-канал (PNG, WebP, AVIF), зберігають свій початковий формат.
|
||||
- Тінь враховує форму: вона слідує за заокругленими кутами, а не створює прямокутну тінь.
|
||||
- Встановлення `borderWidth` на 0 та використання лише `cornerRadius` + `shadow` створює безрамковий заокруглений ефект тіні.
|
||||
@@ -0,0 +1,75 @@
|
||||
---
|
||||
description: "Перейменування кількох файлів за шаблоном та завантаження у вигляді ZIP."
|
||||
i18n_source_hash: 2776dcc2f71c
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 5673adbcb720
|
||||
---
|
||||
|
||||
# Масове перейменування {#bulk-rename}
|
||||
|
||||
Перейменування кількох файлів за шаблоном із заповнювачами для індексу, доповненого індексу та початкового імені файлу. Повертає архів ZIP з усіма перейменованими файлами.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/bulk-rename`
|
||||
|
||||
Приймає дані форми у форматі multipart із кількома файлами та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | Типове значення | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| pattern | string | Ні | `"image-{{index}}"` | Шаблон іменування із заповнювачами (макс. 1000 символів) |
|
||||
| startIndex | number | Ні | `1` | Початковий номер індексу |
|
||||
|
||||
### Заповнювачі шаблону {#pattern-placeholders}
|
||||
|
||||
| Заповнювач | Опис | Приклад |
|
||||
|-------------|-------------|---------|
|
||||
| `{{index}}` | Послідовний номер, починаючи з `startIndex` | `1`, `2`, `3` |
|
||||
| `{{padded}}` | Послідовний номер, доповнений нулями | `01`, `02`, `03` |
|
||||
| `{{original}}` | Початкове ім'я файлу без розширення | `photo`, `IMG_001` |
|
||||
|
||||
Початкове розширення файлу завжди зберігається.
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/bulk-rename \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo1.jpg" \
|
||||
-F "file=@photo2.jpg" \
|
||||
-F "file=@photo3.jpg" \
|
||||
-F 'settings={"pattern": "vacation-{{padded}}", "startIndex": 1}'
|
||||
```
|
||||
|
||||
Це дає: `vacation-1.jpg`, `vacation-2.jpg`, `vacation-3.jpg`
|
||||
|
||||
Використання початкового імені файлу:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/bulk-rename \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@IMG_001.jpg" \
|
||||
-F "file=@IMG_002.jpg" \
|
||||
-F 'settings={"pattern": "2024-trip-{{original}}-{{index}}"}'
|
||||
```
|
||||
|
||||
Це дає: `2024-trip-IMG_001-1.jpg`, `2024-trip-IMG_002-2.jpg`
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
Відповідь є файлом ZIP, що передається безпосередньо (не відповіддю JSON). Заголовки відповіді:
|
||||
|
||||
```
|
||||
Content-Type: application/zip
|
||||
Content-Disposition: attachment; filename="renamed-a1b2c3d4.zip"
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Цей інструмент не обробляє зображення. Він лише перейменовує файли та пакує їх в архів ZIP.
|
||||
- Ширина доповнення нулями для `{{padded}}` визначається автоматично на основі загальної кількості файлів (наприклад, 100 файлів використовуватимуть 3-значне доповнення: `001`, `002` тощо).
|
||||
- Розширення файлів зберігаються з початкових імен файлів.
|
||||
- Імена файлів очищаються від небезпечних символів.
|
||||
- Потрібно надати принаймні один файл.
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
description: "Обрізання зображення до центрованого кола з прозорими кутами."
|
||||
i18n_source_hash: 06c50ccd96b2
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 7d99593a8739
|
||||
---
|
||||
|
||||
# Обрізання по колу {#circle-crop}
|
||||
|
||||
Обрізання зображення до центрованого кола з прозорими кутами. Підтримує регульований масштаб, зсув, рамку та вихідний розмір.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/circle-crop`
|
||||
|
||||
Приймає дані форми у форматі multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | Типове значення | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| zoom | number | Ні | `1` | Коефіцієнт масштабу (1-5); вищі значення обрізають щільніше |
|
||||
| offsetX | number | Ні | `0.5` | Горизонтальне положення центру (0-1) |
|
||||
| offsetY | number | Ні | `0.5` | Вертикальне положення центру (0-1) |
|
||||
| borderWidth | integer | Ні | `0` | Ширина рамки в пікселях (0-200) |
|
||||
| borderColor | string | Ні | `"#ffffff"` | Шістнадцятковий колір рамки |
|
||||
| background | string | Ні | `"transparent"` | Заповнення кутів: `"transparent"` або шістнадцятковий колір |
|
||||
| outputSize | integer | Ні | - | Кінцевий квадратний розмір у пікселях (16-4096) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/circle-crop \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"zoom": 1.2, "borderWidth": 4, "borderColor": "#333333"}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.png",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 185000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Вихідний формат завжди PNG для збереження прозорих кутів (якщо `background` не встановлено на суцільний колір).
|
||||
- Коло вписується в коротший вимір зображення. Використовуйте `zoom` для щільнішого обрізання та `offsetX`/`offsetY` для зсуву видимої області.
|
||||
- Коли надано `outputSize`, результат змінюється до цього квадратного розміру після обрізання.
|
||||
- Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
@@ -0,0 +1,92 @@
|
||||
---
|
||||
description: "Об'єднуйте кілька зображень у сіткові колажі з понад 25 шаблонами, регульованими проміжками та кутами, а також панорамуванням і масштабуванням для кожної комірки."
|
||||
i18n_source_hash: 96f2055717df
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 263d6a539193
|
||||
---
|
||||
|
||||
# Collage / Grid {#collage-grid}
|
||||
|
||||
Об'єднуйте кілька зображень у красиві сіткові колажі з понад 25 шаблонами. Підтримуються макети з 2-9 зображень із налаштовуваними проміжком, радіусом кутів, кольором фону та панорамуванням/масштабуванням для кожної комірки.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/collage`
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| templateId | string | Yes | - | ID макета шаблону (напр. `2-h-equal`, `3-left-large`, `4-grid`, `9-grid`) |
|
||||
| cells | array | No | - | Масив налаштувань для кожної комірки з `imageIndex`, `panX`, `panY`, `zoom`, `objectFit` |
|
||||
| cells[].imageIndex | integer | Yes | - | Індекс зображення для розміщення в цій комірці (відлік з 0) |
|
||||
| cells[].panX | number | No | 0 | Горизонтальний зсув панорамування (від -100 до 100) |
|
||||
| cells[].panY | number | No | 0 | Вертикальний зсув панорамування (від -100 до 100) |
|
||||
| cells[].zoom | number | No | 1 | Рівень масштабування (від 1 до 10) |
|
||||
| cells[].objectFit | string | No | `"cover"` | Як зображення заповнює комірку: `cover` або `contain` |
|
||||
| gap | number | No | 8 | Проміжок між комірками в пікселях (від 0 до 500) |
|
||||
| cornerRadius | number | No | 0 | Радіус кутів для кожної комірки в пікселях (від 0 до 500) |
|
||||
| backgroundColor | string | No | `"#FFFFFF"` | Колір фону як hex або `"transparent"` |
|
||||
| aspectRatio | string | No | `"free"` | Співвідношення сторін полотна: `free`, `1:1`, `4:3`, `3:2`, `16:9`, `9:16`, `4:5` |
|
||||
| outputFormat | string | No | `"png"` | Вихідний формат: `png`, `jpeg`, `webp`, `avif`, `jxl` |
|
||||
| quality | number | No | 90 | Якість вихідного файлу (від 1 до 100) |
|
||||
|
||||
## Available Templates {#available-templates}
|
||||
|
||||
| Template ID | Images | Layout |
|
||||
|-------------|--------|--------|
|
||||
| `2-h-equal` | 2 | Два однакові стовпці |
|
||||
| `2-v-equal` | 2 | Два однакові рядки |
|
||||
| `2-h-left-large` | 2 | Ліворуч 2/3, праворуч 1/3 |
|
||||
| `2-h-right-large` | 2 | Ліворуч 1/3, праворуч 2/3 |
|
||||
| `3-left-large` | 3 | Велике ліворуч, два стоси праворуч |
|
||||
| `3-right-large` | 3 | Два стоси ліворуч, велике праворуч |
|
||||
| `3-top-large` | 3 | Велике зверху, два стовпці знизу |
|
||||
| `3-h-equal` | 3 | Три однакові стовпці |
|
||||
| `3-v-equal` | 3 | Три однакові рядки |
|
||||
| `4-grid` | 4 | Сітка 2x2 |
|
||||
| `4-left-large` | 4 | Велике ліворуч, три стоси праворуч |
|
||||
| `4-top-large` | 4 | Велике зверху, три стовпці знизу |
|
||||
| `4-bottom-large` | 4 | Три стовпці зверху, велике знизу |
|
||||
| `5-top2-bottom3` | 5 | Два зверху, три знизу |
|
||||
| `5-top3-bottom2` | 5 | Три зверху, два знизу |
|
||||
| `5-left-large` | 5 | Велике ліворуч, чотири стоси праворуч |
|
||||
| `5-center-large` | 5 | Велике по центру, чотири кути |
|
||||
| `6-grid-2x3` | 6 | 2 стовпці x 3 рядки |
|
||||
| `6-grid-3x2` | 6 | 3 стовпці x 2 рядки |
|
||||
| `6-top-large` | 6 | Велике зверху, п'ять стовпців знизу |
|
||||
| `7-mosaic` | 7 | Мозаїчний макет |
|
||||
| `8-mosaic` | 8 | Мозаїчний макет |
|
||||
| `9-grid` | 9 | Сітка 3x3 |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/collage \
|
||||
-F "file=@photo1.jpg" \
|
||||
-F "file=@photo2.jpg" \
|
||||
-F "file=@photo3.jpg" \
|
||||
-F "file=@photo4.jpg" \
|
||||
-F 'settings={"templateId":"4-grid","gap":12,"cornerRadius":8,"backgroundColor":"#F5F5F5","outputFormat":"png","quality":90}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/collage.png",
|
||||
"originalSize": 2456789,
|
||||
"processedSize": 1823456
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Завантажте кілька файлів зображень у запиті multipart. Зображення призначаються коміркам шаблону в порядку завантаження.
|
||||
- Якщо завантажено більше зображень, ніж підтримує шаблон, зайві зображення ігноруються.
|
||||
- Підтримує вхідні формати HEIC, RAW, PSD та SVG (декодуються автоматично).
|
||||
- Базовий розмір полотна становить 2400px по найдовшій стороні, масштабований за обраним співвідношенням сторін.
|
||||
- Коли `aspectRatio` дорівнює `"free"`, полотно за замовчуванням має співвідношення 4:3 (2400x1800).
|
||||
- Значення `panX`/`panY` для кожної комірки зсувають вікно обрізки в межах комірки. Значення 100 переміщує повністю до одного краю, -100 до іншого.
|
||||
- Колір фону `"transparent"` зберігається лише з вихідними форматами `png`, `webp` або `avif`.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "Симулюйте, як зображення виглядають для людей із різними типами порушення колірного зору."
|
||||
i18n_source_hash: 0b537628ba79
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 73be530aa7b5
|
||||
---
|
||||
|
||||
# Color Blindness Simulation {#color-blindness-simulation}
|
||||
|
||||
Симулюйте порушення колірного зору (CVD), щоб побачити, як зображення виглядають для людей із різними типами дальтонізму. Корисно для тестування доступності дизайнів, діаграм та інтерфейсів.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/color-blindness`
|
||||
|
||||
Приймає дані форми multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| simulationType | string | No | `"deuteranomaly"` | Тип порушення колірного зору для симуляції |
|
||||
|
||||
### Simulation Types {#simulation-types}
|
||||
|
||||
| Value | Condition | Description |
|
||||
|-------|-----------|-------------|
|
||||
| `protanopia` | Червоносліпота | Повна відсутність червоних колбочок |
|
||||
| `deuteranopia` | Зеленосліпота | Повна відсутність зелених колбочок |
|
||||
| `tritanopia` | Синьосліпота | Повна відсутність синіх колбочок |
|
||||
| `protanomaly` | Ослаблення червоного | Знижена чутливість червоних колбочок |
|
||||
| `deuteranomaly` | Ослаблення зеленого | Знижена чутливість зелених колбочок (найпоширеніше) |
|
||||
| `tritanomaly` | Ослаблення синього | Знижена чутливість синіх колбочок |
|
||||
| `achromatopsia` | Повний дальтонізм | Повна відсутність колірного зору |
|
||||
| `blueConeMonochromacy` | Лише синій конус | Функціонують лише сині колбочки |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/color-blindness \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@design.png" \
|
||||
-F 'settings={"simulationType": "deuteranopia"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/design.png",
|
||||
"originalSize": 1850000,
|
||||
"processedSize": 1820000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Дейтераномалія (ослаблення зеленого) використовується за замовчуванням, оскільки це найпоширеніша форма порушення колірного зору, що вражає приблизно 6% чоловіків.
|
||||
- Симуляція використовує матриці колірного перетворення, які моделюють, як знижена або відсутня чутливість колбочок-фоторецепторів змінює сприйняття кольорів.
|
||||
- Цей інструмент неруйнівний і створює лише попередній перегляд. Він не змінює оригінальне зображення для доступності.
|
||||
- Вихідний формат збігається з вхідним. Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
@@ -0,0 +1,75 @@
|
||||
---
|
||||
description: "Витягуйте домінантні кольори із зображення у вигляді колірної палітри."
|
||||
i18n_source_hash: 65ab22dd75a9
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 10405a729af0
|
||||
---
|
||||
|
||||
# Color Palette {#color-palette}
|
||||
|
||||
Витягуйте домінантні кольори із зображення та повертайте їх у вигляді hex-значень кольорів. Використовує квантований частотний аналіз для визначення найпомітніших і візуально відмінних кольорів.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/color-palette`
|
||||
|
||||
Приймає дані форми multipart із файлом зображення та необов'язковим полем JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| count | integer | No | `8` | Кількість кольорів для витягування (2-16) |
|
||||
| format | string | No | `"hex"` | Формат кольору: `hex`, `rgb`, `hsl` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/color-palette \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"count": 6, "format": "hex"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"filename": "photo.jpg",
|
||||
"colors": [
|
||||
"#304080",
|
||||
"#e0a060",
|
||||
"#f0f0f0",
|
||||
"#203020",
|
||||
"#a0c0e0",
|
||||
"#806040"
|
||||
],
|
||||
"hex": [
|
||||
"#304080",
|
||||
"#e0a060",
|
||||
"#f0f0f0",
|
||||
"#203020",
|
||||
"#a0c0e0",
|
||||
"#806040"
|
||||
],
|
||||
"count": 6
|
||||
}
|
||||
```
|
||||
|
||||
## Response Fields {#response-fields}
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| filename | string | Очищена назва файлу |
|
||||
| colors | array | Масив рядків кольорів у запитаному форматі, впорядкований за домінантністю (найчастіший першим) |
|
||||
| hex | array | Масив hex-рядків кольорів (завжди hex, незалежно від налаштування `format`) |
|
||||
| count | number | Кількість витягнутих кольорів |
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Повертає до `count` домінантних кольорів (за замовчуванням 8, діапазон 2-16), відсортованих за частотою (найпоширеніший першим).
|
||||
- Зображення внутрішньо зменшується до 100x100 пікселів для аналізу, тож палітра відображає загальний розподіл кольорів, а не дрібні деталі.
|
||||
- Кольори витягуються за допомогою квантування методом медіанного розрізу, який рекурсивно розділяє групи пікселів уздовж каналу з найширшим діапазоном.
|
||||
- Альфа-канал видаляється перед аналізом, тож прозорі області не враховуються.
|
||||
- Це кінцева точка лише для читання. Вона не створює вихідний файл для завантаження або `jobId`.
|
||||
- Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед аналізом.
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
description: "Автоматично розфарбовуйте чорно-білі або відтінки сірого фотографії за допомогою AI-моделі DDColor."
|
||||
i18n_source_hash: 688aa3abbdae
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 522bf26fedef
|
||||
---
|
||||
|
||||
# AI Colorization {#ai-colorization}
|
||||
|
||||
Перетворюйте чорно-білі фотографії або фотографії у відтінках сірого на повнокольорові за допомогою AI (модель DDColor із резервним варіантом OpenCV DNN).
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/colorize`
|
||||
|
||||
**Processing:** Асинхронна (повертає 202, опитуйте `/api/v1/jobs/{jobId}/progress` для отримання статусу через SSE)
|
||||
|
||||
**Model bundle:** `object-eraser-colorize` (1-2 GB)
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Yes | - | Файл зображення (multipart) |
|
||||
| intensity | number | No | `1.0` | Інтенсивність кольору (0-1). Нижчі значення дають більш ненав'язливе розфарбовування |
|
||||
| model | string | No | `"auto"` | Модель для використання: `auto`, `ddcolor`, `opencv` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/colorize \
|
||||
-F "file=@old-bw-photo.jpg" \
|
||||
-F 'settings={"intensity":0.9,"model":"auto"}'
|
||||
```
|
||||
|
||||
## Response {#response}
|
||||
|
||||
### Initial Response (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Progress (SSE at `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Colorizing...","percent":55}
|
||||
```
|
||||
|
||||
### Final Result (via SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/old-bw-photo_colorized.jpg",
|
||||
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
|
||||
"originalSize": 180000,
|
||||
"processedSize": 210000,
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"method": "ddcolor"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Потрібно встановити пакет моделі `object-eraser-colorize` (1-2 GB).
|
||||
- DDColor дає результати вищої якості, але працює повільніше; OpenCV DNN швидший із дещо нижчою якістю. `auto` використовує DDColor за наявності з резервним варіантом OpenCV.
|
||||
- Параметр `intensity` змішує оригінал у відтінках сірого з результатом розфарбовування AI. Використовуйте 1.0 для повного кольору, нижчі значення для частково знебарвленого вінтажного вигляду.
|
||||
- Вихідний формат автоматично збігається з вхідним.
|
||||
- Для вихідних форматів, які не можна переглянути в браузері, поряд з основним виводом генерується попередній перегляд WebP.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
description: "Порівнюйте два зображення поруч з візуалізацією попіксельної різниці та оцінкою подібності."
|
||||
i18n_source_hash: cc0a02bd75c6
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: fcb1ee65050b
|
||||
---
|
||||
|
||||
# Image Compare {#image-compare}
|
||||
|
||||
Завантажте два зображення, щоб обчислити мапу попіксельної різниці та числовий відсоток подібності. Результатом є зображення різниці, що виділяє змінені області червоним кольором.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/compare`
|
||||
|
||||
Приймає дані форми multipart із **двома** файлами зображень. Поле налаштувань не потрібне.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
Цей інструмент не має налаштовуваних параметрів. Завантажте рівно два файли зображень.
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| file (first) | file | Yes | Перше зображення |
|
||||
| file (second) | file | Yes | Друге зображення |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/compare \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@original.jpg" \
|
||||
-F "file=@modified.jpg"
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"similarity": 94.52,
|
||||
"dimensions": { "width": 1920, "height": 1080 },
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/diff.png",
|
||||
"originalSize": 4900000,
|
||||
"processedSize": 280000
|
||||
}
|
||||
```
|
||||
|
||||
## Response Fields {#response-fields}
|
||||
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| jobId | string | Ідентифікатор завдання для завантаження зображення різниці |
|
||||
| similarity | number | Відсоток подібності між двома зображеннями (від 0 до 100) |
|
||||
| dimensions | object | Ширина та висота, використані для порівняння |
|
||||
| downloadUrl | string | URL для завантаження згенерованого зображення різниці |
|
||||
| originalSize | number | Сумарний розмір обох вхідних зображень у байтах |
|
||||
| processedSize | number | Розмір вихідного зображення різниці в байтах |
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Обидва зображення масштабуються до однакових розмірів (максимум по кожній осі) перед порівнянням.
|
||||
- Зображення різниці виділяє відмінності червоним кольором із непрозорістю, пропорційною величині зміни. Ідентичні або майже ідентичні пікселі (різниця < 10) показуються як напівпрозорі версії оригіналу.
|
||||
- Подібність обчислюється як обернена величина до середньої попіксельної різниці за всіма пікселями, виражена у відсотках.
|
||||
- Подібність 100% означає, що зображення попіксельно ідентичні (за роздільної здатності порівняння).
|
||||
- Вивід різниці завжди у форматі PNG незалежно від вхідних форматів.
|
||||
- Обидва зображення перевіряються та декодуються (підтримуються HEIC, RAW, PSD, SVG) перед порівнянням.
|
||||
- Орієнтація EXIF автоматично застосовується до обох зображень перед обробкою.
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
description: "Накладайте зображення шарами з позицією, непрозорістю та режимами накладання для композиції."
|
||||
i18n_source_hash: c5d09eb13fde
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 0405dfb3b316
|
||||
---
|
||||
|
||||
# Image Composition {#image-composition}
|
||||
|
||||
Накладайте зображення-накладку поверх базового зображення з налаштовуваними позицією, непрозорістю та режимом накладання. Корисно для композиції логотипів, графіки або об'єднання кількох зображень.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/compose`
|
||||
|
||||
Приймає дані форми multipart із **двома** файлами зображень та полем JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| x | number | No | `0` | Горизонтальний зсув накладки від верхнього лівого кута в пікселях (мін. 0) |
|
||||
| y | number | No | `0` | Вертикальний зсув накладки від верхнього лівого кута в пікселях (мін. 0) |
|
||||
| opacity | number | No | `100` | Відсоток непрозорості накладки (від 0 до 100) |
|
||||
| blendMode | string | No | `"over"` | Режим накладання для композиції |
|
||||
|
||||
### Blend Modes {#blend-modes}
|
||||
|
||||
| Value | Description |
|
||||
|-------|-------------|
|
||||
| `over` | Звичайна накладка (за замовчуванням) |
|
||||
| `multiply` | Затемнення множенням значень пікселів |
|
||||
| `screen` | Освітлення інвертуванням, множенням та повторним інвертуванням |
|
||||
| `overlay` | Поєднує множення та освітлення залежно від яскравості основи |
|
||||
| `darken` | Зберігає темніший піксель із кожного шару |
|
||||
| `lighten` | Зберігає світліший піксель із кожного шару |
|
||||
| `hard-light` | Накладка з сильним контрастом |
|
||||
| `soft-light` | Накладка з м'яким контрастом |
|
||||
| `difference` | Абсолютна різниця між шарами |
|
||||
| `exclusion` | Схоже на різницю, але з нижчим контрастом |
|
||||
|
||||
### File Fields {#file-fields}
|
||||
|
||||
| Field Name | Required | Description |
|
||||
|------------|----------|-------------|
|
||||
| file | Yes | Базове/фонове зображення |
|
||||
| overlay | Yes | Зображення-накладка/передній план |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/compose \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@background.jpg" \
|
||||
-F "overlay=@graphic.png" \
|
||||
-F 'settings={"x": 100, "y": 50, "opacity": 80, "blendMode": "over"}'
|
||||
```
|
||||
|
||||
Використання режиму накладання множенням:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/compose \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F "overlay=@texture.jpg" \
|
||||
-F 'settings={"x": 0, "y": 0, "opacity": 50, "blendMode": "multiply"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/background.jpg",
|
||||
"originalSize": 3200000,
|
||||
"processedSize": 3450000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Обидва зображення перевіряються та декодуються (підтримуються HEIC, RAW, PSD, SVG) перед композицією.
|
||||
- Накладка розміщується за точними піксельними координатами, вказаними в `x` та `y`. Вона не масштабується для підгонки.
|
||||
- Якщо непрозорість менша за 100, до накладки застосовується альфа-маска перед накладанням.
|
||||
- Накладка може виходити за межі базового зображення (вона буде обрізана).
|
||||
- Орієнтація EXIF автоматично застосовується до обох зображень перед обробкою.
|
||||
- Розміри виводу збігаються з розмірами базового зображення.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "Зменшуйте розмір файлу зображення за рівнем якості або до цільового розміру файлу."
|
||||
i18n_source_hash: af4685da7e64
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 18cb8eab28be
|
||||
---
|
||||
|
||||
# Compress {#compress}
|
||||
|
||||
Зменшуйте розмір файлу зображення, вказавши рівень якості або цільовий розмір файлу в кілобайтах. Інструмент використовує ітеративний двійковий пошук для точного досягнення цільового розміру.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/compress`
|
||||
|
||||
Приймає дані форми multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| mode | string | No | `"quality"` | Режим стиснення: `quality` або `targetSize` |
|
||||
| quality | number | No | `80` | Рівень якості (1-100). Використовується, коли режим `quality`. |
|
||||
| targetSizeKb | number | No | - | Цільовий розмір файлу в кілобайтах. Використовується, коли режим `targetSize`. |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
Стиснути до якості 60:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/compress \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"mode": "quality", "quality": 60}'
|
||||
```
|
||||
|
||||
Стиснути до цільового розміру 200 KB:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/compress \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"mode": "targetSize", "targetSizeKb": 200}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 204800
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- У режимі `quality` нижчі значення дають менші файли з більшою кількістю артефактів стиснення. Значення 80 є хорошим за замовчуванням для веб-використання.
|
||||
- У режимі `targetSize` рушій виконує ітеративне стиснення, щоб максимально наблизитися до цільового розміру, не перевищуючи його.
|
||||
- Вихідний формат збігається з вхідним. Стиснення застосовується до власного кодування формату (напр. якість JPEG для файлів JPEG, якість WebP для файлів WebP).
|
||||
- Якщо якість за замовчуванням (80) прийнятна, ви можете повністю опустити параметр `quality`.
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
description: "Зміна розміру методом швів, що додає або видаляє пікселі вздовж малозначущих шляхів для збереження ключового вмісту та облич."
|
||||
i18n_source_hash: f383b28ab62a
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 69e88590877c
|
||||
---
|
||||
|
||||
# Content-Aware Resize {#content-aware-resize}
|
||||
|
||||
Зміна розміру методом швів, що інтелектуально видаляє або додає пікселі вздовж шляхів найменшої візуальної значущості, зберігаючи важливий вміст і за бажанням захищаючи обличчя.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/content-aware-resize`
|
||||
|
||||
**Processing:** Синхронна (повертає результат напряму)
|
||||
|
||||
**Model bundle:** Не потрібен для базової роботи. Захист облич використовує пакет `face-detection` (200-300 MB), якщо увімкнено.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Yes | - | Файл зображення (multipart) |
|
||||
| width | number | No | - | Цільова ширина в пікселях |
|
||||
| height | number | No | - | Цільова висота в пікселях |
|
||||
| protectFaces | boolean | No | `false` | Виявляти та захищати обличчя від видалення швів |
|
||||
| blurRadius | number | No | `4` | Радіус попереднього розмиття для розрахунку енергії (0-20) |
|
||||
| sobelThreshold | number | No | `2` | Поріг виявлення країв за методом Собеля (1-20). Вищі значення роблять алгоритм агресивнішим |
|
||||
| square | boolean | No | `false` | Змінити розмір до квадрата (використовує меншу сторону) |
|
||||
|
||||
Потрібно вказати принаймні один із `width`, `height` або `square`.
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/content-aware-resize \
|
||||
-F "file=@landscape.jpg" \
|
||||
-F 'settings={"width":800,"protectFaces":true}'
|
||||
```
|
||||
|
||||
## Response (200 OK) {#response-200-ok}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/landscape_seam.png",
|
||||
"originalSize": 450000,
|
||||
"processedSize": 380000,
|
||||
"width": 800,
|
||||
"height": 600
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Цей власний маршрут наразі повертає синхронну відповідь 200.
|
||||
- Використовує бібліотеку швів `caire` для зміни розміру з урахуванням вмісту.
|
||||
- Лише зменшує розміри (видаляє шви). Не може розширити зображення понад його оригінальний розмір.
|
||||
- Параметр `protectFaces` використовує AI-виявлення облич, щоб позначити області облич як високоенергетичні, запобігаючи проходженню швів через обличчя.
|
||||
- `blurRadius` керує згладжуванням перед розрахунком мапи енергії. Вищі значення роблять мапу енергії одноріднішою, що може допомогти із зашумленими зображеннями.
|
||||
- `sobelThreshold` впливає на те, наскільки агресивно виявляються краї. Нижчі значення зберігають більше тонких країв.
|
||||
- Вивід завжди у форматі PNG.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
description: "Конвертуйте зображення між форматами, включно із сучасними форматами, як-от AVIF, JXL та HEIC."
|
||||
i18n_source_hash: 562f8270e8c3
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: cc673ec4e84d
|
||||
---
|
||||
|
||||
# Convert {#convert}
|
||||
|
||||
Конвертуйте зображення між форматами. Підтримує поширені веб-формати, а також спеціалізовані формати, як-от HEIC, JXL, BMP, ICO, JP2, QOI та PSD.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/convert`
|
||||
|
||||
Приймає дані форми multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | Yes | - | Цільовий формат: `jpg`, `png`, `webp`, `avif`, `tiff`, `gif`, `heic`, `heif`, `jxl`, `bmp`, `ico`, `jp2`, `qoi`, `psd`, `ppm`, `eps`, `tga` |
|
||||
| quality | number | No | - | Якість вихідного файлу (1-100). Застосовується до форматів зі втратами, як-от jpg, webp, avif, heic. |
|
||||
|
||||
## Supported Output Formats {#supported-output-formats}
|
||||
|
||||
| Format | Type | Notes |
|
||||
|--------|------|-------|
|
||||
| jpg | Lossy | JPEG, найкраща сумісність |
|
||||
| png | Lossless | Підтримує прозорість |
|
||||
| webp | Both | Сучасний веб-формат, хороше стиснення |
|
||||
| avif | Lossy | Формат нового покоління, чудове стиснення |
|
||||
| tiff | Both | Робочі процеси друку/видавництва |
|
||||
| gif | Lossless | Обмежено 256 кольорами |
|
||||
| heic / heif | Lossy | Формат екосистеми Apple |
|
||||
| jxl | Both | JPEG XL, формат нового покоління |
|
||||
| bmp | Lossless | Нестиснена растрова карта |
|
||||
| ico | Lossless | Формат значків Windows |
|
||||
| jp2 | Lossy | JPEG 2000 |
|
||||
| qoi | Lossless | Формат Quite OK Image |
|
||||
| psd | Layered | Adobe Photoshop (потребує ImageMagick) |
|
||||
| ppm | Lossless | Portable Pixmap (PPM/PGM/PBM) |
|
||||
| eps | Vector | Encapsulated PostScript |
|
||||
| tga | Lossless | Формат зображень Targa |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
Конвертувати у WebP:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/convert \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"format": "webp", "quality": 85}'
|
||||
```
|
||||
|
||||
Конвертувати у PNG (без втрат):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/convert \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"format": "png"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.webp",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 680000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Розширення вихідного файлу автоматично оновлюється відповідно до цільового формату.
|
||||
- Вхідні дані SVG растеризуються з роздільною здатністю 300 DPI перед конвертацією.
|
||||
- Конвертація PSD потребує встановлення ImageMagick на сервері.
|
||||
- BMP, EPS, ICO, JP2, JXL, PPM, QOI та TGA використовують спеціалізовані CLI-кодувальники та обходять обробку Sharp.
|
||||
- Кодування HEIC/HEIF використовує системну бібліотеку кодувальника HEIC.
|
||||
- Вхідні формати широкі: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC, RAW (CR2, NEF, ARW тощо), PSD, SVG, BMP та інші.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "Обрізайте зображення, вказавши область із позицією та розмірами."
|
||||
i18n_source_hash: aab38ccd7c53
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: d8eed8736521
|
||||
---
|
||||
|
||||
# Crop {#crop}
|
||||
|
||||
Обрізайте зображення, визначивши прямокутну область за допомогою позиції та розміру. Підтримує як піксельні, так і відсоткові одиниці.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/crop`
|
||||
|
||||
Приймає дані форми multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| left | number | Yes | - | Зсув X області обрізки (від лівого краю) |
|
||||
| top | number | Yes | - | Зсув Y області обрізки (від верхнього краю) |
|
||||
| width | number | Yes | - | Ширина області обрізки |
|
||||
| height | number | Yes | - | Висота області обрізки |
|
||||
| unit | string | No | `"px"` | Одиниця для значень: `px` або `percent` |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/crop \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"left": 100, "top": 50, "width": 800, "height": 600}'
|
||||
```
|
||||
|
||||
Обрізка з використанням відсоткових значень:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/crop \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"left": 10, "top": 10, "width": 80, "height": 80, "unit": "percent"}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 1200000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Область обрізки має вміщуватися в межах зображення. Якщо область виходить за межі зображення, запит завершиться помилкою.
|
||||
- При використанні одиниці `percent` значення представляють відсотки від розмірів зображення (напр. `left: 10` означає 10% від лівого краю).
|
||||
- Вихідний формат збігається з вхідним.
|
||||
- Орієнтація EXIF автоматично застосовується перед обрізкою, тож координати відповідають візуально правильній орієнтації.
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
description: "Застосовуйте двоколірний ефект дуотон із власними кольорами тіней та світлих ділянок."
|
||||
i18n_source_hash: ab99c4f0152c
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: fbbff6fd343f
|
||||
---
|
||||
|
||||
# Duotone {#duotone}
|
||||
|
||||
Застосовуйте двоколірний ефект дуотон до зображення. Зображення перетворюється на відтінки сірого, а потім відображається на градієнт між кольором тіней (темні тони) та кольором світлих ділянок (яскраві тони).
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/duotone`
|
||||
|
||||
Приймає дані форми multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| shadow | string | No | `"#1e3a8a"` | Hex-колір тіней (застосовується до темних тонів) |
|
||||
| highlight | string | No | `"#fbbf24"` | Hex-колір світлих ділянок (застосовується до яскравих тонів) |
|
||||
| intensity | integer | No | `100` | Інтенсивність ефекту (0-100); 0 повертає оригінал, 100 застосовує повний дуотон |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/duotone \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"shadow": "#0f172a", "highlight": "#f97316", "intensity": 80}'
|
||||
```
|
||||
|
||||
## Example Response {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 1870000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Вихідний формат збігається з вхідним. Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
- `intensity` менша за 100 змішує результат дуотону з оригінальним зображенням, дозволяючи створювати м'якші ефекти.
|
||||
- Популярні комбінації дуотону включають синій/золотий, бірюзовий/кораловий та фіолетовий/рожевий.
|
||||
@@ -0,0 +1,108 @@
|
||||
---
|
||||
description: "Редагуйте поля метаданих EXIF, IPTC, GPS та XMP у зображеннях без перекодування пікселів."
|
||||
i18n_source_hash: a37746db11c3
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 341ca2183b14
|
||||
---
|
||||
|
||||
# Edit Metadata {#edit-metadata}
|
||||
|
||||
Редагуйте поля метаданих зображення, включно з EXIF, IPTC, координатами GPS, датами та ключовими словами. Використовує ExifTool під капотом, тож метадані записуються на місці без перекодування пікселів, зберігаючи повну якість зображення.
|
||||
|
||||
## API Endpoints {#api-endpoints}
|
||||
|
||||
### Edit Metadata {#edit-metadata-1}
|
||||
|
||||
`POST /api/v1/tools/image/edit-metadata`
|
||||
|
||||
Записує поля метаданих у зображення та повертає змінений файл.
|
||||
|
||||
### Inspect Metadata {#inspect-metadata}
|
||||
|
||||
`POST /api/v1/tools/image/edit-metadata/inspect`
|
||||
|
||||
Повертає повні метадані із зображення через ExifTool у форматі JSON. Не змінює зображення.
|
||||
|
||||
## Parameters (Edit) {#parameters-edit}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| title | string | No | - | Заголовок зображення (XMP/EXIF) |
|
||||
| author | string | No | - | Ім'я автора |
|
||||
| artist | string | No | - | Ім'я митця (тег EXIF Artist) |
|
||||
| copyright | string | No | - | Повідомлення про авторські права |
|
||||
| imageDescription | string | No | - | Опис зображення (EXIF) |
|
||||
| software | string | No | - | Тег програмного забезпечення |
|
||||
| dateTime | string | No | - | Значення EXIF DateTime |
|
||||
| dateTimeOriginal | string | No | - | Значення EXIF DateTimeOriginal |
|
||||
| setAllDates | string | No | - | Встановити всі поля дат одразу |
|
||||
| dateShift | string | No | - | Зсунути всі дати на зсув (формат: `+HH:MM` або `-HH:MM`) |
|
||||
| clearGps | boolean | No | `false` | Видалити всі дані GPS |
|
||||
| gpsLatitude | number | No | - | Встановити широту GPS (від -90 до 90) |
|
||||
| gpsLongitude | number | No | - | Встановити довготу GPS (від -180 до 180) |
|
||||
| gpsAltitude | number | No | - | Встановити висоту GPS у метрах |
|
||||
| keywords | string[] | No | - | Ключові слова/теги для додавання або встановлення |
|
||||
| keywordsMode | string | No | `"add"` | Як обробляти ключові слова: `add` (додати) або `set` (замінити) |
|
||||
| fieldsToRemove | string[] | No | `[]` | Список конкретних назв полів метаданих для видалення |
|
||||
| iptcTitle | string | No | - | IPTC Object Name |
|
||||
| iptcHeadline | string | No | - | IPTC Headline |
|
||||
| iptcCity | string | No | - | IPTC City |
|
||||
| iptcState | string | No | - | IPTC Province/State |
|
||||
| iptcCountry | string | No | - | IPTC Country |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
Встановити автора та авторські права:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/edit-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"author": "Jane Smith", "copyright": "2024 Jane Smith"}'
|
||||
```
|
||||
|
||||
Встановити координати GPS:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/edit-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"gpsLatitude": 48.8566, "gpsLongitude": 2.3522, "gpsAltitude": 35}'
|
||||
```
|
||||
|
||||
Видалити GPS та додати ключові слова:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/edit-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"clearGps": true, "keywords": ["landscape", "sunset"], "keywordsMode": "add"}'
|
||||
```
|
||||
|
||||
Перевірити метадані:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/edit-metadata/inspect \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg"
|
||||
```
|
||||
|
||||
## Example Response (Edit) {#example-response-edit}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2452000
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Цей інструмент потребує встановлення ExifTool на сервері. Він включений у Docker-образ.
|
||||
- Метадані записуються на місці, тож перекодування пікселів не відбувається. Зміна розміру файлу мінімальна (лише байти метаданих).
|
||||
- Параметр `dateShift` зсуває всі поля дат на вказаний зсув, що корисно для виправлення помилок часового поясу (напр. `+02:00` або `-05:30`).
|
||||
- Якщо жодних змін не запитано (всі параметри опущено або порожні), оригінальний файл повертається без змін.
|
||||
- Підтримувані формати: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC/HEIF.
|
||||
- Для форматів, які не можна переглянути в браузері (HEIF, TIFF), відповідь містить поле `previewUrl` із попереднім переглядом WebP.
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
description: "Відновлюйте та підвищуйте різкість розмитих або низькоякісних облич на зображеннях за допомогою AI-моделей GFPGAN та CodeFormer."
|
||||
i18n_source_hash: 7f9f6af8ebda
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 167d4dd5e490
|
||||
---
|
||||
|
||||
# Face Enhancement {#face-enhancement}
|
||||
|
||||
Відновлюйте та покращуйте обличчя на зображеннях за допомогою AI-моделей (GFPGAN/CodeFormer).
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/enhance-faces`
|
||||
|
||||
**Processing:** Асинхронна (повертає 202, опитуйте `/api/v1/jobs/{jobId}/progress` для отримання статусу через SSE)
|
||||
|
||||
**Model bundles:** `upscale-enhance` (5-6 GB) та `face-detection` (200-300 MB)
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Yes | - | Файл зображення (multipart) |
|
||||
| model | string | No | `"auto"` | Модель для використання: `auto`, `gfpgan`, `codeformer` |
|
||||
| strength | number | No | `0.8` | Сила покращення (0-1). Вищі значення дають сильніше покращення |
|
||||
| onlyCenterFace | boolean | No | `false` | Покращувати лише найбільш центральне/помітне обличчя |
|
||||
| sensitivity | number | No | `0.5` | Чутливість виявлення облич (0-1) |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/enhance-faces \
|
||||
-F "file=@portrait.jpg" \
|
||||
-F 'settings={"model":"codeformer","strength":0.7,"onlyCenterFace":false}'
|
||||
```
|
||||
|
||||
## Response {#response}
|
||||
|
||||
### Initial Response (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Progress (SSE at `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Enhancing faces...","percent":60}
|
||||
```
|
||||
|
||||
### Final Result (via SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/portrait_enhanced.png",
|
||||
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
|
||||
"originalSize": 350000,
|
||||
"processedSize": 600000,
|
||||
"facesDetected": 2,
|
||||
"faces": [
|
||||
{"x": 120, "y": 80, "w": 100, "h": 100},
|
||||
{"x": 350, "y": 90, "w": 95, "h": 95}
|
||||
],
|
||||
"model": "codeformer"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Потрібні обидва пакети моделей: `upscale-enhance` (5-6 GB) та `face-detection` (200-300 MB).
|
||||
- GFPGAN дає агресивніше покращення; CodeFormer краще зберігає ідентичність. `auto` обирає найкращу модель для вхідних даних.
|
||||
- Вивід завжди у форматі PNG для максимальної якості.
|
||||
- Поряд із виводом повної роздільної здатності генерується попередній перегляд WebP для швидшого відображення у фронтенді.
|
||||
- Параметр `strength` змішує покращене обличчя з оригіналом. Використовуйте нижчі значення (0.3-0.5) для м'яких покращень, вищі значення (0.7-1.0) для сильнішого відновлення.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
@@ -0,0 +1,79 @@
|
||||
---
|
||||
description: "Видаляйте небажані об'єкти із зображень за допомогою AI-домальовування (LaMa), керованого маскою області для стирання."
|
||||
i18n_source_hash: 8e2e42a5e4f9
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 18897977a1f9
|
||||
---
|
||||
|
||||
# Object Eraser {#object-eraser}
|
||||
|
||||
Видаляйте небажані об'єкти із зображень за допомогою AI-домальовування (модель LaMa). Приймає зображення та маску, що вказує область для стирання.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/erase-object`
|
||||
|
||||
**Processing:** Асинхронна (повертає 202, опитуйте `/api/v1/jobs/{jobId}/progress` для отримання статусу через SSE)
|
||||
|
||||
**Model bundle:** `object-eraser-colorize` (1-2 GB)
|
||||
|
||||
## Parameters {#parameters}
|
||||
|
||||
| Parameter | Type | Required | Default | Description |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Yes | - | Файл вихідного зображення (multipart) |
|
||||
| mask | file | Yes | - | Зображення-маска (біле = область для стирання, чорне = зберегти). Має завантажуватися з іменем поля `mask` |
|
||||
| format | string | No | `"auto"` | Вихідний формат: `auto`, `png`, `jpg`, `jpeg`, `webp`, `tiff`, `gif`, `avif`, `heic`, `heif`, `jxl` |
|
||||
| quality | integer | No | `95` | Якість вихідного файлу (1-100) |
|
||||
|
||||
## Example Request {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/erase-object \
|
||||
-F "file=@photo.jpg" \
|
||||
-F "mask=@mask.png" \
|
||||
-F "format=png" \
|
||||
-F "quality=95"
|
||||
```
|
||||
|
||||
## Response {#response}
|
||||
|
||||
### Initial Response (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Progress (SSE at `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Inpainting...","percent":70}
|
||||
```
|
||||
|
||||
### Final Result (via SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/photo_erased.png",
|
||||
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
|
||||
"originalSize": 245000,
|
||||
"processedSize": 230000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Notes {#notes}
|
||||
|
||||
- Потрібно встановити пакет моделі `object-eraser-colorize` (1-2 GB).
|
||||
- Маска має бути того самого розміру, що й вихідне зображення. Білі пікселі позначають області для стирання; AI заповнює їх правдоподібним вмістом.
|
||||
- Використовує LaMa (Large Mask Inpainting) для високоякісного видалення об'єктів.
|
||||
- Для вихідних форматів, які не можна переглянути в браузері, поряд з основним виводом генерується попередній перегляд WebP.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
@@ -0,0 +1,93 @@
|
||||
---
|
||||
description: "Генерує всі стандартні розміри favicon та іконок застосунку з вихідного зображення."
|
||||
i18n_source_hash: 3a6451a94b7a
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 72dc322c51fa
|
||||
---
|
||||
|
||||
# Генератор favicon {#favicon-generator}
|
||||
|
||||
Створює повний набір файлів favicon та іконок застосунку з вихідного зображення. Генерує всі стандартні розміри, потрібні для браузерів, пристроїв Apple та Android, разом із вебманіфестом і фрагментом HTML.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/favicon`
|
||||
|
||||
Приймає дані форми multipart з одним або кількома файлами зображень та необовʼязковим полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обовʼязковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| background | string | Ні | - | Колір фону у форматі hex (напр. `"#ffffff"`). Коли задано, іконку зводять на цей колір. |
|
||||
| padding | integer | Ні | `0` | Відсоток відступу навколо вмісту іконки (від 0 до 40) |
|
||||
| radius | integer | Ні | `0` | Відсоток радіуса кутів для округлених іконок (від 0 до 50) |
|
||||
| sizes | integer[] | Ні | - | Обмежити вивід конкретними піксельними розмірами (напр. `[16, 32, 180]`). Пропустіть, щоб згенерувати всі стандартні розміри. |
|
||||
| themeColor | string | Ні | `"#ffffff"` | Колір теми у форматі hex для вебманіфесту |
|
||||
|
||||
## Згенеровані файли {#generated-files}
|
||||
|
||||
Для кожного вхідного зображення створюються такі файли:
|
||||
|
||||
| Файл | Розмір | Призначення |
|
||||
|------|------|---------|
|
||||
| `favicon-16x16.png` | 16x16 | Іконка вкладки браузера |
|
||||
| `favicon-32x32.png` | 32x32 | Іконка вкладки браузера (HiDPI) |
|
||||
| `favicon-48x48.png` | 48x48 | Ярлик на робочому столі |
|
||||
| `apple-touch-icon.png` | 180x180 | Головний екран iOS |
|
||||
| `android-chrome-192x192.png` | 192x192 | Головний екран Android |
|
||||
| `android-chrome-512x512.png` | 512x512 | Екран запуску Android |
|
||||
| `favicon.ico` | 32x32 | Застарілий формат ICO |
|
||||
| `manifest.json` | - | Маніфест вебзастосунку з посиланнями на іконки |
|
||||
| `favicon-snippet.html` | - | Готові до використання теги link у HTML |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
Одне вихідне зображення з округленими кутами та відступом:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/favicon \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@logo.png" \
|
||||
-F 'settings={"padding": 10, "radius": 20, "themeColor": "#0a0a0a"}'
|
||||
```
|
||||
|
||||
Кілька вихідних зображень (кожне отримує власний набір у підпапці):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/favicon \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@logo-light.png" \
|
||||
-F "file=@logo-dark.png"
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
Відповідь — це ZIP-файл, який передається напряму. Заголовки відповіді такі:
|
||||
|
||||
```
|
||||
Content-Type: application/zip
|
||||
Content-Disposition: attachment; filename="favicons-a1b2c3d4.zip"
|
||||
```
|
||||
|
||||
## Долучений фрагмент HTML {#html-snippet-included}
|
||||
|
||||
ZIP містить файл `favicon-snippet.html`, який можна вставити у `<head>` вашого HTML:
|
||||
|
||||
```html
|
||||
<!-- Favicons -->
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="48x48" href="/favicon-48x48.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Вихідні зображення масштабуються в режимі підгонки `cover`, тобто обрізаються, щоб заповнити кожен квадратний розмір. Для найкращого результату використовуйте квадратне вихідне зображення.
|
||||
- Коли завантажено кілька файлів, кожен отримує власну підпапку в ZIP (названу за іменем вихідного файлу).
|
||||
- Для завантаження одного файлу всі результати розміщуються в корені ZIP без підпапки.
|
||||
- Файли, що не пройшли перевірку чи декодування, пропускаються, а до ZIP додається `skipped-files.txt` з поясненням проблем.
|
||||
- Підтримувані вхідні формати: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC, SVG, RAW, PSD та інші.
|
||||
- Орієнтація EXIF застосовується автоматично перед масштабуванням.
|
||||
@@ -0,0 +1,115 @@
|
||||
---
|
||||
description: "Виявляє дублікати та майже однакові зображення за допомогою перцептивного хешування."
|
||||
i18n_source_hash: 4e1f4413f90f
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 81c996d6af9c
|
||||
---
|
||||
|
||||
# Пошук дублікатів {#find-duplicates}
|
||||
|
||||
Завантажте кілька зображень, щоб виявити дублікати та майже однакові зображення за допомогою перцептивного хешування (dHash). Групує схожі зображення разом, визначає найякіснішу версію в кожній групі та обчислює потенційну економію місця.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/find-duplicates`
|
||||
|
||||
Приймає дані форми multipart з кількома файлами зображень та необовʼязковим полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обовʼязковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| threshold | number | Ні | `8` | Максимальна відстань Геммінга, за якої зображення вважаються дублікатами (від 0 до 20). Менше значення = суворіше зіставлення |
|
||||
|
||||
### Поля файлів {#file-fields}
|
||||
|
||||
Завантажте щонайменше 2 файли зображень у запиті multipart (усі з іменем поля `file` або будь-яким іменем поля для частин-файлів).
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/find-duplicates \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo1.jpg" \
|
||||
-F "file=@photo2.jpg" \
|
||||
-F "file=@photo3.jpg" \
|
||||
-F "file=@photo4.jpg" \
|
||||
-F 'settings={"threshold": 8}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"totalImages": 4,
|
||||
"duplicateGroups": [
|
||||
{
|
||||
"groupId": 1,
|
||||
"files": [
|
||||
{
|
||||
"filename": "photo1.jpg",
|
||||
"similarity": 100,
|
||||
"width": 4032,
|
||||
"height": 3024,
|
||||
"fileSize": 2450000,
|
||||
"format": "jpeg",
|
||||
"isBest": true,
|
||||
"thumbnail": "data:image/jpeg;base64,/9j/..."
|
||||
},
|
||||
{
|
||||
"filename": "photo2.jpg",
|
||||
"similarity": 96.88,
|
||||
"width": 1920,
|
||||
"height": 1440,
|
||||
"fileSize": 850000,
|
||||
"format": "jpeg",
|
||||
"isBest": false,
|
||||
"thumbnail": "data:image/jpeg;base64,/9j/..."
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"uniqueImages": 2,
|
||||
"spaceSaveable": 850000,
|
||||
"skippedFiles": []
|
||||
}
|
||||
```
|
||||
|
||||
## Поля відповіді {#response-fields}
|
||||
|
||||
| Поле | Тип | Опис |
|
||||
|-------|------|-------------|
|
||||
| totalImages | number | Кількість успішно проаналізованих зображень |
|
||||
| duplicateGroups | array | Групи зображень-дублікатів |
|
||||
| uniqueImages | number | Кількість зображень, що не входять до жодної групи дублікатів |
|
||||
| spaceSaveable | number | Загальна кількість байтів, яку можна зекономити, видаливши недублікати найкращої якості |
|
||||
| skippedFiles | array | Файли, які не вдалося обробити (з іменем файлу та причиною) |
|
||||
|
||||
### Обʼєкт групи дублікатів {#duplicate-group-object}
|
||||
|
||||
| Поле | Тип | Опис |
|
||||
|-------|------|-------------|
|
||||
| groupId | number | Ідентифікатор групи |
|
||||
| files | array | Зображення в цій групі дублікатів |
|
||||
|
||||
### Обʼєкт файлу (у межах групи) {#file-object-within-a-group}
|
||||
|
||||
| Поле | Тип | Опис |
|
||||
|-------|------|-------------|
|
||||
| filename | string | Оригінальне імʼя файлу |
|
||||
| similarity | number | Відсоток схожості до еталонного зображення (першого в групі) |
|
||||
| width | number | Ширина зображення в пікселях |
|
||||
| height | number | Висота зображення в пікселях |
|
||||
| fileSize | number | Розмір файлу в байтах |
|
||||
| format | string | Формат зображення |
|
||||
| isBest | boolean | Чи є це версією найвищої якості (найбільше пікселів, найбільший файл) |
|
||||
| thumbnail | string або null | Мініатюра Base64 JPEG (шириною 200px) для попереднього перегляду |
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Використовує 128-бітний dHash (64-бітний рядок + 64-бітний стовпець) для виявлення перцептивної схожості. Це вловлює дублікати навіть за зміни розміру, повторного стиснення та незначних правок.
|
||||
- Поріг представляє максимальну відстань Геммінга між хешами. Значення за замовчуванням 8 вловлює майже однакові зображення, уникаючи хибних спрацювань. Використовуйте 0 лише для попіксельно ідентичних або 15-20 для дуже вільного зіставлення.
|
||||
- "Найкращим" зображенням у кожній групі є те, що має найбільше пікселів (ширина x висота), а розмір файлу слугує критерієм у разі рівності.
|
||||
- Потрібно щонайменше 2 зображення. Файли, що не пройшли перевірку чи декодування, повідомляються в `skippedFiles`, а не спричиняють збій усього запиту.
|
||||
- Мініатюри — це JPEG-прев'ю шириною 200px, закодовані як data URI.
|
||||
- Підтримуються всі поширені формати (HEIC, RAW, PSD, SVG декодуються автоматично).
|
||||
@@ -0,0 +1,147 @@
|
||||
---
|
||||
description: "Змінюйте розмір, оптимізуйте, змінюйте швидкість, реверсуйте, обертайте та витягуйте кадри з анімованих GIF в одному інструменті."
|
||||
i18n_source_hash: 5e525e80db92
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 43dbcd5be0be
|
||||
---
|
||||
|
||||
# GIF Tools {#gif-tools}
|
||||
|
||||
Змінюйте розмір, оптимізуйте, змінюйте швидкість, реверсуйте, витягуйте кадри та обертайте анімовані GIF. Надає кілька режимів роботи в одному інструменті.
|
||||
|
||||
## API Endpoint {#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` (з нуля) |
|
||||
| frameStart | number | Ні | 0 | Індекс початкового кадру для режиму `range` (з нуля) |
|
||||
| frameEnd | number | Ні | - | Індекс кінцевого кадру для режиму `range` (з нуля, включно) |
|
||||
| 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` затримки кадрів діляться на коефіцієнт швидкості. Мінімальна затримка на кадр — 20ms (обмеження специфікації GIF).
|
||||
- У режимі `reverse` також доступний параметр `speedFactor` для одночасного регулювання швидкості під час реверсування.
|
||||
- У режимі `extract` з `range` або `all` вивід — це ZIP-файл, що містить окремі кадри.
|
||||
- У режимі `rotate` кожен кадр обробляється окремо та знову складається в анімацію.
|
||||
- Параметр `loop` контролює, скільки разів повторюється вихідний GIF. Використовуйте 0 для нескінченного повторення.
|
||||
- Поле `duration` у відповіді info — це загальна тривалість анімації в мілісекундах.
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
description: "Конвертуйте анімований GIF у WebP і навпаки, зберігаючи всі кадри."
|
||||
i18n_source_hash: 20946e5001cb
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 298691128597
|
||||
---
|
||||
|
||||
# Конвертер GIF/WebP {#gif-webp-converter}
|
||||
|
||||
Конвертуйте анімовані файли GIF у WebP і навпаки, зберігаючи всі кадри та тайминг анімації. Анімації WebP зазвичай на 25-35% менші за еквівалентні GIF.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/gif-webp`
|
||||
|
||||
Приймає дані форми multipart з файлом GIF або WebP та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обовʼязковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| quality | integer | Ні | `80` | Якість виводу для кодування WebP (1-100) |
|
||||
| lossless | boolean | Ні | `false` | Використовувати стиснення WebP без втрат |
|
||||
| resizePercent | integer | Ні | `100` | Масштабувати вивід у відсотках (10-100) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/gif-webp \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@animation.gif" \
|
||||
-F 'settings={"quality": 85, "resizePercent": 50}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/animation.webp",
|
||||
"originalSize": 3500000,
|
||||
"processedSize": 2200000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Приймаються лише файли `.gif` та `.webp`. Інші формати зображень цим інструментом не підтримуються.
|
||||
- Напрямок конвертації визначається автоматично: вхід GIF дає вивід WebP, а вхід WebP дає вивід GIF.
|
||||
- Параметри `quality` та `lossless` застосовуються лише при кодуванні в WebP. Під час конвертації в GIF вивід використовує стандартну палітру GIF.
|
||||
- Використовуйте `resizePercent`, щоб зменшити розміри (та розмір файлу) великих анімацій.
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
description: "Генерує діаграму RGB-гістограми з поканальною статистикою із зображення."
|
||||
i18n_source_hash: 57aa610206a5
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 988081420f18
|
||||
---
|
||||
|
||||
# Гістограма {#histogram}
|
||||
|
||||
Генерує діаграму RGB-гістограми із зображення. Повертає зображення гістограми у форматі PNG разом із поканальною статистикою та сирими даними гістограми на 256 бінів у JSON-відповіді.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/histogram`
|
||||
|
||||
Приймає дані форми multipart з файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обовʼязковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| scale | string | Ні | `"linear"` | Масштаб осі Y: `linear` або `log` |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/histogram \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"scale": "linear"}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/histogram.png",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 12000,
|
||||
"bins": {
|
||||
"r": [0, 12, 45, "... (256 values)"],
|
||||
"g": [0, 8, 38, "... (256 values)"],
|
||||
"b": [2, 15, 52, "... (256 values)"],
|
||||
"lum": [0, 10, 40, "... (256 values)"]
|
||||
},
|
||||
"stats": {
|
||||
"r": { "mean": 128, "median": 132, "stdev": 48.5 },
|
||||
"g": { "mean": 119, "median": 121, "stdev": 44.2 },
|
||||
"b": { "mean": 105, "median": 108, "stdev": 51.3 },
|
||||
"lum": { "mean": 118, "median": 120, "stdev": 45.1 }
|
||||
},
|
||||
"mean": { "r": 128, "g": 119, "b": 105 },
|
||||
"max": { "r": 4200, "g": 3800, "b": 4100 }
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- `downloadUrl` вказує на відрендерену діаграму гістограми PNG, що показує розподіли R, G, B та яскравості.
|
||||
- `bins` містить сирі масиви з 256 значень для кожного каналу (червоний, зелений, синій, яскравість), придатні для рендерингу власних візуалізацій.
|
||||
- `stats` надає середнє, медіану та стандартне відхилення для кожного каналу.
|
||||
- `mean` та `max` — це поля скороченого запису для зворотної сумісності.
|
||||
- Використовуйте масштаб `log`, коли в гістограмі домінує кілька піків, а ви хочете побачити деталі в нижчих бінах.
|
||||
- Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед аналізом.
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
description: "Захоплюйте вебсторінки або фрагменти HTML як високоякісні зображення з емуляцією пристроїв."
|
||||
i18n_source_hash: 1e49d070ea2e
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 88275af0ea98
|
||||
---
|
||||
|
||||
# HTML в зображення {#html-to-image}
|
||||
|
||||
Захоплюйте URL вебсторінки або сирий вміст HTML як зображення-знімок. Підтримує емуляцію пристроїв (десктоп, планшет, мобільний), захоплення повної сторінки та кілька форматів виводу.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/html-to-image`
|
||||
|
||||
Приймає **тіло JSON** (не multipart). Завантаження файлу не потрібне.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обовʼязковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| url | string | Умовно | - | URL для захоплення (має бути дійсним URL) |
|
||||
| html | string | Умовно | - | Сирий вміст HTML для рендерингу (від 1 до 5 000 000 символів) |
|
||||
| format | string | Ні | `"png"` | Формат виводу: `jpg`, `png`, `webp` |
|
||||
| quality | number | Ні | `90` | Якість виводу для форматів із втратами (від 1 до 100) |
|
||||
| fullPage | boolean | Ні | `false` | Захопити всю прокручувану сторінку, а не лише область перегляду |
|
||||
| devicePreset | string | Ні | `"desktop"` | Емуляція пристрою: `desktop`, `tablet`, `mobile`, `custom` |
|
||||
| viewportWidth | number | Ні | `1280` | Власна ширина області перегляду в пікселях (від 320 до 3840, використовується, коли devicePreset — `custom`) |
|
||||
| viewportHeight | number | Ні | `720` | Власна висота області перегляду в пікселях (від 320 до 2160, використовується, коли devicePreset — `custom`) |
|
||||
|
||||
Потрібно вказати або `url`, або `html`, але не обидва.
|
||||
|
||||
### Пресети пристроїв {#device-presets}
|
||||
|
||||
| Пресет | Ширина | Висота | Мобільний UA |
|
||||
|--------|-------|--------|-----------|
|
||||
| `desktop` | 1280 | 720 | Ні |
|
||||
| `tablet` | 768 | 1024 | Ні |
|
||||
| `mobile` | 375 | 812 | Так |
|
||||
| `custom` | (задано користувачем) | (задано користувачем) | Ні |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
Захоплення вебсторінки:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/html-to-image \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"url": "https://example.com", "format": "png", "fullPage": true, "devicePreset": "desktop"}'
|
||||
```
|
||||
|
||||
Рендеринг вмісту HTML:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/html-to-image \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"html": "<div style=\"padding: 20px; background: #f0f0f0;\"><h1>Hello</h1></div>", "format": "png"}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/screenshot.png",
|
||||
"originalSize": 0,
|
||||
"processedSize": 145000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Вимагає встановленого на сервері Chromium. Повертає HTTP 503, якщо сервіс браузера недоступний.
|
||||
- URL перевіряються на атаки SSRF (приватні/внутрішні мережеві адреси блокуються).
|
||||
- Цей кінцевий пункт обмежено до 120 запитів на годину.
|
||||
- `originalSize` завжди дорівнює 0, оскільки цей інструмент генерує зображення з URL/HTML.
|
||||
- Імʼя вихідного файлу — `screenshot.<format>`.
|
||||
- Якщо сторінка завантажується надто довго, запит повертає HTTP 504 (тайм-аут шлюзу).
|
||||
- Якщо сервіс браузера неодноразово падає, він тимчасово вимикається та повертає HTTP 503 з кодом `BROWSER_CRASHED`.
|
||||
@@ -0,0 +1,99 @@
|
||||
---
|
||||
description: "Автоматичне покращення в один клік, що аналізує зображення та коригує експозицію, контраст, баланс білого, насиченість і різкість."
|
||||
i18n_source_hash: 42b6ab956f91
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 063f72f648c7
|
||||
---
|
||||
|
||||
# Покращення зображення {#image-enhancement}
|
||||
|
||||
Автоматичне покращення в один клік з розумним аналізом. Аналізує зображення та застосовує корекції експозиції, контрасту, балансу білого, насиченості, різкості й шумозаглушення.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/image-enhancement`
|
||||
|
||||
**Обробка:** синхронна (використовує фабрику `createToolRoute`, повертає результат напряму)
|
||||
|
||||
**Пакет моделі:** не потрібен для базового покращення. Пакет `upscale-enhance` (5-6 GB) використовується лише тоді, коли увімкнено `deepEnhance` (для видалення шуму на основі ШІ через SCUNet).
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обовʼязковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Так | - | Файл зображення (multipart) |
|
||||
| mode | string | Ні | `"auto"` | Режим покращення: `auto`, `portrait`, `landscape`, `low-light`, `food`, `document` |
|
||||
| intensity | number | Ні | `50` | Загальна інтенсивність покращення (0-100) |
|
||||
| corrections | object | Ні | усі `true` | Вибіркові корекції для застосування (див. нижче) |
|
||||
| deepEnhance | boolean | Ні | `false` | Увімкнути видалення шуму на основі ШІ (вимагає встановленого інструмента `noise-removal`) |
|
||||
|
||||
### Обʼєкт corrections {#corrections-object}
|
||||
|
||||
| Поле | Тип | За замовчуванням | Опис |
|
||||
|-------|------|---------|-------------|
|
||||
| exposure | boolean | `true` | Автокорекція експозиції |
|
||||
| contrast | boolean | `true` | Автокорекція контрасту |
|
||||
| whiteBalance | boolean | `true` | Автокорекція балансу білого |
|
||||
| saturation | boolean | `true` | Автокорекція насиченості |
|
||||
| sharpness | boolean | `true` | Автопідвищення різкості |
|
||||
| denoise | boolean | `true` | Легке шумозаглушення |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-enhancement \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"mode":"portrait","intensity":70,"corrections":{"exposure":true,"contrast":true,"sharpness":false}}'
|
||||
```
|
||||
|
||||
## Відповідь (200 OK) {#response-200-ok}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/photo.jpg",
|
||||
"originalSize": 300000,
|
||||
"processedSize": 310000
|
||||
}
|
||||
```
|
||||
|
||||
## Кінцевий пункт Analyze {#analyze-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/image-enhancement/analyze`
|
||||
|
||||
Аналізує зображення та повертає рекомендації щодо корекцій, не застосовуючи їх.
|
||||
|
||||
### Параметри {#parameters-1}
|
||||
|
||||
| Параметр | Тип | Обовʼязковий | Опис |
|
||||
|-----------|------|----------|-------------|
|
||||
| file | file | Так | Файл зображення (multipart) |
|
||||
|
||||
### Приклад запиту {#example-request-1}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-enhancement/analyze \
|
||||
-F "file=@photo.jpg"
|
||||
```
|
||||
|
||||
### Відповідь (200 OK) {#response-200-ok-1}
|
||||
|
||||
```json
|
||||
{
|
||||
"corrections": {
|
||||
"exposure": { "value": 0.3, "direction": "brighten" },
|
||||
"contrast": { "value": 0.2, "direction": "increase" },
|
||||
"whiteBalance": { "value": 200, "direction": "warmer" },
|
||||
"saturation": { "value": 0.1, "direction": "increase" },
|
||||
"sharpness": { "value": 0.4, "direction": "sharpen" }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Цей інструмент використовує синхронну фабрику `createToolRoute`, тож повертає стандартну відповідь (не асинхронну 202).
|
||||
- Параметр `mode` регулює, як зважуються корекції (напр., режим портрета мʼякший до відтінків шкіри, режим пейзажу підсилює насиченість).
|
||||
- Коли `deepEnhance` увімкнено та встановлено інструмент `noise-removal` (SCUNet), після стандартних корекцій застосовується додатковий прохід шумозаглушення на основі ШІ.
|
||||
- Кінцевий пункт analyze корисний для попереднього перегляду того, які корекції будуть застосовані, перед підтвердженням.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
description: "Доповнює зображення до цільового співвідношення сторін суцільним кольором, прозорим або розмитим фоном."
|
||||
i18n_source_hash: 796122da3dae
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: eec892888277
|
||||
---
|
||||
|
||||
# Доповнення зображення {#image-pad}
|
||||
|
||||
Доповнюйте зображення до цільового співвідношення сторін, додаючи навколо нього суцільний колір, прозорий або розмитий фон. Корисно для підгонки зображень під фіксовані співвідношення сторін для соцмереж чи друку без обрізання.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/image-pad`
|
||||
|
||||
Приймає дані форми multipart з файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обовʼязковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| target | string | Ні | `"1:1"` | Цільове співвідношення сторін: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` або `custom` |
|
||||
| ratioW | integer | Ні | `1` | Власна ширина співвідношення (1-100, використовується, коли target — `custom`) |
|
||||
| ratioH | integer | Ні | `1` | Власна висота співвідношення (1-100, використовується, коли target — `custom`) |
|
||||
| background | string | Ні | `"color"` | Режим фону: `color`, `transparent` або `blur` |
|
||||
| color | string | Ні | `"#ffffff"` | Колір фону у форматі hex (коли background — `color`) |
|
||||
| padding | integer | Ні | `0` | Додатковий відступ як відсоток полотна (0-50) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-pad \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"target": "16:9", "background": "blur", "padding": 5}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 3100000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Режим фону `blur` створює розмиту копію оригінального зображення як заповнення відступу, даючи візуально цілісний результат.
|
||||
- Під час використання фону `transparent` вивід конвертується у PNG для збереження альфа-каналу.
|
||||
- Формат виводу відповідає формату вводу, якщо не задіяна прозорість. Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
- Встановіть `target` у `custom` і вкажіть `ratioW` та `ratioH` для довільних співвідношень сторін (напр., `ratioW: 3, ratioH: 2` для 3:2).
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
description: "Конвертуйте зображення в data URI у форматі base64 для вбудовування в HTML, CSS тощо."
|
||||
i18n_source_hash: ba4b8f3b4ece
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: dd739347bafc
|
||||
---
|
||||
|
||||
# Зображення в Base64 {#image-to-base64}
|
||||
|
||||
Конвертуйте одне або кілька зображень у рядки, закодовані в base64, та data URI. Підтримує необовʼязкову конвертацію формату, контроль якості та зміну розміру. Корисно для вбудовування зображень напряму в HTML, CSS, JSON або шаблони листів.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/image-to-base64`
|
||||
|
||||
Приймає дані форми multipart з одним або кількома файлами зображень та необовʼязковим полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обовʼязковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| outputFormat | string | Ні | `"original"` | Конвертувати перед кодуванням: `original`, `jpeg`, `png`, `webp`, `avif`, `jxl` |
|
||||
| quality | number | Ні | `80` | Якість виводу для форматів із втратами (від 1 до 100) |
|
||||
| maxWidth | number | Ні | `0` | Максимальна ширина в пікселях (0 = без зміни розміру, не збільшуватиме) |
|
||||
| maxHeight | number | Ні | `0` | Максимальна висота в пікселях (0 = без зміни розміру, не збільшуватиме) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-to-base64 \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@icon.png" \
|
||||
-F 'settings={"outputFormat": "webp", "quality": 80, "maxWidth": 200}'
|
||||
```
|
||||
|
||||
Кілька файлів:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-to-base64 \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@icon1.png" \
|
||||
-F "file=@icon2.png" \
|
||||
-F "file=@icon3.png" \
|
||||
-F 'settings={"outputFormat": "original"}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"results": [
|
||||
{
|
||||
"filename": "icon.png",
|
||||
"mimeType": "image/webp",
|
||||
"width": 200,
|
||||
"height": 200,
|
||||
"originalSize": 45000,
|
||||
"encodedSize": 28800,
|
||||
"overheadPercent": -36.0,
|
||||
"base64": "UklGRlYAAABXRUJQ...",
|
||||
"dataUri": "data:image/webp;base64,UklGRlYAAABXRUJQ..."
|
||||
}
|
||||
],
|
||||
"errors": []
|
||||
}
|
||||
```
|
||||
|
||||
## Поля відповіді {#response-fields}
|
||||
|
||||
| Поле | Тип | Опис |
|
||||
|-------|------|-------------|
|
||||
| results | array | Успішно конвертовані зображення |
|
||||
| errors | array | Зображення, які не вдалося обробити (з іменем файлу та повідомленням про помилку) |
|
||||
|
||||
### Обʼєкт result {#result-object}
|
||||
|
||||
| Поле | Тип | Опис |
|
||||
|-------|------|-------------|
|
||||
| filename | string | Оригінальне імʼя файлу |
|
||||
| mimeType | string | MIME-тип закодованого виводу |
|
||||
| width | number | Кінцева ширина в пікселях (після будь-якої зміни розміру) |
|
||||
| height | number | Кінцева висота в пікселях (після будь-якої зміни розміру) |
|
||||
| originalSize | number | Оригінальний розмір файлу в байтах |
|
||||
| encodedSize | number | Розмір рядка base64 в байтах |
|
||||
| overheadPercent | number | Відсоткова різниця в розмірі порівняно з оригіналом (додатне = більше, відʼємне = менше) |
|
||||
| base64 | string | Сирі дані зображення, закодовані в base64 |
|
||||
| dataUri | string | Повний data URI, готовий до використання в атрибутах `src` |
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Кодування base64 зазвичай збільшує розмір приблизно на 33% порівняно з бінарним файлом. Поле `overheadPercent` показує фактичну різницю.
|
||||
- Коли `outputFormat` — `"original"`, файли HEIC/HEIF конвертуються в JPEG (оскільки браузери не можуть показувати HEIC у data URI).
|
||||
- Параметри `maxWidth` та `maxHeight` змінюють розмір за допомогою `fit: inside` з `withoutEnlargement`, тож зображення, менші за вказані розміри, не збільшуються.
|
||||
- В одному запиті можна обробити кілька файлів. Кожен файл обробляється незалежно, і збої не заважають успішній обробці інших файлів.
|
||||
- Файли SVG передаються як `image/svg+xml` без повторного кодування (якщо не запитано конвертацію формату).
|
||||
- Це кінцевий пункт лише для читання. Він не створює завантажуваного файлу чи `jobId`. Дані base64 повертаються напряму в тілі відповіді.
|
||||
@@ -0,0 +1,119 @@
|
||||
---
|
||||
description: "Обʼєднайте одне або кілька зображень у документ PDF з опціями розміру сторінки, орієнтації та цільового розміру файлу."
|
||||
i18n_source_hash: f659c7e7f56b
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 6e94bdf00179
|
||||
---
|
||||
|
||||
# Зображення в PDF {#image-to-pdf}
|
||||
|
||||
Обʼєднайте одне або кілька зображень у документ PDF. Підтримує кілька розмірів сторінки, орієнтацій, полів та необовʼязкове націлювання на розмір файлу через регулювання якості.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/image-to-pdf`
|
||||
|
||||
Приймає дані форми multipart з одним або кількома файлами зображень та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обовʼязковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| pageSize | string | Ні | `"A4"` | Розмір сторінки: `A4`, `Letter`, `A3`, `A5` |
|
||||
| orientation | string | Ні | `"portrait"` | Орієнтація сторінки: `portrait` або `landscape` |
|
||||
| margin | number | Ні | `20` | Поле сторінки в пунктах (0-500) |
|
||||
| targetSize | object | Ні | - | Обмеження цільового розміру файлу (див. нижче) |
|
||||
| collate | boolean | Ні | `true` | Обʼєднати всі зображення в один PDF. Якщо `false`, створює один PDF на зображення. |
|
||||
|
||||
### Обʼєкт targetSize {#target-size-object}
|
||||
|
||||
| Поле | Тип | Обовʼязкове | Опис |
|
||||
|-------|------|----------|-------------|
|
||||
| value | number | Так | Значення цільового розміру |
|
||||
| unit | string | Так | Одиниця: `KB` або `MB` |
|
||||
|
||||
Мінімальний цільовий розмір — 50 KB.
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
Базовий PDF з кількома зображеннями:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-to-pdf \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@page1.jpg" \
|
||||
-F "file=@page2.jpg" \
|
||||
-F "file=@page3.jpg" \
|
||||
-F 'settings={"pageSize": "A4", "orientation": "portrait", "margin": 20}'
|
||||
```
|
||||
|
||||
З цільовим розміром файлу:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-to-pdf \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@scan1.jpg" \
|
||||
-F "file=@scan2.jpg" \
|
||||
-F 'settings={"pageSize": "Letter", "targetSize": {"value": 2, "unit": "MB"}}'
|
||||
```
|
||||
|
||||
Один PDF на зображення:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/image-to-pdf \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo1.jpg" \
|
||||
-F "file=@photo2.jpg" \
|
||||
-F 'settings={"collate": false}'
|
||||
```
|
||||
|
||||
## Приклад відповіді (обʼєднано) {#example-response-collated}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/images.pdf",
|
||||
"originalSize": 5000000,
|
||||
"processedSize": 1200000,
|
||||
"pages": 3
|
||||
}
|
||||
```
|
||||
|
||||
## Приклад відповіді (не обʼєднано) {#example-response-non-collated}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/images.zip",
|
||||
"originalSize": 5000000,
|
||||
"processedSize": 2400000,
|
||||
"pages": 2,
|
||||
"collated": false
|
||||
}
|
||||
```
|
||||
|
||||
## Приклад відповіді (з цільовим розміром) {#example-response-with-target-size}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/images.pdf",
|
||||
"originalSize": 10000000,
|
||||
"processedSize": 2000000,
|
||||
"pages": 5,
|
||||
"compression": {
|
||||
"targetRequested": 2097152,
|
||||
"targetMet": true,
|
||||
"jpegQuality": 72
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Зображення центруються на сторінці та масштабуються, щоб вміститися в межах полів зі збереженням співвідношення сторін. Зображення ніколи не збільшуються.
|
||||
- Коли `collate` — `false`, кожне зображення стає окремим файлом PDF, а завантаження — це ZIP-архів, що містить усі PDF.
|
||||
- Функція цільового розміру використовує ітеративний двійковий пошук за рівнями якості JPEG (10-95), щоб знайти найкращу якість, що вкладається в бюджет.
|
||||
- Прозорі зображення зводяться на білий колір перед вбудовуванням у PDF.
|
||||
- Підтримувані вхідні формати: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC, RAW, PSD, SVG та інші.
|
||||
- Орієнтація EXIF застосовується автоматично перед вбудовуванням.
|
||||
@@ -0,0 +1,92 @@
|
||||
---
|
||||
description: "Переглядайте детальні метадані зображення, властивості та поканальну статистику гістограми."
|
||||
i18n_source_hash: 8a0f7a0b0153
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: a792f2ff05e4
|
||||
---
|
||||
|
||||
# Інформація про зображення {#image-info}
|
||||
|
||||
Інструмент аналізу лише для читання, що повертає вичерпні метадані зображення, зокрема розміри, формат, колірний простір, наявність EXIF/ICC/XMP та поканальну статистику гістограми. Не створює оброблений вихідний файл.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/info`
|
||||
|
||||
Приймає дані форми multipart з файлом зображення. Поле налаштувань не потрібне.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
Цей інструмент не має параметрів, що налаштовуються. Просто завантажте файл зображення.
|
||||
|
||||
| Поле | Тип | Обовʼязкове | Опис |
|
||||
|-------|------|----------|-------------|
|
||||
| file | file | Так | Зображення для аналізу |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/info \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg"
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"filename": "photo.jpg",
|
||||
"fileSize": 2450000,
|
||||
"width": 4032,
|
||||
"height": 3024,
|
||||
"format": "jpeg",
|
||||
"channels": 3,
|
||||
"hasAlpha": false,
|
||||
"colorSpace": "srgb",
|
||||
"density": 72,
|
||||
"isProgressive": false,
|
||||
"orientation": 1,
|
||||
"hasProfile": true,
|
||||
"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 }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Поля відповіді {#response-fields}
|
||||
|
||||
| Поле | Тип | Опис |
|
||||
|-------|------|-------------|
|
||||
| filename | string | Очищене імʼя файлу |
|
||||
| fileSize | number | Розмір файлу в байтах |
|
||||
| width | number | Ширина зображення в пікселях |
|
||||
| height | number | Висота зображення в пікселях |
|
||||
| format | string | Виявлений формат (jpeg, png, webp тощо) |
|
||||
| channels | number | Кількість колірних каналів |
|
||||
| hasAlpha | boolean | Чи має зображення альфа-канал |
|
||||
| colorSpace | string | Колірний простір (srgb, cmyk тощо) |
|
||||
| density | number або null | Роздільна здатність DPI/PPI |
|
||||
| isProgressive | boolean | Чи використовує JPEG прогресивне кодування |
|
||||
| orientation | number або null | Значення орієнтації EXIF (1-8) |
|
||||
| hasProfile | boolean | Чи вбудований профіль ICC |
|
||||
| hasExif | boolean | Чи присутні метадані EXIF |
|
||||
| hasIcc | boolean | Чи присутній колірний профіль ICC |
|
||||
| hasXmp | boolean | Чи присутні метадані XMP |
|
||||
| bitDepth | string або null | Бітів на семпл |
|
||||
| pages | number | Кількість сторінок (для багатосторінкових форматів, як-от TIFF, GIF) |
|
||||
| histogram | array | Поканальна статистика (min, max, mean, стандартне відхилення) |
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Це кінцевий пункт лише для читання. Він не створює завантажуваного вихідного файлу чи `jobId`.
|
||||
- Для зображень у форматі RAW (DNG, CR2, NEF, ARW тощо) ExifTool використовується для витягування істинних розмірів сенсора та прапорців метаданих, які Sharp не може прочитати напряму.
|
||||
- Файли HEIC/HEIF декодуються в PNG внутрішньо для витягування піксельної статистики, оскільки Sharp не може декодувати пікселі HEVC.
|
||||
- Гістограма надає min/max/mean/stdev для кожного каналу, а не повний розподіл на 256 бінів.
|
||||
- Поле `density` відображає вбудовані метадані DPI, якщо вони присутні.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "Генеруйте крихітний низькоякісний плейсхолдер зображення з data URI у форматі base64."
|
||||
i18n_source_hash: f8a27c8021f5
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 4293d988254d
|
||||
---
|
||||
|
||||
# Плейсхолдер LQIP {#lqip-placeholder}
|
||||
|
||||
Генеруйте крихітний низькоякісний плейсхолдер зображення (LQIP) із вихідного зображення. Повертає невеликий файл плейсхолдера разом із data URI у форматі base64, готовим до використання тегом HTML `<img>` та фрагментом CSS `background-image` для негайного вбудовування.
|
||||
|
||||
## API Endpoint {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/lqip-placeholder`
|
||||
|
||||
Приймає дані форми multipart з файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обовʼязковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | Ні | `16` | Цільова ширина в пікселях (4-64) |
|
||||
| blur | number | Ні | `2` | Радіус розмиття для стратегії розмиття (0-20) |
|
||||
| strategy | string | Ні | `"blur"` | Стратегія плейсхолдера: `blur`, `pixelate` або `solid` |
|
||||
| format | string | Ні | `"webp"` | Формат виводу: `webp`, `png` або `jpeg` |
|
||||
| quality | integer | Ні | `50` | Якість виводу (1-100) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/lqip-placeholder \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"width": 20, "strategy": "blur", "format": "webp"}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.webp",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 280,
|
||||
"dataUri": "data:image/webp;base64,UklGR...",
|
||||
"width": 20,
|
||||
"height": 13,
|
||||
"bytes": 280,
|
||||
"strategy": "blur",
|
||||
"html": "<img src=\"data:image/webp;base64,UklGR...\" />",
|
||||
"css": "background-image:url('data:image/webp;base64,UklGR...');background-size:cover;background-position:center;"
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Поле `dataUri` містить повний data URI, готовий до використання в атрибутах `src` або CSS без додаткових запитів.
|
||||
- Поля `html` та `css` надають фрагменти для копіювання-вставлення для поширених випадків використання.
|
||||
- Стратегія `blur` дає мʼяку розмиту мініатюру. Стратегія `pixelate` створює блочну мозаїку. Стратегія `solid` повертає єдиний усереднений колір.
|
||||
- Типові розміри плейсхолдерів — 200-500 байтів, що робить їх придатними для вбудовування напряму в HTML.
|
||||
- Висота обчислюється автоматично для збереження співвідношення сторін вихідного зображення.
|
||||
- Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
@@ -0,0 +1,92 @@
|
||||
---
|
||||
description: "Створюйте меми за допомогою шаблонів або власних зображень, стилізованих текстових блоків і варіантів шрифтів."
|
||||
i18n_source_hash: 0a4970112ca6
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 1e719477cf0f
|
||||
---
|
||||
|
||||
# Генератор мемів {#meme-generator}
|
||||
|
||||
Створюйте меми, використовуючи вбудовані шаблони або власні зображення. Додавайте текст із класичним стилем мемів (жирний, обведений текст), кількома пресетами макетів і вибором шрифтів.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/meme-generator`
|
||||
|
||||
Приймає одне з двох:
|
||||
- **Дані форми multipart** із файлом зображення та полем JSON `settings` (режим власного зображення)
|
||||
- **Тіло JSON** із `templateId` (режим шаблону, завантаження файлу не потрібне)
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| templateId | string | Ні | - | ID вбудованого шаблону мема. Якщо вказано, завантаження зображення не потрібне |
|
||||
| textLayout | string | Ні | `"top-bottom"` | Макет текстових блоків: `top-bottom`, `top-only`, `bottom-only`, `center`, `side-by-side` |
|
||||
| textBoxes | array | Ні | `[]` | Масив об'єктів текстових блоків із полями `id` та `text` |
|
||||
| fontFamily | string | Ні | `"anton"` | Шрифт: `anton`, `arial-black`, `comic-sans`, `montserrat`, `bebas-neue`, `permanent-marker`, `roboto` |
|
||||
| fontSize | number | Ні | auto | Розмір шрифту в пікселях (від 8 до 200). Обчислюється автоматично, якщо не вказано |
|
||||
| textColor | string | Ні | `"#ffffff"` | Колір заливки тексту |
|
||||
| strokeColor | string | Ні | `"#000000"` | Колір обведення/контуру тексту |
|
||||
| textAlign | string | Ні | `"center"` | Вирівнювання тексту: `left`, `center`, `right` |
|
||||
| allCaps | boolean | Ні | `true` | Перетворити текст у верхній регістр |
|
||||
|
||||
### Текстові блоки {#text-boxes}
|
||||
|
||||
Кожен запис у масиві `textBoxes` повинен мати:
|
||||
|
||||
| Поле | Тип | Опис |
|
||||
|-------|------|-------------|
|
||||
| id | string | Ідентифікатор блока, що відповідає макету (наприклад, `"top"`, `"bottom"`, `"left"`, `"right"`, `"center"`) |
|
||||
| text | string | Текст мема для відображення |
|
||||
|
||||
### ID блоків макета тексту {#text-layout-box-ids}
|
||||
|
||||
| Макет | Доступні ID блоків |
|
||||
|--------|-------------------|
|
||||
| `top-bottom` | `top`, `bottom` |
|
||||
| `top-only` | `top` |
|
||||
| `bottom-only` | `bottom` |
|
||||
| `center` | `center` |
|
||||
| `side-by-side` | `left`, `right` |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
Власне зображення з верхнім і нижнім текстом:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/meme-generator \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"textLayout": "top-bottom", "textBoxes": [{"id": "top", "text": "When the code works"}, {"id": "bottom", "text": "On the first try"}], "fontFamily": "anton", "allCaps": true}'
|
||||
```
|
||||
|
||||
Використання вбудованого шаблону (тіло JSON, без завантаження файлу):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/meme-generator \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"templateId": "drake", "textBoxes": [{"id": "top", "text": "Manual testing"}, {"id": "bottom", "text": "Automated tests"}]}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/meme-drake.png",
|
||||
"originalSize": 450000,
|
||||
"processedSize": 520000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Потрібен або `templateId`, або завантажений файл зображення. Якщо вказати обидва, використовується шаблон.
|
||||
- Шаблони визначають власні позиції текстових блоків; параметр `textLayout` ігнорується при використанні шаблонів.
|
||||
- Текст рендериться як SVG з обведеними контурами для класичного вигляду мема.
|
||||
- Розмір шрифту обчислюється автоматично, щоб вписатися в текстовий блок, якщо його не задано явно.
|
||||
- Порожні текстові блоки пропускаються (рендеринг не відбувається, якщо всі блоки порожні).
|
||||
- Ім'я вихідного файлу містить ID шаблону при використанні шаблонів (наприклад, `meme-drake.png`).
|
||||
- Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
@@ -0,0 +1,79 @@
|
||||
---
|
||||
description: "Видалення шуму та зернистості на основі ШІ з багаторівневими варіантами якості."
|
||||
i18n_source_hash: f0dfc876e0e0
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 74555af5fd4d
|
||||
---
|
||||
|
||||
# Видалення шуму {#noise-removal}
|
||||
|
||||
Видалення шуму та зернистості на основі ШІ з багаторівневими варіантами якості, з використанням Python sidecar (модель SCUNet).
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/noise-removal`
|
||||
|
||||
**Обробка:** Асинхронна (повертає 202, опитуйте `/api/v1/jobs/{jobId}/progress` для отримання статусу через SSE)
|
||||
|
||||
**Пакет моделі:** `upscale-enhance` (5-6 ГБ)
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Так | - | Файл зображення (multipart) |
|
||||
| tier | string | Ні | `"balanced"` | Рівень якості: `quick`, `balanced`, `quality`, `maximum` |
|
||||
| strength | number | Ні | `50` | Сила шумозаглушення (0-100) |
|
||||
| detailPreservation | number | Ні | `50` | Наскільки зберігати деталі (0-100). Вищі значення зберігають більше текстури |
|
||||
| colorNoise | number | Ні | `30` | Сила зменшення кольорового шуму (0-100) |
|
||||
| format | string | Ні | `"original"` | Вихідний формат: `original`, `png`, `jpeg`, `webp`, `avif`, `jxl` |
|
||||
| quality | number | Ні | `90` | Якість вихідного кодування (1-100) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/noise-removal \
|
||||
-F "file=@noisy-photo.jpg" \
|
||||
-F 'settings={"tier":"quality","strength":60,"detailPreservation":70,"colorNoise":40}'
|
||||
```
|
||||
|
||||
## Відповідь {#response}
|
||||
|
||||
### Початкова відповідь (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Прогрес (SSE на `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Denoising...","percent":65}
|
||||
```
|
||||
|
||||
### Кінцевий результат (через SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/noisy-photo_denoised.jpg",
|
||||
"originalSize": 500000,
|
||||
"processedSize": 380000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Потребує встановлення пакета моделі `upscale-enhance` (5-6 ГБ).
|
||||
- Рівні якості обмінюють швидкість на якість: `quick` найшвидший із базовим шумозаглушенням, `maximum` використовує найретельніший багатопрохідний підхід.
|
||||
- Параметр `detailPreservation` критично важливий для текстурованих об'єктів (тканина, волосся, листя). Вищі значення не дають шумозаглушувачу згладжувати дрібні деталі.
|
||||
- Коли `format` встановлено в `"original"`, вихідний формат збігається з форматом вхідного файлу.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
description: "Витягуйте текст із зображень за допомогою оптичного розпізнавання символів на основі ШІ."
|
||||
i18n_source_hash: 3d85d423b82c
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 2379df96db26
|
||||
---
|
||||
|
||||
# OCR / Витяг тексту {#ocr-text-extraction}
|
||||
|
||||
Витягуйте текст із зображень за допомогою оптичного розпізнавання символів на основі ШІ. Підтримує кілька мов і рівнів якості.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/ocr`
|
||||
|
||||
**Обробка:** Синхронна відповідь JSON. Якщо вказано `clientJobId`, прогрес також повідомляється через SSE.
|
||||
|
||||
**Пакет моделі:** `ocr` (5-6 ГБ)
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Так | - | Файл зображення (multipart) |
|
||||
| quality | string | Ні | `"balanced"` | Рівень якості: `fast` (Tesseract), `balanced` (PaddleOCR v5), `best` (PaddleOCR VL) |
|
||||
| language | string | Ні | `"auto"` | Підказка мови: `auto`, `en`, `de`, `fr`, `es`, `zh`, `ja`, `ko` |
|
||||
| enhance | boolean | Ні | `true` | Попередня обробка зображення для кращої точності OCR |
|
||||
| engine | string | Ні | - | Застаріле. Використовуйте `quality` замість цього. Зіставляє `tesseract` з `fast`, `paddleocr` з `balanced` |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/ocr \
|
||||
-F "file=@document.png" \
|
||||
-F 'settings={"quality":"best","language":"en","enhance":true}'
|
||||
```
|
||||
|
||||
## Відповідь (200 OK) {#response-200-ok}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"filename": "document.png",
|
||||
"text": "Extracted text content from the image...",
|
||||
"engine": "paddleocr-vl"
|
||||
}
|
||||
```
|
||||
|
||||
### Прогрес (SSE, опціонально) {#progress-sse-optional}
|
||||
|
||||
Якщо вказано поле форми `clientJobId`, події прогресу передаються потоком:
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Recognizing text...","percent":50}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Потребує встановлення пакета моделі `ocr` (5-6 ГБ).
|
||||
- OCR повертає витягнутий текст безпосередньо, а не URL завантаження зображення.
|
||||
- Використовує ланцюжок відкату: якщо рівень вищої якості аварійно завершується (наприклад, segfault PaddleOCR), він автоматично повторює спробу з наступним нижчим рівнем.
|
||||
- Якщо рівень повертає порожній текст без аварійного завершення, він також відкочується до наступного рівня.
|
||||
- Рівні якості зіставляються з рушіями: `fast` = Tesseract, `balanced` = PaddleOCR v5, `best` = PaddleOCR VL.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
@@ -0,0 +1,74 @@
|
||||
---
|
||||
description: "Оптимізуйте зображення для веб-доставки з конвертацією формату, контролем якості, зміною розміру та видаленням метаданих."
|
||||
i18n_source_hash: c327bbbce768
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 78358ca44146
|
||||
---
|
||||
|
||||
# Оптимізація для вебу {#optimize-for-web}
|
||||
|
||||
Оптимізуйте зображення для веб-доставки в один крок. Поєднує конвертацію формату, налаштування якості, опціональну зміну розміру, прогресивне кодування та видалення метаданих.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/optimize-for-web`
|
||||
|
||||
Приймає дані форми multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
Також доступна кінцева точка живого попереднього перегляду на `POST /api/v1/tools/image/optimize-for-web/preview`, яка повертає оброблене зображення безпосередньо у двійковому вигляді (без створення робочої області) для налаштування параметрів у реальному часі.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| format | string | Ні | `"webp"` | Вихідний формат: `webp`, `jpeg`, `avif`, `png`, `jxl` |
|
||||
| quality | number | Ні | `80` | Вихідна якість (1-100) |
|
||||
| maxWidth | number | Ні | - | Максимальна ширина в пікселях. Зображення зменшується, якщо ширше. |
|
||||
| maxHeight | number | Ні | - | Максимальна висота в пікселях. Зображення зменшується, якщо вище. |
|
||||
| progressive | boolean | Ні | `true` | Увімкнути прогресивне/черезрядкове кодування |
|
||||
| stripMetadata | boolean | Ні | `true` | Видалити метадані EXIF, GPS, ICC та XMP |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/optimize-for-web \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"format": "webp", "quality": 75, "maxWidth": 1920}'
|
||||
```
|
||||
|
||||
Оптимізація для AVIF з агресивним стисненням:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/optimize-for-web \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"format": "avif", "quality": 50, "maxWidth": 1200, "maxHeight": 800}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.webp",
|
||||
"originalSize": 4500000,
|
||||
"processedSize": 320000
|
||||
}
|
||||
```
|
||||
|
||||
### Відповідь кінцевої точки попереднього перегляду {#preview-endpoint-response}
|
||||
|
||||
Кінцева точка попереднього перегляду (`/api/v1/tools/image/optimize-for-web/preview`) повертає двійкове зображення безпосередньо з інформаційними заголовками:
|
||||
|
||||
- `X-Original-Size` - Оригінальний розмір файлу в байтах
|
||||
- `X-Processed-Size` - Оброблений розмір файлу в байтах
|
||||
- `X-Output-Filename` - Ім'я вихідного файлу з кодуванням URL
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Цей інструмент розроблено як єдиний конвеєр оптимізації для веб-ресурсів. Він обробляє конвертацію формату, налаштування якості, обмеження максимальних розмірів і видалення метаданих за один прохід.
|
||||
- Розширення імені вихідного файлу оновлюється відповідно до обраного формату.
|
||||
- Кодування JXL (JPEG XL) використовує спеціалізований кодувальник CLI. Зображення спочатку обробляється як PNG, а потім кодується в JXL.
|
||||
- Прогресивне кодування покращує сприйняту швидкість завантаження для JPEG і PNG, дозволяючи браузерам відображати попередній перегляд низької якості до повного завантаження зображення.
|
||||
- Кінцева точка попереднього перегляду легша (без створення робочої області/завдання) і призначена для інтерфейсу живого налаштування параметрів фронтенду.
|
||||
@@ -0,0 +1,173 @@
|
||||
---
|
||||
description: "Генератор фото на паспорт та ID на основі ШІ з виявленням обличчя, видаленням фону та розкладкою для друку."
|
||||
i18n_source_hash: d4b4f4ced988
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 5b29b6c57ba1
|
||||
---
|
||||
|
||||
# Фото на паспорт {#passport-photo}
|
||||
|
||||
Генератор фото на паспорт та ID на основі ШІ. Двофазний робочий процес: аналіз (виявлення обличчя + видалення фону), потім генерація (обрізка, зміна розміру та розкладка для друку).
|
||||
|
||||
## Кінцеві точки API {#api-endpoints}
|
||||
|
||||
Цей інструмент використовує двофазний потік з окремими кінцевими точками для аналізу та генерації.
|
||||
|
||||
**Пакети моделей:** `background-removal` та `face-detection`
|
||||
|
||||
---
|
||||
|
||||
### Фаза 1: Аналіз {#phase-1-analyze}
|
||||
|
||||
`POST /api/v1/tools/image/passport-photo/analyze`
|
||||
|
||||
Виявляє орієнтири обличчя та видаляє фон. Повертає дані орієнтирів і попередній перегляд, щоб фронтенд відобразив попередній перегляд обрізки.
|
||||
|
||||
#### Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Так | - | Файл зображення (multipart) |
|
||||
| clientJobId | string | Ні | - | Опціональний ID завдання для відстеження прогресу через SSE |
|
||||
|
||||
#### Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/passport-photo/analyze \
|
||||
-F "file=@headshot.jpg"
|
||||
```
|
||||
|
||||
#### Відповідь (200 OK) {#response-200-ok}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"filename": "headshot.jpg",
|
||||
"preview": "<base64-encoded PNG>",
|
||||
"previewWidth": 800,
|
||||
"previewHeight": 1067,
|
||||
"landmarks": {
|
||||
"leftEye": { "x": 0.42, "y": 0.35 },
|
||||
"rightEye": { "x": 0.58, "y": 0.35 },
|
||||
"eyeCenter": { "x": 0.50, "y": 0.35 },
|
||||
"chin": { "x": 0.50, "y": 0.65 },
|
||||
"forehead": { "x": 0.50, "y": 0.22 },
|
||||
"crown": { "x": 0.50, "y": 0.18 },
|
||||
"nose": { "x": 0.50, "y": 0.48 },
|
||||
"faceCenterX": 0.50
|
||||
},
|
||||
"imageWidth": 2400,
|
||||
"imageHeight": 3200
|
||||
}
|
||||
```
|
||||
|
||||
#### Прогрес (SSE, опціонально) {#progress-sse-optional}
|
||||
|
||||
Якщо вказано `clientJobId`, прогрес передається потоком (0-30% для виявлення обличчя, 30-95% для видалення фону).
|
||||
|
||||
#### Помилка: Обличчя не виявлено (422) {#error-no-face-detected-422}
|
||||
|
||||
```json
|
||||
{
|
||||
"error": "No face detected",
|
||||
"details": "Could not detect a face in the uploaded image. Please upload a clear, front-facing photo with good lighting."
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Фаза 2: Генерація {#phase-2-generate}
|
||||
|
||||
`POST /api/v1/tools/image/passport-photo/generate`
|
||||
|
||||
Обрізає, змінює розмір та за бажанням розкладає фото на аркуш для друку. Використовує кешовані зображення з Фази 1 (без повторного запуску ШІ).
|
||||
|
||||
#### Параметри (тіло JSON) {#parameters-json-body}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| jobId | string | Так | - | ID завдання з Фази 1 |
|
||||
| filename | string | Так | - | Оригінальне ім'я файлу з Фази 1 |
|
||||
| countryCode | string | Так | - | Код країни для специфікації паспорта (наприклад, `US`, `GB`, `IN`) |
|
||||
| documentType | string | Ні | `"passport"` | Тип документа (зі специфікації країни) |
|
||||
| bgColor | string | Ні | `"#FFFFFF"` | Hex-код кольору фону |
|
||||
| printLayout | string | Ні | `"none"` | Розкладка паперу для друку: `none`, `4x6`, `a4` |
|
||||
| maxFileSizeKb | number | Ні | `0` | Обмеження максимального розміру файлу в КБ (0 = без обмеження) |
|
||||
| dpi | number | Ні | `300` | Вихідний DPI (72-1200) |
|
||||
| customWidthMm | number | Ні | - | Власна ширина фото в мм (перевизначає специфікацію країни) |
|
||||
| customHeightMm | number | Ні | - | Власна висота фото в мм (перевизначає специфікацію країни) |
|
||||
| zoom | number | Ні | `1` | Коефіцієнт масштабування (0.5-3). Значення > 1 обрізають тісніше |
|
||||
| adjustX | number | Ні | `0` | Коригування горизонтальної позиції |
|
||||
| adjustY | number | Ні | `0` | Коригування вертикальної позиції |
|
||||
| landmarks | object | Так | - | Об'єкт орієнтирів із відповіді Фази 1 |
|
||||
| imageWidth | number | Так | - | Ширина зображення з відповіді Фази 1 |
|
||||
| imageHeight | number | Так | - | Висота зображення з відповіді Фази 1 |
|
||||
|
||||
#### Приклад запиту {#example-request-1}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/passport-photo/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"jobId": "a1b2c3d4-...",
|
||||
"filename": "headshot.jpg",
|
||||
"countryCode": "US",
|
||||
"documentType": "passport",
|
||||
"bgColor": "#FFFFFF",
|
||||
"printLayout": "4x6",
|
||||
"dpi": 300,
|
||||
"zoom": 1,
|
||||
"adjustX": 0,
|
||||
"adjustY": 0,
|
||||
"landmarks": { "leftEye": {"x":0.42,"y":0.35}, "rightEye": {"x":0.58,"y":0.35}, "eyeCenter": {"x":0.50,"y":0.35}, "chin": {"x":0.50,"y":0.65}, "forehead": {"x":0.50,"y":0.22}, "crown": {"x":0.50,"y":0.18}, "nose": {"x":0.50,"y":0.48}, "faceCenterX": 0.50 },
|
||||
"imageWidth": 2400,
|
||||
"imageHeight": 3200
|
||||
}'
|
||||
```
|
||||
|
||||
#### Відповідь (200 OK) {#response-200-ok-1}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/headshot_passport.jpg",
|
||||
"dimensions": {
|
||||
"widthMm": 51,
|
||||
"heightMm": 51,
|
||||
"widthPx": 602,
|
||||
"heightPx": 602,
|
||||
"dpi": 300
|
||||
},
|
||||
"spec": {
|
||||
"country": "United States",
|
||||
"countryCode": "US",
|
||||
"documentType": "passport",
|
||||
"documentLabel": "Passport"
|
||||
},
|
||||
"printDownloadUrl": "/api/v1/download/{jobId}/headshot_passport_print_4x6.jpg"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Базовий маршрут {#base-route}
|
||||
|
||||
`POST /api/v1/tools/image/passport-photo`
|
||||
|
||||
Повертає вказівки щодо використання правильної підкінцевої точки.
|
||||
|
||||
```json
|
||||
{
|
||||
"error": "Use /api/v1/tools/image/passport-photo/analyze or /generate"
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Потребує встановлення пакетів моделей `background-removal` та `face-detection`.
|
||||
- Фаза 1 запускає ШІ (орієнтири обличчя + видалення фону) і кешує результати. Фаза 2 - це чиста маніпуляція зображенням Sharp (швидка, без потреби в ШІ).
|
||||
- Орієнтири повертаються як нормалізовані координати (діапазон 0-1 відносно розмірів зображення).
|
||||
- Поле `preview` у відповіді аналізу - це PNG у кодуванні base64 (максимум 800px завширшки) для швидкого відображення.
|
||||
- Специфікації країн включають розміри документа, співвідношення висоти голови та позиціонування лінії очей на основі офіційних вимог до фото на паспорт.
|
||||
- Опція `printLayout` генерує розкладений аркуш на папері 4x6\" або A4 з проміжками 2мм між фотографіями.
|
||||
- Коли встановлено `maxFileSizeKb`, вихідне зображення ітеративно стискається, щоб вписатися в обмеження розміру.
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
description: "Застосуйте ефект пікселізації до всього зображення або конкретної області."
|
||||
i18n_source_hash: a3ad29841f7b
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 56c99be0a923
|
||||
---
|
||||
|
||||
# Пікселізація {#pixelate}
|
||||
|
||||
Застосуйте ефект пікселізації до всього зображення або конкретної прямокутної області. Корисно для приховування конфіденційного вмісту, як-от обличчя, номерні знаки чи особиста інформація.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/pixelate`
|
||||
|
||||
Приймає дані форми multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| blockSize | integer | Ні | `12` | Розмір блока пікселів (2-128); більші значення дають грубшу пікселізацію |
|
||||
| region | object | Ні | - | Обмежити пікселізацію прямокутником (див. нижче) |
|
||||
|
||||
### Об'єкт області {#region-object}
|
||||
|
||||
| Поле | Тип | Обов'язкове | Опис |
|
||||
|-------|------|----------|-------------|
|
||||
| left | integer | Так | Зміщення зліва в пікселях (>= 0) |
|
||||
| top | integer | Так | Зміщення зверху в пікселях (>= 0) |
|
||||
| width | integer | Так | Ширина області в пікселях (>= 1) |
|
||||
| height | integer | Так | Висота області в пікселях (>= 1) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
Пікселізувати все зображення:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/pixelate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"blockSize": 20}'
|
||||
```
|
||||
|
||||
Пікселізувати конкретну область:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/pixelate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"blockSize": 16, "region": {"left": 100, "top": 50, "width": 200, "height": 150}}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2380000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Коли `region` не вказано, пікселізується все зображення.
|
||||
- Координати області вказуються в пікселях відносно верхнього лівого кута зображення. Область повинна знаходитися в межах зображення.
|
||||
- Вихідний формат збігається з вхідним. Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
@@ -0,0 +1,76 @@
|
||||
---
|
||||
description: "Генеруйте QR-коди з власними кольорами та рівнями корекції помилок."
|
||||
i18n_source_hash: 096ef4d90da5
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 1aa8cbe5b0df
|
||||
---
|
||||
|
||||
# Генератор QR-кодів {#qr-code-generator}
|
||||
|
||||
Генеруйте зображення QR-кодів із тексту або URL з налаштовуваним розміром, рівнем корекції помилок та власними кольорами переднього плану/фону.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/qr-generate`
|
||||
|
||||
Приймає **тіло JSON** (не multipart). Завантаження файлу не потрібне.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| text | string | Так | - | Вміст для кодування в QR-коді (від 1 до 2000 символів) |
|
||||
| size | number | Ні | `400` | Ширина/висота вихідного зображення в пікселях (від 100 до 10000) |
|
||||
| errorCorrection | string | Ні | `"M"` | Рівень корекції помилок: `L` (7%), `M` (15%), `Q` (25%), `H` (30%) |
|
||||
| foreground | string | Ні | `"#000000"` | Колір переднього плану/модуля QR-коду в hex (`#RRGGBB`) |
|
||||
| background | string | Ні | `"#FFFFFF"` | Колір фону QR-коду в hex (`#RRGGBB`) |
|
||||
| logoDataUri | string | Ні | - | Зображення логотипа як data URI (`data:image/png;base64,...` або `data:image/jpeg;base64,...`, максимум 700 КБ). Розміщується по центру QR-коду на 22% від розміру QR. Примусово встановлює корекцію помилок на `H` |
|
||||
|
||||
### Рівні корекції помилок {#error-correction-levels}
|
||||
|
||||
| Рівень | Відновлення | Випадок використання |
|
||||
|-------|----------|----------|
|
||||
| `L` | ~7% | Максимальна щільність даних |
|
||||
| `M` | ~15% | Збалансований (за замовчуванням) |
|
||||
| `Q` | ~25% | Добре для друкованих кодів |
|
||||
| `H` | ~30% | Найкраще для кодів із накладенням логотипа |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/qr-generate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"text": "https://snapotter.com", "size": 500, "errorCorrection": "H"}'
|
||||
```
|
||||
|
||||
Брендований QR-код із власними кольорами:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/qr-generate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"text": "Hello World", "size": 300, "foreground": "#1a365d", "background": "#f7fafc"}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/qrcode.png",
|
||||
"originalSize": 0,
|
||||
"processedSize": 4520
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Ця кінцева точка приймає JSON, а не дані форми multipart, оскільки завантаження зображення не потрібне.
|
||||
- Вихідне зображення завжди у форматі PNG.
|
||||
- Ім'я вихідного файлу завжди `qrcode.png`.
|
||||
- `originalSize` завжди дорівнює 0, оскільки цей інструмент генерує зображення з нуля.
|
||||
- Навколо QR-коду включено тиху зону (поле) у 2 модулі.
|
||||
- Максимальна довжина тексту становить 2000 символів. Фактична місткість залежить від рівня корекції помилок та кодування символів.
|
||||
- Вищі рівні корекції помилок дозволяють QR-коду залишатися придатним для сканування навіть за часткового перекриття, але зменшують місткість даних.
|
||||
- Коли вказано `logoDataUri`, корекція помилок автоматично примусово встановлюється на `H` (30%), щоб QR-код залишався придатним для сканування, незважаючи на те, що логотип закриває центр.
|
||||
@@ -0,0 +1,79 @@
|
||||
---
|
||||
description: "Виявлення та корекція ефекту червоних очей, спричиненого спалахом камери, на основі ШІ."
|
||||
i18n_source_hash: 647c6ff1ef7c
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 7200eace6961
|
||||
---
|
||||
|
||||
# Видалення червоних очей {#red-eye-removal}
|
||||
|
||||
Виявлення та корекція ефекту червоних очей, спричиненого спалахом камери, на основі ШІ.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/red-eye-removal`
|
||||
|
||||
**Обробка:** Асинхронна (повертає 202, опитуйте `/api/v1/jobs/{jobId}/progress` для отримання статусу через SSE)
|
||||
|
||||
**Пакет моделі:** `face-detection` (200-300 МБ)
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Так | - | Файл зображення (multipart) |
|
||||
| sensitivity | number | Ні | `50` | Чутливість виявлення червоних очей (0-100). Вищі значення виявляють більш тонкий ефект червоних очей |
|
||||
| strength | number | Ні | `70` | Сила корекції (0-100). Наскільки агресивно нейтралізувати червоний |
|
||||
| format | string | Ні | - | Вихідний формат (опціональне перевизначення) |
|
||||
| quality | number | Ні | `90` | Вихідна якість (1-100) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/red-eye-removal \
|
||||
-F "file=@flash-photo.jpg" \
|
||||
-F 'settings={"sensitivity":60,"strength":80}'
|
||||
```
|
||||
|
||||
## Відповідь {#response}
|
||||
|
||||
### Початкова відповідь (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Прогрес (SSE на `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Detecting red eyes...","percent":40}
|
||||
```
|
||||
|
||||
### Кінцевий результат (через SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/flash-photo_redeye_fixed.png",
|
||||
"originalSize": 280000,
|
||||
"processedSize": 290000,
|
||||
"facesDetected": 2,
|
||||
"eyesCorrected": 4
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Потребує встановлення пакета моделі `face-detection` (200-300 МБ).
|
||||
- Спочатку виявляє обличчя, потім знаходить області очей у межах кожного обличчя і нарешті визначає та коригує пікселі червоних очей.
|
||||
- Лічильник `facesDetected` вказує, скільки облич було знайдено; `eyesCorrected` - це загальна кількість окремих очей, для яких було виправлено ефект червоних очей.
|
||||
- Вихідне зображення завжди у форматі PNG для максимального збереження якості.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
@@ -0,0 +1,136 @@
|
||||
---
|
||||
description: "Видалення фону на основі ШІ з опціональними ефектами (розмиття, тінь, градієнт, власний фон)."
|
||||
i18n_source_hash: 326a91284529
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: f3e59f395434
|
||||
---
|
||||
|
||||
# Видалення фону {#remove-background}
|
||||
|
||||
Видалення фону на основі ШІ з опціональними ефектами (розмиття, тінь, градієнт, власний фон).
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/remove-background`
|
||||
|
||||
**Обробка:** Асинхронна (повертає 202, опитуйте `/api/v1/jobs/{jobId}/progress` для отримання статусу через SSE)
|
||||
|
||||
**Пакет моделі:** `background-removal` (4-5 ГБ)
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Так | - | Файл зображення (multipart) |
|
||||
| model | string | Ні | - | Варіант моделі ШІ для використання |
|
||||
| backgroundType | string | Ні | `"transparent"` | Один з: `transparent`, `color`, `gradient`, `blur`, `image` |
|
||||
| backgroundColor | string | Ні | - | Hex-код кольору для суцільного фону |
|
||||
| gradientColor1 | string | Ні | - | Перший колір градієнта |
|
||||
| gradientColor2 | string | Ні | - | Другий колір градієнта |
|
||||
| gradientAngle | number | Ні | - | Кут градієнта в градусах |
|
||||
| blurEnabled | boolean | Ні | - | Увімкнути ефект розмиття фону |
|
||||
| blurIntensity | number | Ні | - | Інтенсивність розмиття (0-100) |
|
||||
| shadowEnabled | boolean | Ні | - | Увімкнути падаючу тінь на об'єкті |
|
||||
| shadowOpacity | number | Ні | - | Непрозорість тіні (0-100) |
|
||||
| outputFormat | string | Ні | - | Вихідний формат: `png`, `webp` або `avif` |
|
||||
| edgeRefine | integer | Ні | - | Рівень уточнення країв (0-3) |
|
||||
| decontaminate | boolean | Ні | - | Видалити кольорові розтікання з країв |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/remove-background \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"backgroundType":"transparent","edgeRefine":2,"outputFormat":"png"}'
|
||||
```
|
||||
|
||||
## Відповідь {#response}
|
||||
|
||||
### Початкова відповідь (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Прогрес (SSE на `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Removing background...","percent":50}
|
||||
```
|
||||
|
||||
### Кінцевий результат (через SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/photo_mask.png",
|
||||
"maskUrl": "/api/v1/download/{jobId}/photo_mask.png",
|
||||
"originalUrl": "/api/v1/download/{jobId}/photo_original.png",
|
||||
"originalSize": 245000,
|
||||
"processedSize": 180000,
|
||||
"filename": "photo.jpg",
|
||||
"model": "rembg"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Кінцева точка ефектів (Фаза 2) {#effects-endpoint-phase-2}
|
||||
|
||||
`POST /api/v1/tools/image/remove-background/effects`
|
||||
|
||||
Повторно застосовує фонові ефекти без повторного запуску моделі ШІ. Використовує кешовану маску та оригінал з Фази 1.
|
||||
|
||||
### Параметри {#parameters-1}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| settings | JSON | Так | - | JSON із налаштуваннями ефектів (див. нижче) |
|
||||
| backgroundImage | file | Ні | - | Власне зображення фону (коли backgroundType дорівнює `image`) |
|
||||
|
||||
#### Поля JSON налаштувань {#settings-json-fields}
|
||||
|
||||
| Поле | Тип | Обов'язкове | Опис |
|
||||
|-------|------|----------|-------------|
|
||||
| jobId | string | Так | ID завдання з Фази 1 |
|
||||
| filename | string | Так | Оригінальне ім'я файлу з Фази 1 |
|
||||
| backgroundType | string | Ні | `transparent`, `color`, `gradient`, `blur`, `image` |
|
||||
| backgroundColor | string | Ні | Hex-код кольору для суцільного фону |
|
||||
| gradientColor1 | string | Ні | Перший колір градієнта |
|
||||
| gradientColor2 | string | Ні | Другий колір градієнта |
|
||||
| gradientAngle | number | Ні | Кут градієнта в градусах |
|
||||
| blurEnabled | boolean | Ні | Увімкнути розмиття фону |
|
||||
| blurIntensity | number | Ні | Інтенсивність розмиття (0-100) |
|
||||
| shadowEnabled | boolean | Ні | Увімкнути падаючу тінь |
|
||||
| shadowOpacity | number | Ні | Непрозорість тіні (0-100) |
|
||||
| outputFormat | string | Ні | `png`, `webp` або `avif` |
|
||||
|
||||
### Приклад запиту {#example-request-1}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/remove-background/effects \
|
||||
-F 'settings={"jobId":"a1b2c3d4-...","filename":"photo.jpg","backgroundType":"color","backgroundColor":"#FF5500","outputFormat":"png"}'
|
||||
```
|
||||
|
||||
### Відповідь (200 OK) {#response-200-ok}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/photo_nobg.png",
|
||||
"processedSize": 195000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Потребує встановлення пакета моделі `background-removal` (4-5 ГБ).
|
||||
- Фаза 1 кешує прозору маску та оригінальне зображення, щоб Фаза 2 (ефекти) могла миттєво повторно застосовувати різні фони без повторного запуску моделі ШІ.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
- Поворот EXIF автоматично коригується перед обробкою.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
description: "Замініть певний колір у зображенні іншим кольором або зробіть його прозорим."
|
||||
i18n_source_hash: df55ac451ecb
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 0ba93b0b0b14
|
||||
---
|
||||
|
||||
# Заміна та інверсія кольору {#replace-invert-color}
|
||||
|
||||
Замінюйте пікселі, що відповідають вихідному кольору, цільовим кольором або робіть їх прозорими. Використовує евклідову відстань у просторі RGB із налаштовуваним допуском для плавного змішування на межах кольорів.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/replace-color`
|
||||
|
||||
Приймає дані форми multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| sourceColor | string | Ні | `"#FF0000"` | Hex-колір для пошуку (формат: `#RRGGBB`) |
|
||||
| targetColor | string | Ні | `"#00FF00"` | Hex-колір для заміни (формат: `#RRGGBB`) |
|
||||
| makeTransparent | boolean | Ні | `false` | Зробити відповідні пікселі прозорими замість заміни цільовим кольором |
|
||||
| tolerance | number | Ні | `30` | Допуск відповідності кольору (від 0 до 255). Вищі значення відповідають ширшому діапазону схожих кольорів |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/replace-color \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"sourceColor": "#FF0000", "targetColor": "#0000FF", "tolerance": 40}'
|
||||
```
|
||||
|
||||
Зробити зелений фон прозорим:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/replace-color \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@greenscreen.png" \
|
||||
-F 'settings={"sourceColor": "#00FF00", "makeTransparent": true, "tolerance": 50}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.png",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2100000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Відповідність кольору використовує евклідову відстань у просторі RGB, масштабовану за `tolerance * sqrt(3)`.
|
||||
- Змішування заміни пропорційне відстані кольору: пікселі, ближчі до вихідного кольору, отримують більше цільового кольору, створюючи плавні переходи.
|
||||
- Коли `makeTransparent` дорівнює `true`, вихідне зображення примусово встановлюється у PNG (або WebP/AVIF), якщо вхідний формат не підтримує альфа-канали (наприклад, JPEG).
|
||||
- Допуск 0 відповідає лише точному вихідному кольору. Вищі значення (50+) відповідатимуть ширшому діапазону схожих відтінків.
|
||||
- Вихідний формат збігається з вхідним, якщо не потрібна прозорість і вхідний формат не має підтримки альфа-каналу.
|
||||
@@ -0,0 +1,72 @@
|
||||
---
|
||||
description: "Змінюйте розмір зображень за пікселями, відсотками або з режимами вписування."
|
||||
i18n_source_hash: 00d1bffa4d38
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: bd42371632d5
|
||||
---
|
||||
|
||||
# Зміна розміру {#resize}
|
||||
|
||||
Змінюйте розмір зображень, вказуючи точні розміри в пікселях, коефіцієнт масштабу у відсотках або режим вписування, який контролює, як зображення адаптується до цільових розмірів.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/resize`
|
||||
|
||||
Приймає дані форми multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | Ні | - | Цільова ширина в пікселях (максимум 16383) |
|
||||
| height | integer | Ні | - | Цільова висота в пікселях (максимум 16383) |
|
||||
| fit | string | Ні | `"contain"` | Як зображення вписується в розміри: `contain`, `cover`, `fill`, `inside`, `outside` |
|
||||
| withoutEnlargement | boolean | Ні | `false` | Запобігти збільшенню, якщо зображення менше за ціль |
|
||||
| percentage | number | Ні | - | Масштабувати за відсотком (наприклад, 50 для половинного розміру) |
|
||||
|
||||
Потрібно вказати принаймні один з `width`, `height` або `percentage`.
|
||||
|
||||
### Режими вписування {#fit-modes}
|
||||
|
||||
- **contain** - Змінити розмір, щоб вписатися в розміри, зберігаючи співвідношення сторін (може залишити порожній простір)
|
||||
- **cover** - Змінити розмір, щоб покрити розміри, зберігаючи співвідношення сторін (може обрізати)
|
||||
- **fill** - Розтягнути точно до розмірів (ігнорує співвідношення сторін)
|
||||
- **inside** - Як `contain`, але тільки зменшує, ніколи не збільшує
|
||||
- **outside** - Як `cover`, але тільки зменшує, ніколи не збільшує
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/resize \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"width": 800, "height": 600, "fit": "contain"}'
|
||||
```
|
||||
|
||||
Зміна розміру за відсотком:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/resize \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"percentage": 50}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 980000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Максимальний розмір становить 16383 пікселі по будь-якій осі (обмеження Sharp/libvips).
|
||||
- Вихідний формат збігається з вхідним. Вхідні дані HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
- Орієнтація EXIF автоматично застосовується перед зміною розміру.
|
||||
- Прапорець `withoutEnlargement` корисний для пакетної обробки, де деякі зображення можуть вже бути меншими за ціль.
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
description: "Виправляйте подряпини, розриви та пошкодження на старих фотографіях за допомогою конвеєра ШІ для реставрації, покращення обличчя та кольору."
|
||||
i18n_source_hash: 3de13284216c
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 045026bff6bc
|
||||
---
|
||||
|
||||
# Реставрація фото {#photo-restoration}
|
||||
|
||||
Виправляйте подряпини, розриви та пошкодження на старих фотографіях за допомогою багатоетапного конвеєра ШІ. Поєднує виправлення подряпин, покращення обличчя, шумозаглушення та опціональне розфарбовування.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/restore-photo`
|
||||
|
||||
**Обробка:** Асинхронна (повертає 202, опитуйте `/api/v1/jobs/{jobId}/progress` для отримання статусу через SSE)
|
||||
|
||||
**Пакет моделі:** `photo-restoration` (4-5 ГБ)
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Так | - | Файл зображення (multipart) |
|
||||
| scratchRemoval | boolean | Ні | `true` | Видалити подряпини та поверхневі пошкодження |
|
||||
| faceEnhancement | boolean | Ні | `true` | Покращити обличчя на відреставрованому фото |
|
||||
| fidelity | number | Ні | `0.7` | Точність покращення обличчя (0-1). Вищі значення більше зберігають оригінальні риси |
|
||||
| denoise | boolean | Ні | `true` | Застосувати шумозаглушення до відреставрованого результату |
|
||||
| denoiseStrength | number | Ні | `25` | Сила шумозаглушення (0-100) |
|
||||
| colorize | boolean | Ні | `false` | Розфарбувати відреставроване фото (для чорно-білих зображень) |
|
||||
| colorizeStrength | number | Ні | `85` | Інтенсивність розфарбовування (0-100) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/restore-photo \
|
||||
-F "file=@damaged-old-photo.jpg" \
|
||||
-F 'settings={"scratchRemoval":true,"faceEnhancement":true,"fidelity":0.6,"colorize":true}'
|
||||
```
|
||||
|
||||
## Відповідь {#response}
|
||||
|
||||
### Початкова відповідь (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Прогрес (SSE на `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Removing scratches...","percent":30}
|
||||
```
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Enhancing faces...","percent":60}
|
||||
```
|
||||
|
||||
### Кінцевий результат (через SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/damaged-old-photo_restored.jpg",
|
||||
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
|
||||
"originalSize": 200000,
|
||||
"processedSize": 350000,
|
||||
"width": 1200,
|
||||
"height": 900,
|
||||
"steps": ["scratch_removal", "face_enhancement", "denoise", "colorize"],
|
||||
"scratchCoverage": 12.5,
|
||||
"facesEnhanced": 2,
|
||||
"isGrayscale": true,
|
||||
"colorized": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Потребує встановлення пакета моделі `photo-restoration` (4-5 ГБ).
|
||||
- Конвеєр запускає кілька етапів ШІ послідовно: виправлення подряпин, покращення обличчя (GFPGAN), шумозаглушення та за бажанням розфарбовування.
|
||||
- Масив `steps` у результаті показує, які етапи обробки були фактично виконані.
|
||||
- `scratchCoverage` - це орієнтовний відсоток площі зображення, що мала пошкодження від подряпин.
|
||||
- `fidelity` контролює, наскільки сильно покращуються обличчя проти збереження оригінального вигляду. Нижчі значення дають агресивніше покращення; вищі значення більш консервативні.
|
||||
- Опція `colorize` автоматично визначає, чи є зображення чорно-білим. Прапорець `isGrayscale` у результаті підтверджує це виявлення.
|
||||
- Вихідний формат автоматично збігається з вхідним.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR, HDR та AVIF через автоматичне декодування.
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
description: "Обертайте зображення на будь-який кут та відображайте по горизонталі чи вертикалі."
|
||||
i18n_source_hash: af2581d7cd8d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 09ffa8b2a7e5
|
||||
---
|
||||
|
||||
# Обертання та відображення {#rotate-flip}
|
||||
|
||||
Обертайте зображення на довільний кут та/або відображайте їх по горизонталі чи вертикалі. Операції обертання та відображення можна поєднувати в одному запиті.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/rotate`
|
||||
|
||||
Приймає дані форми multipart із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов'язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| angle | number | Ні | `0` | Кут обертання в градусах (за годинниковою стрілкою). Приймає будь-яке числове значення. |
|
||||
| horizontal | boolean | Ні | `false` | Відобразити зображення по горизонталі (дзеркально) |
|
||||
| vertical | boolean | Ні | `false` | Відобразити зображення по вертикалі |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
Обернути на 90 градусів за годинниковою стрілкою:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/rotate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"angle": 90}'
|
||||
```
|
||||
|
||||
Відобразити по горизонталі:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/rotate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"horizontal": true}'
|
||||
```
|
||||
|
||||
Обернути та відобразити разом:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/rotate \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"angle": 45, "vertical": true}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2480000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Спочатку застосовується обертання, потім операції відображення.
|
||||
- Обертання не на 90 градусів (наприклад, 45 градусів) збільшать полотно, щоб вмістити обернуте зображення, із прозорою або чорною заливкою залежно від вихідного формату.
|
||||
- Поширені значення: 90, 180, 270 для обертань на чверть оберту.
|
||||
- Орієнтація EXIF автоматично застосовується перед обробкою, тому обертання відбувається відносно візуальної орієнтації.
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
description: "Підвищення різкості зображень за допомогою адаптивного методу, маски нерізкості або високочастотного фільтра з опційним придушенням шуму."
|
||||
i18n_source_hash: ccb60af9faae
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 8b5f716bfdd6
|
||||
---
|
||||
|
||||
# Підвищення різкості {#sharpening}
|
||||
|
||||
Просунутий інструмент підвищення різкості з трьома методами: адаптивний (розумне врахування країв), маска нерізкості (класичні радіус/величина) та високочастотний фільтр (акцент на текстурі). Містить вбудоване придушення шуму, щоб запобігти артефактам різкості.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/sharpening`
|
||||
|
||||
Приймає багаточастинні дані форми із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| method | string | Ні | `"adaptive"` | Алгоритм підвищення різкості: `adaptive`, `unsharp-mask`, `high-pass` |
|
||||
| sigma | number | Ні | `1.0` | Адаптивний: гаусова сигма (від 0.5 до 10) |
|
||||
| m1 | number | Ні | `1.0` | Адаптивний: підвищення різкості на рівних ділянках (від 0 до 10) |
|
||||
| m2 | number | Ні | `3.0` | Адаптивний: підвищення різкості на зубчастих ділянках (від 0 до 20) |
|
||||
| x1 | number | Ні | `2.0` | Адаптивний: поріг між рівними та зубчастими ділянками (від 0 до 10) |
|
||||
| y2 | number | Ні | `12` | Адаптивний: максимальне підвищення різкості на рівних ділянках (від 0 до 50) |
|
||||
| y3 | number | Ні | `20` | Адаптивний: максимальне підвищення різкості на зубчастих ділянках (від 0 до 50) |
|
||||
| amount | number | Ні | `100` | Маска нерізкості: величина підвищення різкості (від 0 до 1000) |
|
||||
| radius | number | Ні | `1.0` | Маска нерізкості: радіус розмиття у пікселях (від 0.1 до 5) |
|
||||
| threshold | number | Ні | `0` | Маска нерізкості: мінімальна різниця яскравості для підвищення різкості (від 0 до 255) |
|
||||
| strength | number | Ні | `50` | Високочастотний: сила фільтра (від 0 до 100) |
|
||||
| kernelSize | number | Ні | `3` | Високочастотний: розмір ядра згортки (3 або 5) |
|
||||
| denoise | string | Ні | `"off"` | Придушення шуму перед підвищенням різкості: `off`, `light`, `medium`, `strong` |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/sharpening \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"method": "adaptive", "sigma": 1.5}'
|
||||
```
|
||||
|
||||
Маска нерізкості з порогом для захисту гладких ділянок:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/sharpening \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"method": "unsharp-mask", "amount": 150, "radius": 1.5, "threshold": 10}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2510000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Використовуються лише параметри, релевантні для обраного методу. Наприклад, `amount`, `radius` та `threshold` ігноруються, коли `method` дорівнює `adaptive`.
|
||||
- Адаптивний метод використовує вбудоване адаптивне підвищення різкості Sharp із налаштовуваною поведінкою для рівних/зубчастих ділянок.
|
||||
- Опція `denoise` застосовує придушення шуму перед підвищенням різкості, щоб запобігти посиленню шуму/зернистості.
|
||||
- Високочастотне підвищення різкості виділяє дрібні деталі, віднімаючи розмиту версію від оригіналу, а потім знову змішуючи їх.
|
||||
- Формат виводу відповідає формату вводу. Вхідні файли HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
description: "Обрізка з урахуванням об’єкта, обличчя та ентропії, що інтелектуально кадрує зображення за допомогою Sharp та розпізнавання облич ШІ."
|
||||
i18n_source_hash: acbe1439c6d8
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: e230987207b9
|
||||
---
|
||||
|
||||
# Розумна обрізка {#smart-crop}
|
||||
|
||||
Розумна обрізка з урахуванням об’єкта, обличчя або на основі обтинання. Використовує стратегії уваги/ентропії Sharp та розпізнавання облич ШІ для інтелектуального кадрування.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/smart-crop`
|
||||
|
||||
**Обробка:** Асинхронна (повертає 202, опитуйте `/api/v1/jobs/{jobId}/progress` щодо стану через SSE)
|
||||
|
||||
**Пакет моделі:** `face-detection` (200-300 МБ) - потрібен лише для режиму `face`
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Так | - | Файл зображення (багаточастинний) |
|
||||
| mode | string | Ні | `"subject"` | Режим обрізки: `subject`, `face`, `trim`. (Застарілі значення `attention` та `content` відображаються на `subject` та `trim`) |
|
||||
| strategy | string | Ні | `"attention"` | Стратегія для режиму об’єкта: `attention` або `entropy` |
|
||||
| width | integer | Ні | - | Цільова ширина у пікселях |
|
||||
| height | integer | Ні | - | Цільова висота у пікселях |
|
||||
| padding | integer | Ні | `0` | Відсоток відступу навколо об’єкта (0-50) |
|
||||
| facePreset | string | Ні | `"head-shoulders"` | Пресет кадрування обличчя: `closeup`, `head-shoulders`, `upper-body`, `half-body` |
|
||||
| sensitivity | number | Ні | `0.5` | Чутливість розпізнавання облич (0-1) |
|
||||
| threshold | integer | Ні | `30` | Поріг режиму обтинання для розпізнавання фону (0-255) |
|
||||
| padToSquare | boolean | Ні | `false` | Доповнити обтятий результат до квадрата |
|
||||
| padColor | string | Ні | `"#ffffff"` | Колір фону для доповнення |
|
||||
| targetSize | integer | Ні | - | Цільовий розмір для доповненого виводу (пікселі) |
|
||||
| quality | integer | Ні | - | Якість виводу (1-100) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/smart-crop \
|
||||
-F "file=@portrait.jpg" \
|
||||
-F 'settings={"mode":"face","width":1080,"height":1080,"facePreset":"head-shoulders"}'
|
||||
```
|
||||
|
||||
## Відповідь {#response}
|
||||
|
||||
### Початкова відповідь (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Прогрес (SSE на `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","percent":50}
|
||||
```
|
||||
|
||||
### Кінцевий результат (через SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/portrait_smartcrop.jpg",
|
||||
"originalSize": 500000,
|
||||
"processedSize": 320000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Режими {#modes}
|
||||
|
||||
### Режим об’єкта {#subject-mode}
|
||||
Використовує стратегію уваги або ентропії Sharp, щоб знайти найбільш візуально цікаву ділянку, і обрізає навколо неї.
|
||||
|
||||
### Режим обличчя {#face-mode}
|
||||
Розпізнає обличчя за допомогою ШІ, а потім кадрує обрізку навколо виявлених облич, використовуючи вказаний `facePreset`. Повертається до режиму об’єкта (стратегія уваги), якщо обличчя не виявлено.
|
||||
|
||||
### Режим обтинання {#trim-mode}
|
||||
Видаляє однорідні межі/фон із зображення. За бажанням доповнює результат до квадрата з указаним кольором фону та цільовим розміром.
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Цей інструмент використовує фабрику `createToolRoute` з `executionHint: "long"`, тому повертає 202 із прогресом SSE.
|
||||
- Режим обличчя потребує пакета моделі `face-detection` (200-300 МБ).
|
||||
- Режими об’єкта та обтинання працюють без жодного пакета моделі ШІ.
|
||||
- `facePreset` визначає, наскільки щільно обрізка кадрує виявлені обличчя: `closeup` — найщільніший, `half-body` — найширший.
|
||||
- Якщо ширину/висоту не вказано, за замовчуванням береться 1080x1080.
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
description: "Розділення одного зображення на плитки сітки за рядками та стовпцями або за розміром у пікселях, повертається як архів ZIP."
|
||||
i18n_source_hash: 57a2e11e7cce
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 428b04bfeb55
|
||||
---
|
||||
|
||||
# Розділення зображення {#image-splitting}
|
||||
|
||||
Розділіть одне зображення на плитки сітки за кількістю стовпців/рядків або за конкретними розмірами у пікселях. Повертає архів ZIP, що містить усі плитки.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/split`
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| columns | integer | Ні | 3 | Кількість стовпців для розділення (від 1 до 100) |
|
||||
| rows | integer | Ні | 3 | Кількість рядків для розділення (від 1 до 100) |
|
||||
| tileWidth | integer | Ні | - | Ширина плитки у пікселях (мін. 10). Перевизначає `columns`, коли встановлено обидва `tileWidth` та `tileHeight`. |
|
||||
| tileHeight | integer | Ні | - | Висота плитки у пікселях (мін. 10). Перевизначає `rows`, коли встановлено обидва `tileWidth` та `tileHeight`. |
|
||||
| outputFormat | string | Ні | `"original"` | Формат виводу для плиток: `original`, `png`, `jpg`, `webp`, `avif`, `jxl` |
|
||||
| quality | number | Ні | 90 | Якість виводу для форматів зі втратами (від 1 до 100) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/split \
|
||||
-F "file=@large-image.png" \
|
||||
-F 'settings={"columns":3,"rows":3,"outputFormat":"png"}' \
|
||||
--output split-tiles.zip
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
Відповідь передається безпосередньо як файл ZIP із `Content-Type: application/zip`. Ім’я файлу відповідає шаблону `split-<jobId>.zip`.
|
||||
|
||||
Кожна плитка всередині ZIP має ім’я `<originalBaseName>_r<row>_c<col>.<ext>` (напр. `photo_r1_c1.png`, `photo_r2_c3.webp`).
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Приймає один файл зображення.
|
||||
- Підтримує вхідні формати HEIC, RAW, PSD та SVG (автоматично декодуються).
|
||||
- Коли надано обидва `tileWidth` та `tileHeight`, вони мають пріоритет над `columns`/`rows`. Розміри сітки обчислюються як `ceil(imageWidth / tileWidth)` та `ceil(imageHeight / tileHeight)`.
|
||||
- Крайові плитки (крайній правий стовпець, нижній рядок) можуть бути меншими за вказаний розмір плитки, якщо розміри зображення не діляться націло.
|
||||
- Максимальний розмір сітки обмежено 100x100 (10 000 плиток).
|
||||
- Відповідь передає ZIP безпосередньо, тому тіла відповіді JSON немає. Використовуйте `--output` з curl, щоб зберегти файл.
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
description: "Об’єднання кількох зображень в єдину сітку спрайт-аркуша з метаданими кадрів."
|
||||
i18n_source_hash: 1938d7fb100d
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 3b0e731af8c4
|
||||
---
|
||||
|
||||
# Спрайт-аркуш {#sprite-sheet}
|
||||
|
||||
Об’єднайте кілька зображень в єдину сітку спрайт-аркуша. Кожне зображення масштабується відповідно до розмірів першого зображення та розміщується в сітці. Повертає зображення спрайт-аркуша разом із метаданими координат для кожного кадру.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/sprite-sheet`
|
||||
|
||||
Приймає багаточастинні дані форми з двома або більше файлами зображень та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| columns | integer | Ні | `4` | Кількість стовпців у сітці (1-16) |
|
||||
| padding | integer | Ні | `0` | Відступ між клітинками у пікселях (0-64) |
|
||||
| background | string | Ні | `"#ffffff"` | Шістнадцятковий колір фону |
|
||||
| format | string | Ні | `"png"` | Формат виводу: `png`, `webp` або `jpeg` |
|
||||
| quality | integer | Ні | `90` | Якість виводу (1-100) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/sprite-sheet \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@frame1.png" \
|
||||
-F "file=@frame2.png" \
|
||||
-F "file=@frame3.png" \
|
||||
-F "file=@frame4.png" \
|
||||
-F 'settings={"columns": 2, "padding": 4, "format": "png"}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/sprite-sheet.png",
|
||||
"originalSize": 120000,
|
||||
"processedSize": 95000,
|
||||
"frames": [
|
||||
{ "index": 0, "left": 0, "top": 0, "width": 128, "height": 128 },
|
||||
{ "index": 1, "left": 132, "top": 0, "width": 128, "height": 128 },
|
||||
{ "index": 2, "left": 0, "top": 132, "width": 128, "height": 128 },
|
||||
{ "index": 3, "left": 132, "top": 132, "width": 128, "height": 128 }
|
||||
],
|
||||
"cols": 2,
|
||||
"rows": 2,
|
||||
"cellWidth": 128,
|
||||
"cellHeight": 128,
|
||||
"canvasWidth": 260,
|
||||
"canvasHeight": 260
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Приймає від 2 до 64 зображень. Усі зображення масштабуються відповідно до розмірів першого завантаженого зображення.
|
||||
- Масив `frames` надає точні піксельні координати кожного кадру у виводі, придатні для визначень CSS-спрайтів або карт кадрів ігрового рушія.
|
||||
- Кількість рядків обчислюється автоматично з кількості зображень та значення `columns`.
|
||||
- Використовуйте параметр `padding`, щоб додати проміжок між клітинками. Колір `background` видно в ділянках відступів та будь-яких порожніх кінцевих клітинках.
|
||||
- Вхідні файли HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
@@ -0,0 +1,63 @@
|
||||
---
|
||||
description: "Об’єднання зображень поруч, з накладанням або в сітці з керуванням вирівнюванням, проміжками, межами та режимом зміни розміру."
|
||||
i18n_source_hash: 39333210505a
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: c4ebc858c103
|
||||
---
|
||||
|
||||
# Зшивання / Об’єднання {#stitch-combine}
|
||||
|
||||
Об’єднайте кілька зображень поруч, з вертикальним накладанням або в сітці. Підтримує вирівнювання, проміжок, межу, радіус кута та кілька режимів зміни розміру.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/stitch`
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| direction | string | Ні | `"horizontal"` | Напрямок компонування: `horizontal`, `vertical`, `grid` |
|
||||
| gridColumns | integer | Ні | 2 | Кількість стовпців, коли напрямок — `grid` (від 2 до 100) |
|
||||
| resizeMode | string | Ні | `"fit"` | Як зображення змінюють розмір: `fit`, `original`, `stretch`, `crop` |
|
||||
| alignment | string | Ні | `"center"` | Вирівнювання поперечної осі: `start`, `center`, `end` |
|
||||
| gap | number | Ні | 0 | Проміжок між зображеннями у пікселях (від 0 до 1000) |
|
||||
| border | number | Ні | 0 | Ширина зовнішньої межі у пікселях (від 0 до 500) |
|
||||
| cornerRadius | number | Ні | 0 | Радіус кута, застосований до кінцевого виводу (від 0 до 500) |
|
||||
| backgroundColor | string | Ні | `"#FFFFFF"` | Колір фону/межі у шістнадцятковому форматі (напр. `#FF0000`) |
|
||||
| format | string | Ні | `"png"` | Формат виводу: `png`, `jpeg`, `webp`, `avif`, `jxl` |
|
||||
| quality | number | Ні | 90 | Якість виводу (від 1 до 100) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/stitch \
|
||||
-F "file=@image1.png" \
|
||||
-F "file=@image2.png" \
|
||||
-F "file=@image3.png" \
|
||||
-F 'settings={"direction":"horizontal","resizeMode":"fit","gap":10,"backgroundColor":"#FFFFFF","format":"png"}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/stitch.png",
|
||||
"originalSize": 1234567,
|
||||
"processedSize": 987654
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Потрібно щонайменше 2 зображення. Завантажте кілька файлів зображень у багаточастинному запиті.
|
||||
- Підтримує вхідні формати HEIC, RAW, PSD та SVG (автоматично декодуються).
|
||||
- Режими зміни розміру:
|
||||
- `fit` - Масштабує зображення відповідно до найменшого розміру вздовж осі об’єднання.
|
||||
- `original` - Зберігає оригінальні розміри (може призвести до нерівних країв).
|
||||
- `stretch` - Примусово приводить зображення до найменшого розміру без збереження співвідношення сторін.
|
||||
- `crop` - Обрізає зображення з покриттям, щоб відповідати найменшому розміру.
|
||||
- У режимі `grid` клітинки набувають розмірів, що відповідають медіанним розмірам усіх зображень.
|
||||
- `cornerRadius` застосовується до всього кінцевого виводу, а не до окремих зображень.
|
||||
- Розмір полотна обмежено конфігурацією сервера `MAX_CANVAS_PIXELS`, щоб запобігти вичерпанню пам’яті.
|
||||
@@ -0,0 +1,113 @@
|
||||
---
|
||||
description: "Видалення метаданих EXIF, GPS, ICC та XMP із зображень для конфіденційності та зменшення розміру файлів."
|
||||
i18n_source_hash: e89147734fd0
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 93185dd2ce7b
|
||||
---
|
||||
|
||||
# Видалення метаданих {#remove-metadata}
|
||||
|
||||
Видаліть метадані EXIF, GPS, кольорові профілі ICC та метадані XMP із зображень. Корисно для конфіденційності (видалення GPS-координат, інформації про камеру) та зменшення розміру файлу.
|
||||
|
||||
## Кінцеві точки API {#api-endpoints}
|
||||
|
||||
### Видалити метадані {#strip-metadata}
|
||||
|
||||
`POST /api/v1/tools/image/strip-metadata`
|
||||
|
||||
Обробляє зображення та повертає очищену версію з видаленими обраними метаданими.
|
||||
|
||||
### Оглянути метадані {#inspect-metadata}
|
||||
|
||||
`POST /api/v1/tools/image/strip-metadata/inspect`
|
||||
|
||||
Повертає розібрані метадані у форматі JSON без зміни зображення. Корисно для попереднього перегляду наявних метаданих перед видаленням.
|
||||
|
||||
## Параметри (Видалення) {#parameters-strip}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| stripExif | boolean | Ні | `false` | Видалити дані EXIF (налаштування камери, дати тощо) |
|
||||
| stripGps | boolean | Ні | `false` | Видалити лише дані GPS/розташування |
|
||||
| stripIcc | boolean | Ні | `false` | Видалити кольоровий профіль ICC |
|
||||
| stripXmp | boolean | Ні | `false` | Видалити метадані XMP (Adobe, IPTC) |
|
||||
| stripAll | boolean | Ні | `true` | Видалити всі метадані одразу |
|
||||
|
||||
Коли `stripAll` дорівнює `true`, це перевизначає окремі прапорці та видаляє все.
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
Видалити всі метадані:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/strip-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"stripAll": true}'
|
||||
```
|
||||
|
||||
Видалити лише дані GPS (зберегти інформацію про камеру та кольоровий профіль):
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/strip-metadata \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"stripAll": false, "stripGps": true}'
|
||||
```
|
||||
|
||||
Оглянути метадані без зміни:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/strip-metadata/inspect \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg"
|
||||
```
|
||||
|
||||
## Приклад відповіді (Видалення) {#example-response-strip}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2380000
|
||||
}
|
||||
```
|
||||
|
||||
## Приклад відповіді (Огляд) {#example-response-inspect}
|
||||
|
||||
```json
|
||||
{
|
||||
"filename": "photo.jpg",
|
||||
"fileSize": 2450000,
|
||||
"exif": {
|
||||
"Make": "Canon",
|
||||
"Model": "EOS R5",
|
||||
"DateTimeOriginal": "2024:03:15 14:30:00",
|
||||
"ExposureTime": "1/250",
|
||||
"FNumber": 2.8,
|
||||
"ISO": 400
|
||||
},
|
||||
"gps": {
|
||||
"GPSLatitudeRef": "N",
|
||||
"GPSLatitude": [37, 46, 30],
|
||||
"_latitude": 37.775,
|
||||
"_longitude": -122.4183
|
||||
},
|
||||
"icc": {
|
||||
"Profile Size": "3144 bytes",
|
||||
"Color Space": "RGB",
|
||||
"Description": "sRGB IEC61966-2.1"
|
||||
},
|
||||
"xmp": {
|
||||
"CreatorTool": "Adobe Photoshop 25.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Зображення повторно кодується у своєму оригінальному форматі після видалення. JPEG використовує mozjpeg з якістю 90, PNG використовує рівень стиснення 9, WebP використовує якість 85.
|
||||
- Видалення профілів ICC може спричинити ледь помітні зсуви кольору, якщо зображення було позначене профілем, відмінним від sRGB. Використовуйте `stripIcc: false`, якщо точність кольору має значення.
|
||||
- Кінцева точка огляду розбирає GPS-координати на десяткові значення широти/довготи (із префіксом підкреслення) для зручності.
|
||||
- Підтримувані вхідні формати: JPEG, PNG, WebP, AVIF, TIFF, GIF.
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
description: "Конвертація файлів SVG у PNG, JPEG, WebP, AVIF, TIFF, GIF, HEIF або JXL з довільною роздільною здатністю та DPI, з підтримкою пакетної обробки."
|
||||
i18n_source_hash: cf36830f8797
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: babd1aef9097
|
||||
---
|
||||
|
||||
# SVG у растр {#svg-to-raster}
|
||||
|
||||
Конвертуйте файли SVG у растрові формати зображень (PNG, JPEG, WebP, AVIF, TIFF, GIF, HEIF або JXL) з довільною роздільною здатністю та DPI. Також підтримує пакетну конвертацію кількох SVG.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/svg-to-raster`
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| width | integer | Ні | - | Цільова ширина у пікселях (від 1 до 65536). Зберігає співвідношення сторін, якщо встановлено лише один розмір. |
|
||||
| height | integer | Ні | - | Цільова висота у пікселях (від 1 до 65536). Зберігає співвідношення сторін, якщо встановлено лише один розмір. |
|
||||
| dpi | integer | Ні | 300 | DPI рендерингу, керує базовою щільністю растеризації (від 36 до 2400) |
|
||||
| quality | number | Ні | 90 | Якість виводу для форматів зі втратами (від 1 до 100) |
|
||||
| backgroundColor | string | Ні | `"#00000000"` | Колір фону у шістнадцятковому форматі (6 або 8 символів, 8-символьний включає альфа) |
|
||||
| outputFormat | string | Ні | `"png"` | Формат виводу: `png`, `jpg`, `webp`, `avif`, `tiff`, `gif`, `heif`, `jxl` |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/svg-to-raster \
|
||||
-F "file=@logo.svg" \
|
||||
-F 'settings={"width":1024,"dpi":300,"outputFormat":"png","backgroundColor":"#FFFFFF"}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/logo.png",
|
||||
"previewUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/preview.webp",
|
||||
"originalSize": 12345,
|
||||
"processedSize": 67890
|
||||
}
|
||||
```
|
||||
|
||||
## Кінцева точка пакетної обробки {#batch-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/svg-to-raster/batch`
|
||||
|
||||
Конвертуйте кілька файлів SVG в одному запиті. Повертає архів ZIP.
|
||||
|
||||
### Додаткові параметри пакетної обробки {#additional-batch-parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| clientJobId | string | Ні | - | Необов’язковий наданий клієнтом ідентифікатор завдання для відстеження прогресу (макс. 128 символів) |
|
||||
|
||||
### Приклад запиту пакетної обробки {#batch-example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/svg-to-raster/batch \
|
||||
-F "file=@icon1.svg" \
|
||||
-F "file=@icon2.svg" \
|
||||
-F "file=@icon3.svg" \
|
||||
-F 'settings={"width":512,"outputFormat":"png","dpi":150}'
|
||||
```
|
||||
|
||||
### Відповідь пакетної обробки {#batch-response}
|
||||
|
||||
Кінцева точка пакетної обробки передає файл ZIP безпосередньо із заголовками:
|
||||
- `Content-Type: application/zip`
|
||||
- `X-Job-Id: <jobId>`
|
||||
- `X-File-Results: <url-encoded JSON mapping of index to filename>`
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Приймає лише файли SVG та SVGZ (перевіряє вміст, а не лише розширення). SVGZ автоматично розпаковується.
|
||||
- Вміст SVG санітизується перед рендерингом, щоб запобігти XSS та завантаженню зовнішніх ресурсів.
|
||||
- Налаштування `dpi` керує щільністю, з якою растеризується SVG. Вищий DPI дає більші піксельні розміри з того самого вікна перегляду SVG.
|
||||
- Коли надано обидва `width` та `height`, зображення масштабується за допомогою `fit: inside` (зберігає співвідношення сторін у межах меж).
|
||||
- `previewUrl` включається до відповіді для форматів, які браузери не можуть відобразити нативно (TIFF, HEIF). Попередній перегляд — це мініатюра WebP розміром 1200px.
|
||||
- Стандартний фон `#00000000` є повністю прозорим. Встановіть `#FFFFFF` для білого фону (корисно для виводу JPEG, який не підтримує прозорість).
|
||||
- Пакетна обробка враховує конфігурацію сервера `MAX_BATCH_SIZE` і використовує паралельні робочі процеси для продуктивності.
|
||||
- Прогрес пакетних операцій можна відстежувати через SSE на `/api/v1/jobs/:jobId/progress`.
|
||||
@@ -0,0 +1,66 @@
|
||||
---
|
||||
description: "Додавання стилізованих текстових накладень із тінями та фоновими блоками."
|
||||
i18n_source_hash: 9f8e697188fc
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 8ec0271e6fe8
|
||||
---
|
||||
|
||||
# Текстове накладення {#text-overlay}
|
||||
|
||||
Додайте стилізований текст на зображення з опційною тінню та напівпрозорим фоновим блоком. Підходить для заголовків, підписів або анотацій на фотографіях.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/text-overlay`
|
||||
|
||||
Приймає багаточастинні дані форми із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| text | string | Так | - | Текст для накладення (від 1 до 500 символів) |
|
||||
| fontSize | number | Ні | `48` | Розмір шрифту у пікселях (від 8 до 200) |
|
||||
| color | string | Ні | `"#FFFFFF"` | Колір тексту у шістнадцятковому форматі (`#RRGGBB`) |
|
||||
| position | string | Ні | `"bottom"` | Вертикальне розміщення: `top`, `center`, `bottom` |
|
||||
| backgroundBox | boolean | Ні | `false` | Показувати напівпрозорий фоновий прямокутник за текстом |
|
||||
| backgroundColor | string | Ні | `"#000000"` | Колір фонового блоку у шістнадцятковому форматі (`#RRGGBB`) |
|
||||
| shadow | boolean | Ні | `true` | Застосувати тінь за текстом |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/text-overlay \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"text": "Hello World", "fontSize": 64, "color": "#FFFFFF", "position": "bottom", "shadow": true}'
|
||||
```
|
||||
|
||||
З фоновим блоком:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/text-overlay \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"text": "Caption", "fontSize": 36, "position": "bottom", "backgroundBox": true, "backgroundColor": "#000000"}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2470000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Текст завжди центрується горизонтально в межах зображення.
|
||||
- Тінь використовує зсув 2px із розмиттям 3px при 70% чорної непрозорості.
|
||||
- Фоновий блок охоплює всю ширину зображення при 70% непрозорості, з висотою, пропорційною розміру шрифту (1.8x).
|
||||
- Текст рендериться через SVG-композит, тому використовується стандартний шрифт без засічок системи.
|
||||
- XML-спеціальні символи в тексті безпечно екрануються.
|
||||
- Формат виводу відповідає формату вводу. Вхідні файли HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
@@ -0,0 +1,78 @@
|
||||
---
|
||||
description: "Виправлення фейкових прозорих PNG за допомогою ШІ-матування (BiRefNet) для отримання справжньої альфи, а також очищення країв методом дефринджу."
|
||||
i18n_source_hash: 7eb748b80f93
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 7f0b6f87571e
|
||||
---
|
||||
|
||||
# Виправлення прозорості PNG {#png-transparency-fixer}
|
||||
|
||||
Виправте фейкові прозорі PNG одним кліком. Використовує ШІ-матування (модель BiRefNet HR Matting) для отримання справжньої альфа-прозорості, з постобробкою дефринджу для очищення країв.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/transparency-fixer`
|
||||
|
||||
**Обробка:** Асинхронна (повертає 202, опитуйте `/api/v1/jobs/{jobId}/progress` щодо стану через SSE)
|
||||
|
||||
**Пакет моделі:** `background-removal` (4-5 ГБ)
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Так | - | Файл зображення (багаточастинний) |
|
||||
| defringe | number | Ні | `30` | Інтенсивність дефринджу (0-100). Видаляє напівпрозорі бахромисті пікселі навколо країв |
|
||||
| outputFormat | string | Ні | `"png"` | Формат виводу: `png` або `webp` |
|
||||
| removeWatermark | boolean | Ні | `false` | Застосувати попередню обробку видалення водяного знака (медіанний фільтр) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/transparency-fixer \
|
||||
-F "file=@fake-transparent.png" \
|
||||
-F 'settings={"defringe":40,"outputFormat":"png"}'
|
||||
```
|
||||
|
||||
## Відповідь {#response}
|
||||
|
||||
### Початкова відповідь (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Прогрес (SSE на `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Processing transparency...","percent":50}
|
||||
```
|
||||
|
||||
### Кінцевий результат (через SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/fake-transparent_fixed.png",
|
||||
"originalSize": 180000,
|
||||
"processedSize": 150000,
|
||||
"filename": "fake-transparent.png"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Потребує встановленого пакета моделі `background-removal` (4-5 ГБ).
|
||||
- Використовує `birefnet-hr-matting` як основну модель для високоякісного альфа-матування. Повертається до `birefnet-general`, якщо HR-моделі бракує пам’яті.
|
||||
- Опція `defringe` видаляє напівпрозорі бахромисті пікселі, які ШІ-матування іноді залишає навколо волосся, хутра та тонких країв. Вона працює шляхом розмиття альфа-каналу та обнулення пікселів із низькою впевненістю.
|
||||
- Опція `removeWatermark` застосовує крок попередньої обробки медіанним фільтром. Це базове зменшення водяного знака, а не спеціалізований інструмент видалення водяних знаків.
|
||||
- Виводить лише PNG або WebP без втрат (обидва підтримують альфа-прозорість).
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
description: "Збільшення зображень від 2x до 4x за допомогою ШІ-суперроздільності Real-ESRGAN зі збереженням дрібних деталей."
|
||||
i18n_source_hash: 150032e99476
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 4f3e6be56147
|
||||
---
|
||||
|
||||
# Збільшення зображення {#image-upscaling}
|
||||
|
||||
Покращення ШІ-суперроздільності за допомогою Real-ESRGAN. Збільшує зображення в 2x-4x зі збереженням деталей.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/upscale`
|
||||
|
||||
**Обробка:** Асинхронна (повертає 202, опитуйте `/api/v1/jobs/{jobId}/progress` щодо стану через SSE)
|
||||
|
||||
**Пакет моделі:** `upscale-enhance` (5-6 ГБ)
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| file | file | Так | - | Файл зображення (багаточастинний) |
|
||||
| scale | number | Ні | `2` | Коефіцієнт збільшення (напр., 2, 3, 4) |
|
||||
| model | string | Ні | `"auto"` | Модель для використання (напр., `auto`, конкретні назви моделей) |
|
||||
| faceEnhance | boolean | Ні | `false` | Застосувати покращення обличчя під час збільшення |
|
||||
| denoise | number | Ні | `0` | Сила придушення шуму (0 = вимкнено) |
|
||||
| format | string | Ні | `"auto"` | Формат виводу: `auto`, `png`, `jpg`, `webp`, `tiff`, `gif`, `avif`, `heic`, `heif`, `jxl` |
|
||||
| quality | number | Ні | `95` | Якість виводу (1-100) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/upscale \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"scale":4,"model":"auto","faceEnhance":true,"format":"png"}'
|
||||
```
|
||||
|
||||
## Відповідь {#response}
|
||||
|
||||
### Початкова відповідь (202 Accepted) {#initial-response-202-accepted}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"async": true
|
||||
}
|
||||
```
|
||||
|
||||
### Прогрес (SSE на `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
|
||||
|
||||
```
|
||||
event: progress
|
||||
data: {"phase":"processing","stage":"Upscaling...","percent":60}
|
||||
```
|
||||
|
||||
### Кінцевий результат (через SSE) {#final-result-via-sse}
|
||||
|
||||
```json
|
||||
{
|
||||
"phase": "complete",
|
||||
"percent": 100,
|
||||
"result": {
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/{jobId}/photo_4x.png",
|
||||
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
|
||||
"originalSize": 120000,
|
||||
"processedSize": 2400000,
|
||||
"width": 4096,
|
||||
"height": 4096,
|
||||
"method": "realesrgan-x4plus"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Потребує встановленого пакета моделі `upscale-enhance` (5-6 ГБ).
|
||||
- Використовує Real-ESRGAN, коли він доступний; повертається до інтерполяції Lanczos, якщо ШІ-модель недоступна.
|
||||
- Опція `faceEnhance` застосовує відновлення обличчя GFPGAN під час збільшення для кращої якості обличчя.
|
||||
- Для форматів виводу, які не можна переглянути в браузері (HEIC, JXL, TIFF), поряд з основним виводом генерується попередній перегляд WebP.
|
||||
- Підтримує вхідні формати HEIC/HEIF, RAW, TGA, PSD, EXR та HDR через автоматичне декодування.
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
description: "Конвертація растрових зображень у SVG з чорно-білою (potrace) та повнокольоровою багатошаровою векторизацією."
|
||||
i18n_source_hash: f3e4777188ad
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 2e26e5dc43e9
|
||||
---
|
||||
|
||||
# Зображення у SVG {#image-to-svg}
|
||||
|
||||
Векторизуйте растрові зображення у SVG за допомогою алгоритмів трасування. Підтримує чорно-біле трасування (potrace) та повнокольорову багатошарову векторизацію.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/vectorize`
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| colorMode | string | Ні | `"bw"` | Режим трасування: `bw` (чорно-білий) або `color` (багатокольорові шари) |
|
||||
| threshold | number | Ні | 128 | Поріг яскравості для Ч/Б режиму (від 0 до 255). Пікселі нижче стають чорними. |
|
||||
| colorPrecision | number | Ні | 6 | Точність квантування кольору для кольорового режиму (від 1 до 16). Вищі значення дають більше окремих кольорових шарів. |
|
||||
| layerDifference | number | Ні | 6 | Мінімальна різниця кольору між шарами в кольоровому режимі (від 1 до 128) |
|
||||
| filterSpeckle | number | Ні | 4 | Мінімальна площа для трасованих фігур у пікселях (від 1 до 256). Видаляє шум/крапинки. |
|
||||
| pathMode | string | Ні | `"spline"` | Згладжування контурів: `none` (зубчасті), `polygon` (прямі сегменти), `spline` (плавні криві) |
|
||||
| cornerThreshold | number | Ні | 60 | Поріг кута для розпізнавання кутів у кольоровому режимі (від 0 до 180 градусів) |
|
||||
| invert | boolean | Ні | `false` | Інвертувати зображення перед трасуванням (поміняти чорний/білий місцями) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/vectorize \
|
||||
-F "file=@logo.png" \
|
||||
-F 'settings={"colorMode":"bw","threshold":128,"filterSpeckle":4,"pathMode":"spline"}'
|
||||
```
|
||||
|
||||
### Кольорова векторизація {#color-vectorization}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/vectorize \
|
||||
-F "file=@illustration.png" \
|
||||
-F 'settings={"colorMode":"color","colorPrecision":8,"layerDifference":6,"filterSpeckle":4}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/logo.svg",
|
||||
"originalSize": 45678,
|
||||
"processedSize": 12345
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Вивід завжди є файлом SVG незалежно від формату вводу.
|
||||
- Підтримує вхідні формати HEIC, RAW, PSD та SVG (автоматично декодуються в растр перед трасуванням).
|
||||
- Ч/Б режим використовує алгоритм potrace. Зображення спочатку конвертується у відтінки сірого, потім порогується до чистого чорного/білого перед трасуванням.
|
||||
- Кольоровий режим використовує багатошаровий підхід: зображення квантується на кольорові шари, кожен трасується окремо та накладається у виводі SVG.
|
||||
- Нижчі значення `filterSpeckle` зберігають більше деталей, але дають більші файли SVG з більшою кількістю контурів.
|
||||
- Налаштування `pathMode` суттєво впливає на розмір файлу: `none` дає найбільше контурів, `spline` дає найплавніший (і зазвичай найменший) вивід.
|
||||
- Для найкращих результатів із логотипами та іконками використовуйте Ч/Б режим із чистим високо контрастним вводом. Для фотографій чи ілюстрацій використовуйте кольоровий режим із вищим `colorPrecision`.
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
description: "Додавання ефекту віньєтки з регульованою силою, кольором та положенням."
|
||||
i18n_source_hash: 0b9795fea2eb
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: be0b7728c13c
|
||||
---
|
||||
|
||||
# Віньєтка {#vignette}
|
||||
|
||||
Додайте ефект віньєтки, що затемнює або тонує краї зображення. Підтримує регульовані силу, колір, радіус, м’якість, округлість та положення центру.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/vignette`
|
||||
|
||||
Приймає багаточастинні дані форми із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| strength | number | Ні | `0.5` | Непрозорість віньєтки (0.1-1) |
|
||||
| color | string | Ні | `"#000000"` | Шістнадцятковий колір віньєтки |
|
||||
| radius | integer | Ні | `70` | Зовнішній радіус як відсоток половини діагоналі (0-100) |
|
||||
| softness | integer | Ні | `50` | М’якість розтушовування (0-100); вищі значення дають більш поступове згасання |
|
||||
| roundness | integer | Ні | `100` | Форма: 100 = коло, 0 = еліпс відповідно до співвідношення сторін зображення |
|
||||
| centerX | integer | Ні | `50` | Горизонтальне положення центру у відсотках (0-100) |
|
||||
| centerY | integer | Ні | `50` | Вертикальне положення центру у відсотках (0-100) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/vignette \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"strength": 0.7, "radius": 60, "softness": 70}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2410000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Менший `radius` затемнює більшу частину зображення; більший радіус обмежує віньєтку крайніми краями.
|
||||
- Використовуйте нечорний `color` (напр., білий або сепію) для творчих ефектів віньєтки.
|
||||
- Регулювання `centerX` та `centerY` дозволяє розмістити чисту ділянку зі зміщенням від центру, що корисно для привернення уваги до об’єкта, який не в центрі кадру.
|
||||
- Формат виводу відповідає формату вводу. Вхідні файли HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
description: "Накладення логотипа чи зображення як водяного знака з налаштовуваним положенням, непрозорістю та масштабом."
|
||||
i18n_source_hash: c73ab0ef8ab9
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: c977242e2b89
|
||||
---
|
||||
|
||||
# Водяний знак зображенням {#image-watermark}
|
||||
|
||||
Накладіть логотип чи вторинне зображення як водяний знак на базове зображення. Водяний знак масштабується відносно ширини базового зображення та розміщується в кутку або центрі.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/watermark-image`
|
||||
|
||||
Приймає багаточастинні дані форми з **двома** файлами зображень та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| position | string | Ні | `"bottom-right"` | Розміщення водяного знака: `center`, `top-left`, `top-right`, `bottom-left`, `bottom-right` |
|
||||
| opacity | number | Ні | `50` | Відсоток непрозорості водяного знака (від 0 до 100) |
|
||||
| scale | number | Ні | `25` | Ширина водяного знака як відсоток ширини основного зображення (від 1 до 100) |
|
||||
|
||||
### Поля файлів {#file-fields}
|
||||
|
||||
| Ім’я поля | Обов’язкове | Опис |
|
||||
|------------|----------|-------------|
|
||||
| file | Так | Основне/базове зображення |
|
||||
| watermark | Так | Зображення водяного знака/логотипа |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/watermark-image \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F "watermark=@logo.png" \
|
||||
-F 'settings={"position": "bottom-right", "opacity": 60, "scale": 20}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2520000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Обидва зображення перевіряються та декодуються (підтримуються HEIC, RAW, PSD, SVG).
|
||||
- Водяний знак масштабується пропорційно, тож його ширина дорівнює `scale`% ширини основного зображення.
|
||||
- Непрозорість застосовується через альфа-маску, скомпоновану зі змішуванням `dest-in`.
|
||||
- Кутові положення використовують відступ 20px від краю зображення.
|
||||
- Якщо зображення водяного знака має прозорість (напр., PNG-логотип), вона зберігається під час компонування.
|
||||
- Орієнтація EXIF автоматично застосовується до обох зображень перед обробкою.
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
description: "Додавання текстових водяних знаків із налаштовуваним положенням, непрозорістю, обертанням та мозаїчним повторенням."
|
||||
i18n_source_hash: b80f12f410e4
|
||||
i18n_provenance: human
|
||||
i18n_output_hash: 6b9fc76a1a3d
|
||||
---
|
||||
|
||||
# Текстовий водяний знак {#text-watermark}
|
||||
|
||||
Додайте текстове накладення водяного знака на зображення. Підтримує одиночне розміщення в кутах/центрі або мозаїчне повторення по всьому зображенню, з налаштовуваними розміром шрифту, кольором, непрозорістю та обертанням.
|
||||
|
||||
## Кінцева точка API {#api-endpoint}
|
||||
|
||||
`POST /api/v1/tools/image/watermark-text`
|
||||
|
||||
Приймає багаточастинні дані форми із файлом зображення та полем JSON `settings`.
|
||||
|
||||
## Параметри {#parameters}
|
||||
|
||||
| Параметр | Тип | Обов’язковий | За замовчуванням | Опис |
|
||||
|-----------|------|----------|---------|-------------|
|
||||
| text | string | Так | - | Текст водяного знака (від 1 до 500 символів) |
|
||||
| fontSize | number | Ні | `48` | Розмір шрифту у пікселях (від 8 до 1000) |
|
||||
| color | string | Ні | `"#000000"` | Колір тексту у шістнадцятковому форматі (`#RRGGBB`) |
|
||||
| opacity | number | Ні | `50` | Відсоток непрозорості тексту (від 0 до 100) |
|
||||
| position | string | Ні | `"center"` | Розміщення: `center`, `top-left`, `top-right`, `bottom-left`, `bottom-right`, `tiled` |
|
||||
| rotation | number | Ні | `0` | Кут обертання тексту у градусах (від -360 до 360) |
|
||||
|
||||
## Приклад запиту {#example-request}
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/watermark-text \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"text": "SAMPLE", "fontSize": 64, "opacity": 30, "position": "center", "rotation": -30}'
|
||||
```
|
||||
|
||||
Мозаїчний водяний знак по всьому зображенню:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:1349/api/v1/tools/image/watermark-text \
|
||||
-H "Authorization: Bearer si_your-api-key" \
|
||||
-F "file=@photo.jpg" \
|
||||
-F 'settings={"text": "DRAFT", "fontSize": 36, "opacity": 20, "position": "tiled", "rotation": -45}'
|
||||
```
|
||||
|
||||
## Приклад відповіді {#example-response}
|
||||
|
||||
```json
|
||||
{
|
||||
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
|
||||
"originalSize": 2450000,
|
||||
"processedSize": 2480000
|
||||
}
|
||||
```
|
||||
|
||||
## Примітки {#notes}
|
||||
|
||||
- Водяний знак рендериться як SVG-текст і компонується на зображення, зберігаючи якість виводу.
|
||||
- Мозаїчний режим розміщує текстові елементи на основі розміру шрифту (проміжки 6x горизонтально, 4x вертикально), з обмеженням максимум у 500 елементів.
|
||||
- Для кутових положень відступ від краю дорівнює розміру шрифту.
|
||||
- Використовуваний шрифт — це стандартний шрифт без засічок системи.
|
||||
- XML-спеціальні символи в тексті (`&`, `<`, `>`, `"`, `'`) безпечно екрануються.
|
||||
- Формат виводу відповідає формату вводу. Вхідні файли HEIC, RAW, PSD та SVG автоматично декодуються перед обробкою.
|
||||
Reference in New Issue
Block a user