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:
SnapOtter
2026-07-11 13:52:47 +08:00
committed by GitHub
parent 00b651c9f8
commit 4963ab3bbd
3620 changed files with 306134 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
---
description: "Dostosuj jasność, kontrast, nasycenie, temperaturę, odcień, kanały i zastosuj efekty kolorystyczne."
i18n_source_hash: 41b35fe5c2ba
i18n_provenance: human
i18n_output_hash: 0b53e6a1f986
---
# Dostosuj kolory {#adjust-colors}
Kompleksowe narzędzie do dostosowywania kolorów, łączące jasność, kontrast, ekspozycję, nasycenie, temperaturę, tinting, obrót odcienia, poziomy poszczególnych kanałów oraz efekty jednym kliknięciem (skala szarości, sepia, inwersja) w jednym punkcie końcowym.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/adjust-colors`
Przyjmuje dane formularza multipart z plikiem obrazu oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| brightness | number | Nie | `0` | Regulacja jasności (-100 do 100) |
| contrast | number | Nie | `0` | Regulacja kontrastu (-100 do 100) |
| exposure | number | Nie | `0` | Ekspozycja / gamma tonów średnich (-100 do 100) |
| saturation | number | Nie | `0` | Nasycenie koloru (-100 do 100) |
| temperature | number | Nie | `0` | Balans bieli: chłodny/niebieski do ciepłego/pomarańczowego (-100 do 100) |
| tint | number | Nie | `0` | Przesunięcie odcienia: zielony do magenty (-100 do 100) |
| hue | number | Nie | `0` | Obrót odcienia w stopniach (-180 do 180) |
| sharpness | number | Nie | `0` | Siła wyostrzania (0 do 100) |
| red | number | Nie | `100` | Poziom kanału czerwonego (0 do 200, 100 = bez zmian) |
| green | number | Nie | `100` | Poziom kanału zielonego (0 do 200, 100 = bez zmian) |
| blue | number | Nie | `100` | Poziom kanału niebieskiego (0 do 200, 100 = bez zmian) |
| effect | string | Nie | `"none"` | Efekt kolorystyczny: `none`, `grayscale`, `sepia`, `invert` |
## Przykładowe żądanie {#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"}'
```
Zastosuj ciepły, vintage'owy wygląd:
```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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2380000
}
```
## Uwagi {#notes}
- Wszystkie parametry mają domyślnie wartości neutralne, więc możesz regulować tylko to, czego potrzebujesz.
- Regulacje są stosowane w tej kolejności: jasność, kontrast, ekspozycja, nasycenie/odcień, temperatura/tint, wyostrzanie, kanały, efekty.
- Temperatura używa macierzy rekombinacji kolorów 3x3 na osiach niebiesko-pomarańczowej i zielono-magentowej.
- Ekspozycja mapuje się na funkcję gamma Sharpa (wartości dodatnie rozjaśniają tony średnie, ujemne je przyciemniają).
- Ten punkt końcowy odpowiada również pod starszymi ścieżkami `/api/v1/tools/image/brightness-contrast`, `/api/v1/tools/image/saturation`, `/api/v1/tools/image/color-channels` oraz `/api/v1/tools/image/color-effects`. Wszystkie używają tego samego schematu.
- Format wyjściowy odpowiada formatowi wejściowemu. Dane wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetworzeniem.
@@ -0,0 +1,84 @@
---
description: "Rozszerz płótno obrazu za pomocą AI outpaintingu, powiększając je w dowolnym kierunku i wypełniając nowe obszary tak, aby pasowały do oryginału."
i18n_source_hash: 1b00db4ed40d
i18n_provenance: human
i18n_output_hash: 2fecd7b7e469
---
# Rozszerzanie płótna AI {#ai-canvas-expand}
Rozszerz płótno obrazu za pomocą wypełniania wspomaganego przez AI (outpainting). Powiększa obraz w dowolnym kierunku i wypełnia nowe obszary treścią wygenerowaną przez AI, która pasuje do istniejącego obrazu.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/ai-canvas-expand`
**Przetwarzanie:** Asynchroniczne (zwraca 202, odpytuj `/api/v1/jobs/{jobId}/progress` o status przez SSE)
**Pakiet modelu:** `object-eraser-colorize` (1-2 GB)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| extendTop | integer | Nie | `0` | Piksele do rozszerzenia u góry |
| extendRight | integer | Nie | `0` | Piksele do rozszerzenia po prawej |
| extendBottom | integer | Nie | `0` | Piksele do rozszerzenia u dołu |
| extendLeft | integer | Nie | `0` | Piksele do rozszerzenia po lewej |
| tier | string | Nie | `"balanced"` | Poziom jakości: `fast`, `balanced`, `high` |
| format | string | Nie | `"auto"` | Format wyjściowy: `auto`, `png`, `jpg`, `jpeg`, `webp`, `tiff`, `gif`, `avif`, `heic`, `heif`, `jxl` |
| quality | integer | Nie | `95` | Jakość wyjściowa (1-100) |
Co najmniej jeden kierunek rozszerzenia musi być większy niż 0.
## Przykładowe żądanie {#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"}'
```
## Odpowiedź {#response}
### Odpowiedź początkowa (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Postęp (SSE pod `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Expanding canvas...","percent":50}
```
### Wynik końcowy (przez 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
}
}
```
## Uwagi {#notes}
- Wymaga zainstalowanego pakietu modelu `object-eraser-colorize` (1-2 GB).
- Używa outpaintingu opartego na LaMa do generowania treści dla rozszerzonych obszarów.
- Parametr `tier` wymienia szybkość na jakość: `fast` daje wyniki szybko, z możliwymi artefaktami, `high` trwa dłużej, ale daje gładsze, bardziej spójne wypełnienia.
- Wartości rozszerzenia są w pikselach. Ostateczne wymiary obrazu wyniosą: szerokość oryginału + extendLeft + extendRight na wysokość oryginału + extendTop + extendBottom.
- Dla formatów wyjściowych niemożliwych do podglądu w przeglądarce (HEIC, JXL, TIFF) obok głównego wyniku generowany jest podgląd WebP.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
@@ -0,0 +1,55 @@
---
description: "Zamień tło obrazu na jednolity kolor lub gradient za pomocą AI."
i18n_source_hash: 930fe8890e55
i18n_provenance: human
i18n_output_hash: bb4f654dfdc7
---
# Zamiana tła {#background-replace}
Zamień tło obrazu na jednolity kolor lub gradient. Model AI wykrywa obiekt, usuwa oryginalne tło i komponuje obiekt na wybranym przez Ciebie tle.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/background-replace`
Przyjmuje dane formularza multipart z plikiem obrazu oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| backgroundType | string | Nie | `"color"` | Tryb tła: `color` lub `gradient` |
| color | string | Nie | `"#ffffff"` | Kolor tła w formacie hex (gdy backgroundType to `color`) |
| gradientColor1 | string | Nie | - | Pierwszy kolor gradientu w formacie hex |
| gradientColor2 | string | Nie | - | Drugi kolor gradientu w formacie hex |
| gradientAngle | integer | Nie | `180` | Kąt gradientu w stopniach (0-360) |
| feather | integer | Nie | `0` | Promień wygładzania krawędzi (0-20) |
| format | string | Nie | `"png"` | Format wyjściowy: `png` lub `webp` |
## Przykładowe żądanie {#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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
Śledź postęp przez SSE pod `GET /api/v1/jobs/{jobId}/progress`. Po zakończeniu zadania strumień SSE emituje zdarzenie `completed` z adresem URL pobierania.
## Uwagi {#notes}
- To narzędzie wspomagane przez AI, które zwraca `202 Accepted` i przetwarza asynchronicznie. Połącz się z punktem końcowym SSE, aby otrzymywać aktualizacje postępu i wynik końcowy.
- Wymaga zainstalowanego pakietu funkcji **background-removal**. Zwraca `501`, jeśli pakiet nie jest dostępny.
- Dane wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetworzeniem.
- Wynik domyślnie jest w formacie PNG, aby zachować przezroczystość wokół obiektu.
@@ -0,0 +1,52 @@
---
description: "Generuj kody kreskowe w formatach Code 128, EAN-13, UPC-A, Code 39, ITF-14 i Data Matrix."
i18n_source_hash: e84b1df40c7e
i18n_provenance: human
i18n_output_hash: 8cf4c56ce48d
---
# Generator kodów kreskowych {#barcode-generator}
Generuj obrazy kodów kreskowych z wprowadzonego tekstu. Obsługuje formaty Code 128, EAN-13, UPC-A, Code 39, ITF-14 i Data Matrix.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/barcode-generate`
Przyjmuje treść `application/json` (nie multipart). Kod kreskowy jest generowany z podanego tekstu, a nie z przesłanego pliku.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| text | string | Tak | - | Tekst do zakodowania w kodzie kreskowym (1-256 znaków) |
| type | string | Nie | `"code128"` | Format kodu kreskowego: `code128`, `ean13`, `upca`, `code39`, `itf14`, `datamatrix` |
| scale | integer | Nie | `3` | Współczynnik skali obrazu (1-8) |
| includeText | boolean | Nie | `true` | Czy renderować tekst pod kodem kreskowym |
## Przykładowe żądanie {#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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/barcode.png",
"originalSize": 0,
"processedSize": 4520
}
```
## Uwagi {#notes}
- W przeciwieństwie do większości narzędzi ten punkt końcowy przyjmuje treść JSON, a nie dane formularza multipart, ponieważ kody kreskowe są generowane z tekstu, a nie z przesłanego pliku.
- EAN-13 wymaga dokładnie 12 lub 13 cyfr. UPC-A wymaga dokładnie 11 lub 12 cyfr. Jeśli cyfra kontrolna zostanie pominięta, jest obliczana automatycznie.
- Code 128 jest najbardziej elastycznym formatem i obsługuje pełny zestaw znaków ASCII.
- Data Matrix tworzy dwuwymiarowy kod kreskowy odpowiedni do kodowania dłuższych ciągów w zwartym kwadracie.
+97
View File
@@ -0,0 +1,97 @@
---
description: "Skanuj obrazy w poszukiwaniu kodów QR, kodów kreskowych i kodów 2D z opatrzonym adnotacjami wynikiem."
i18n_source_hash: 97c9d395c257
i18n_provenance: human
i18n_output_hash: c1e42f2999ca
---
# Czytnik kodów kreskowych {#barcode-reader}
Skanuj przesłane obrazy w poszukiwaniu wszystkich typów kodów kreskowych i kodów QR. Zwraca odkodowany tekst, typ kodu kreskowego i dane o położeniu dla każdego wykrytego kodu. Generuje również obraz z adnotacjami z kolorowymi ramkami wokół wykrytych kodów.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/barcode-read`
Przyjmuje dane formularza multipart z plikiem obrazu oraz opcjonalnym polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| tryHarder | boolean | Nie | `true` | Włącz agresywny tryb skanowania dla trudniejszych do odczytania kodów kreskowych (wolniejszy, ale dokładniejszy) |
## Przykładowe żądanie {#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}'
```
## Przykładowa odpowiedź {#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"
}
```
## Pola odpowiedzi {#response-fields}
| Pole | Typ | Opis |
|-------|------|-------------|
| filename | string | Oryginalna nazwa pliku |
| barcodes | array | Tablica wykrytych obiektów kodów kreskowych |
| annotatedUrl | string lub null | Adres URL do pobrania obrazu z adnotacjami (null, jeśli nie znaleziono kodów kreskowych) |
| previewUrl | string lub null | Taki sam jak annotatedUrl (dla zgodności z podglądem frontendu) |
### Obiekt kodu kreskowego {#barcode-object}
| Pole | Typ | Opis |
|-------|------|-------------|
| type | string | Format kodu kreskowego (QRCode, EAN-13, Code128, DataMatrix, PDF417 itd.) |
| text | string | Odkodowana treść kodu kreskowego |
| position | object | Ramka ograniczająca ze współrzędnymi topLeft, topRight, bottomLeft, bottomRight |
## Obsługiwane typy kodów kreskowych {#supported-barcode-types}
Kody kreskowe 1D: Code128, Code39, Code93, Codabar, EAN-8, EAN-13, ITF, UPC-A, UPC-E
Kody 2D: QRCode, DataMatrix, PDF417, Aztec, MaxiCode
## Uwagi {#notes}
- Używa biblioteki zxing-wasm do wykrywania kodów kreskowych.
- Obraz z adnotacjami nakłada kolorowe ramki wielokątne i numerowane etykiety na każdy wykryty kod kreskowy.
- W jednym obrazie można wykryć do 255 kodów kreskowych.
- Jeśli nie znaleziono żadnych kodów kreskowych, `barcodes` jest pustą tablicą, a `annotatedUrl` ma wartość null.
- Tryb `tryHarder` przeprowadza dokładniejsze skanowanie kosztem czasu przetwarzania. Wyłącz go, aby szybciej przetwarzać czyste, dobrze wyrównane kody kreskowe.
- Wynik z adnotacjami jest zawsze w formacie PNG.
- Dane wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed skanowaniem.
- Orientacja EXIF jest automatycznie stosowana przed przetworzeniem.
+85
View File
@@ -0,0 +1,85 @@
---
description: "Zamień zwykłe zrzuty ekranu w dopracowane obrazy z gradientowymi tłami, ramkami urządzeń, cieniami i rozmiarami dla mediów społecznościowych."
i18n_source_hash: 8fd8a930a45e
i18n_provenance: human
i18n_output_hash: a0c74ae04b53
---
# Upiększ zrzut ekranu {#beautify-screenshot}
Dodaj gradientowe tła, ramki urządzeń, cienie, znaki wodne i rozmiary dla mediów społecznościowych do zrzutów ekranu. Idealne do tworzenia dopracowanych obrazów na potrzeby marketingu produktu, mediów społecznościowych i dokumentacji.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/beautify`
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| backgroundType | string | Nie | `"linear-gradient"` | Typ tła: `solid`, `linear-gradient`, `radial-gradient`, `image`, `transparent` |
| backgroundColor | string | Nie | `"#667eea"` | Jednolity kolor tła (używany, gdy `backgroundType` to `solid`) |
| gradientStops | array | Nie | `[{"color":"#667eea","position":0},{"color":"#764ba2","position":100}]` | Punkty koloru gradientu (min. 2). Każdy punkt ma `color` (hex) i `position` (0-100). |
| gradientAngle | number | Nie | 135 | Kąt gradientu w stopniach (0 do 360) |
| padding | number | Nie | 64 | Odstęp wokół obrazu w pikselach (0 do 256) |
| borderRadius | number | Nie | 12 | Zaokrąglenie narożników zrzutu ekranu (0 do 64) |
| shadowPreset | string | Nie | `"subtle"` | Predefiniowany cień: `none`, `subtle`, `medium`, `dramatic`, `custom` |
| shadowBlur | number | Nie | 20 | Niestandardowy promień rozmycia cienia (0 do 100, używany, gdy `shadowPreset` to `custom`) |
| shadowOffsetX | number | Nie | 0 | Niestandardowe przesunięcie poziome cienia (-50 do 50) |
| shadowOffsetY | number | Nie | 10 | Niestandardowe przesunięcie pionowe cienia (-50 do 50) |
| shadowColor | string | Nie | `"#000000"` | Niestandardowy kolor cienia w formacie hex |
| shadowOpacity | number | Nie | 30 | Niestandardowa nieprzezroczystość cienia (0 do 100) |
| frame | string | Nie | `"none"` | Ramka urządzenia lub okna: `none`, `macos-light`, `macos-dark`, `windows-light`, `windows-dark`, `browser-light`, `browser-dark`, `iphone`, `iphone-dark`, `macbook`, `macbook-dark`, `ipad`, `ipad-dark` |
| frameTitle | string | Nie | - | Tekst tytułu wyświetlany na paskach tytułowych ramek okien |
| socialPreset | string | Nie | `"none"` | Zmień rozmiar do wymiarów mediów społecznościowych: `none`, `twitter`, `linkedin`, `instagram-square`, `instagram-story`, `facebook`, `producthunt` |
| watermarkText | string | Nie | - | Opcjonalny tekst znaku wodnego nakładany na obraz |
| watermarkPosition | string | Nie | `"bottom-right"` | Pozycja znaku wodnego: `top-left`, `top-right`, `bottom-left`, `bottom-right`, `center` |
| watermarkOpacity | number | Nie | 50 | Nieprzezroczystość znaku wodnego (0 do 100) |
| outputFormat | string | Nie | `"png"` | Format wyjściowy: `png`, `jpeg`, `webp` |
## Przykładowe żądanie {#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"}'
```
### Z obrazem tła {#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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/screenshot.png",
"originalSize": 234567,
"processedSize": 567890
}
```
## Uwagi {#notes}
- Przyjmuje dwa pola plików: `file` (wymagane, główny zrzut ekranu) oraz `backgroundImage` (opcjonalne, używane, gdy `backgroundType` to `image`).
- Obsługuje formaty wejściowe HEIC, RAW, PSD i SVG (automatycznie dekodowane).
- Predefiniowane ustawienia cienia mapują się na konkretne wartości:
- `subtle`: rozmycie 20, offsetY 4, nieprzezroczystość 20%
- `medium`: rozmycie 40, offsetY 10, nieprzezroczystość 35%
- `dramatic`: rozmycie 80, offsetY 20, nieprzezroczystość 50%
- Predefiniowane ustawienia mediów społecznościowych zmieniają rozmiar końcowego wyniku, aby dopasować go do docelowych wymiarów, przy użyciu trybu `contain`:
- `twitter`: 1600x900
- `linkedin`: 1200x627
- `instagram-square`: 1080x1080
- `instagram-story`: 1080x1920
- `facebook`: 1200x630
- `producthunt`: 1270x760
- Ramki urządzeń (`iphone`, `macbook`, `ipad`) dodają sprzętową obwódkę wokół obrazu i pomijają ustawienie `borderRadius`.
- Gdy wymagana jest przezroczystość (cień, zaokrąglenie narożników, ramki urządzeń lub przezroczyste tło), wynik jest wymuszany na PNG, nawet jeśli wybrano `jpeg`.
- Obrazy tła nie są obsługiwane w trybie potoku/wsadowym.
@@ -0,0 +1,51 @@
---
description: "Rozmyj tło, zachowując ostrość obiektu za pomocą AI."
i18n_source_hash: 9073f10e6e9d
i18n_provenance: human
i18n_output_hash: 565e394980a9
---
# Rozmyj tło {#blur-background}
Rozmyj tło obrazu, zachowując ostrość obiektu. Model AI izoluje obiekt, stosuje rozmycie do oryginalnego tła i komponuje ostry obiekt na wierzchu.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/blur-background`
Przyjmuje dane formularza multipart z plikiem obrazu oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| intensity | integer | Nie | `50` | Intensywność rozmycia (1-100) |
| feather | integer | Nie | `0` | Promień wygładzania krawędzi (0-20) |
| format | string | Nie | `"png"` | Format wyjściowy: `png` lub `webp` |
## Przykładowe żądanie {#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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
Śledź postęp przez SSE pod `GET /api/v1/jobs/{jobId}/progress`. Po zakończeniu zadania strumień SSE emituje zdarzenie `completed` z adresem URL pobierania.
## Uwagi {#notes}
- To narzędzie wspomagane przez AI, które zwraca `202 Accepted` i przetwarza asynchronicznie. Połącz się z punktem końcowym SSE, aby otrzymywać aktualizacje postępu i wynik końcowy.
- Wymaga zainstalowanego pakietu funkcji **background-removal**. Zwraca `501`, jeśli pakiet nie jest dostępny.
- Wyższe wartości intensywności dają silniejszy efekt rozmycia. Wartości powyżej 80 tworzą wyraźne oddzielenie w stylu bokeh.
- Dane wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetworzeniem.
+96
View File
@@ -0,0 +1,96 @@
---
description: "Automatycznie wykrywaj i rozmywaj twarze na obrazach dzięki wykrywaniu twarzy AI, na potrzeby prywatności i anonimizacji zgodnej z RODO."
i18n_source_hash: fb861c12aea5
i18n_provenance: human
i18n_output_hash: c2fb28beda96
---
# Rozmycie twarzy / PII {#face-pii-blur}
Automatycznie wykrywaj i rozmywaj twarze na obrazach za pomocą wykrywania twarzy wspomaganego przez AI (MediaPipe).
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/blur-faces`
**Przetwarzanie:** Asynchroniczne (zwraca 202, odpytuj `/api/v1/jobs/{jobId}/progress` o status przez SSE)
**Pakiet modelu:** `face-detection` (200-300 MB)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| blurRadius | number | Nie | `30` | Promień rozmycia stosowany do wykrytych twarzy (1-100) |
| sensitivity | number | Nie | `0.5` | Czułość wykrywania twarzy (0-1). Niższe wartości wykrywają mniej twarzy z wyższą pewnością |
## Przykładowe żądanie {#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}'
```
## Odpowiedź {#response}
### Odpowiedź początkowa (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Postęp (SSE pod `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Detecting faces...","percent":40}
```
### Wynik końcowy (przez 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}
]
}
}
```
### Nie wykryto twarzy {#no-faces-detected}
Jeśli nie znaleziono żadnych twarzy, wynik zawiera ostrzeżenie:
```json
{
"phase": "complete",
"percent": 100,
"result": {
"facesDetected": 0,
"warning": "No faces detected in this image. Try increasing detection sensitivity."
}
}
```
## Uwagi {#notes}
- Wymaga zainstalowanego pakietu modelu `face-detection` (200-300 MB).
- Format wyjściowy automatycznie odpowiada formatowi wejściowemu.
- Tablica `faces` zawiera współrzędne ramki ograniczającej (x, y, szerokość, wysokość) dla każdej wykrytej twarzy.
- Zwiększ `sensitivity` (bliżej 1.0), aby wykryć więcej twarzy, w tym częściowo zasłonięte.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
+58
View File
@@ -0,0 +1,58 @@
---
description: "Dodaj obramowania, odstępy, zaokrąglone narożniki i cienie do obrazów w przewidywalnej, kontrolowanej kolejności."
i18n_source_hash: 8845150736a9
i18n_provenance: human
i18n_output_hash: 019f3c59df2f
---
# Obramowanie i ramka {#border-frame}
Dodaj obramowania, odstępy, zaokrąglone narożniki i cienie do obrazów. Narzędzie stosuje efekty w kolejności: odstęp, obramowanie, zaokrąglenie narożników, a następnie cień.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/border`
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| borderWidth | number | Nie | 10 | Grubość obramowania w pikselach (0 do 2000) |
| borderColor | string | Nie | `"#000000"` | Kolor obramowania w formacie hex (np. `#FF0000`) |
| padding | number | Nie | 0 | Wewnętrzny odstęp między obrazem a obramowaniem w pikselach (0 do 200) |
| paddingColor | string | Nie | `"#FFFFFF"` | Kolor wypełnienia odstępu w formacie hex |
| cornerRadius | number | Nie | 0 | Promień zaokrąglenia narożników w pikselach (0 do 2000) |
| shadow | boolean | Nie | `false` | Czy dodać cień |
| shadowBlur | number | Nie | 15 | Promień rozmycia cienia (1 do 200) |
| shadowOffsetX | number | Nie | 0 | Poziome przesunięcie cienia (-50 do 50) |
| shadowOffsetY | number | Nie | 5 | Pionowe przesunięcie cienia (-50 do 50) |
| shadowColor | string | Nie | `"#000000"` | Kolor cienia w formacie hex |
| shadowOpacity | number | Nie | 40 | Nieprzezroczystość cienia w procentach (0 do 100) |
## Przykładowe żądanie {#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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.png",
"originalSize": 456789,
"processedSize": 523456
}
```
## Uwagi {#notes}
- Używa standardowej fabryki `createToolRoute`. Przyjmuje pojedynczy plik obrazu przez przesyłanie multipart.
- Obsługuje formaty wejściowe HEIC, RAW, PSD i SVG (automatycznie dekodowane).
- Kolejność przetwarzania: najpierw dodawany jest odstęp, następnie obramowanie owija obraz, potem stosowane jest zaokrąglenie narożników, a na końcu komponowany jest cień.
- Gdy włączone jest `cornerRadius` lub `shadow`, wynik jest wymuszany na PNG (niezależnie od formatu wejściowego), aby zachować przezroczystość. Formaty obsługujące kanał alfa (PNG, WebP, AVIF) zachowują swój oryginalny format.
- Cień uwzględnia kształt: podąża za zaokrąglonymi narożnikami, zamiast tworzyć prostokątny cień.
- Ustawienie `borderWidth` na 0 i użycie tylko `cornerRadius` + `shadow` tworzy efekt zaokrąglonego cienia bez ramki.
+75
View File
@@ -0,0 +1,75 @@
---
description: "Zmień nazwy wielu plików za pomocą szablonu wzorca i pobierz jako ZIP."
i18n_source_hash: 2776dcc2f71c
i18n_provenance: human
i18n_output_hash: 05d89869a52f
---
# Masowa zmiana nazw {#bulk-rename}
Zmień nazwy wielu plików za pomocą szablonu wzorca z symbolami zastępczymi dla indeksu, uzupełnionego indeksu i oryginalnej nazwy pliku. Zwraca archiwum ZIP zawierające wszystkie pliki ze zmienionymi nazwami.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/bulk-rename`
Przyjmuje dane formularza multipart z wieloma plikami oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| pattern | string | Nie | `"image-{{index}}"` | Wzorzec nazewnictwa z symbolami zastępczymi (maks. 1000 znaków) |
| startIndex | number | Nie | `1` | Początkowy numer indeksu |
### Symbole zastępcze wzorca {#pattern-placeholders}
| Symbol zastępczy | Opis | Przykład |
|-------------|-------------|---------|
| `{{index}}` | Kolejny numer zaczynający się od `startIndex` | `1`, `2`, `3` |
| `{{padded}}` | Kolejny numer uzupełniony zerami | `01`, `02`, `03` |
| `{{original}}` | Oryginalna nazwa pliku bez rozszerzenia | `photo`, `IMG_001` |
Oryginalne rozszerzenie pliku jest zawsze zachowywane.
## Przykładowe żądanie {#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}'
```
To daje: `vacation-1.jpg`, `vacation-2.jpg`, `vacation-3.jpg`
Z użyciem oryginalnej nazwy pliku:
```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}}"}'
```
To daje: `2024-trip-IMG_001-1.jpg`, `2024-trip-IMG_002-2.jpg`
## Przykładowa odpowiedź {#example-response}
Odpowiedzią jest plik ZIP strumieniowany bezpośrednio (nie odpowiedź JSON). Nagłówki odpowiedzi to:
```
Content-Type: application/zip
Content-Disposition: attachment; filename="renamed-a1b2c3d4.zip"
```
## Uwagi {#notes}
- To narzędzie nie przetwarza obrazów. Zmienia jedynie nazwy plików i pakuje je do archiwum ZIP.
- Szerokość uzupełnienia zerami dla `{{padded}}` jest określana automatycznie na podstawie łącznej liczby plików (np. 100 plików użyłoby uzupełnienia trzycyfrowego: `001`, `002` itd.).
- Rozszerzenia plików są zachowywane z oryginalnych nazw plików.
- Nazwy plików są oczyszczane w celu usunięcia niebezpiecznych znaków.
- Musi zostać dostarczony co najmniej jeden plik.
+55
View File
@@ -0,0 +1,55 @@
---
description: "Przytnij obraz do wyśrodkowanego koła z przezroczystymi narożnikami."
i18n_source_hash: 06c50ccd96b2
i18n_provenance: human
i18n_output_hash: 9033f4215f42
---
# Przycięcie do koła {#circle-crop}
Przytnij obraz do wyśrodkowanego koła z przezroczystymi narożnikami. Obsługuje regulowany zoom, przesunięcie, obramowanie i rozmiar wyjściowy.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/circle-crop`
Przyjmuje dane formularza multipart z plikiem obrazu oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| zoom | number | Nie | `1` | Współczynnik zoomu (1-5); wyższe wartości przycinają ciaśniej |
| offsetX | number | Nie | `0.5` | Pozioma pozycja środka (0-1) |
| offsetY | number | Nie | `0.5` | Pionowa pozycja środka (0-1) |
| borderWidth | integer | Nie | `0` | Szerokość obramowania w pikselach (0-200) |
| borderColor | string | Nie | `"#ffffff"` | Kolor obramowania w formacie hex |
| background | string | Nie | `"transparent"` | Wypełnienie narożników: `"transparent"` lub kolor w formacie hex |
| outputSize | integer | Nie | - | Ostateczny wymiar kwadratu w pikselach (16-4096) |
## Przykładowe żądanie {#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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.png",
"originalSize": 2450000,
"processedSize": 185000
}
```
## Uwagi {#notes}
- Wynik jest zawsze w formacie PNG, aby zachować przezroczyste narożniki (chyba że `background` jest ustawione na jednolity kolor).
- Koło jest wpisane w krótszy wymiar obrazu. Użyj `zoom`, aby przyciąć ciaśniej, oraz `offsetX`/`offsetY`, aby przesunąć widoczny obszar.
- Gdy podano `outputSize`, wynik jest zmieniany do tego wymiaru kwadratu po przycięciu.
- Dane wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetworzeniem.
+92
View File
@@ -0,0 +1,92 @@
---
description: "Łącz wiele obrazów w kolaże siatkowe z ponad 25 szablonami, regulowanymi odstępami i narożnikami oraz przesuwaniem i powiększaniem dla każdej komórki."
i18n_source_hash: 96f2055717df
i18n_provenance: human
i18n_output_hash: 12ed9b5e0135
---
# Kolaż / Siatka {#collage-grid}
Łącz wiele obrazów w piękne kolaże siatkowe z ponad 25 szablonami. Obsługuje układy od 2 do 9 obrazów z konfigurowalnym odstępem, promieniem narożnika, kolorem tła oraz przesuwaniem/powiększaniem dla każdej komórki.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/collage`
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| templateId | string | Tak | - | Identyfikator układu szablonu (np. `2-h-equal`, `3-left-large`, `4-grid`, `9-grid`) |
| cells | array | Nie | - | Tablica ustawień dla poszczególnych komórek z `imageIndex`, `panX`, `panY`, `zoom`, `objectFit` |
| cells[].imageIndex | integer | Tak | - | Indeks obrazu umieszczanego w tej komórce (liczony od 0) |
| cells[].panX | number | Nie | 0 | Poziome przesunięcie (od -100 do 100) |
| cells[].panY | number | Nie | 0 | Pionowe przesunięcie (od -100 do 100) |
| cells[].zoom | number | Nie | 1 | Poziom powiększenia (od 1 do 10) |
| cells[].objectFit | string | Nie | `"cover"` | Sposób wypełniania komórki obrazem: `cover` lub `contain` |
| gap | number | Nie | 8 | Odstęp między komórkami w pikselach (od 0 do 500) |
| cornerRadius | number | Nie | 0 | Promień narożnika każdej komórki w pikselach (od 0 do 500) |
| backgroundColor | string | Nie | `"#FFFFFF"` | Kolor tła jako wartość szesnastkowa lub `"transparent"` |
| aspectRatio | string | Nie | `"free"` | Proporcje płótna: `free`, `1:1`, `4:3`, `3:2`, `16:9`, `9:16`, `4:5` |
| outputFormat | string | Nie | `"png"` | Format wyjściowy: `png`, `jpeg`, `webp`, `avif`, `jxl` |
| quality | number | Nie | 90 | Jakość wyjściowa (od 1 do 100) |
## Dostępne szablony {#available-templates}
| Identyfikator szablonu | Obrazy | Układ |
|-------------|--------|--------|
| `2-h-equal` | 2 | Dwie równe kolumny |
| `2-v-equal` | 2 | Dwa równe wiersze |
| `2-h-left-large` | 2 | Lewa 2/3, prawa 1/3 |
| `2-h-right-large` | 2 | Lewa 1/3, prawa 2/3 |
| `3-left-large` | 3 | Duży po lewej, dwa ułożone po prawej |
| `3-right-large` | 3 | Dwa ułożone po lewej, duży po prawej |
| `3-top-large` | 3 | Duży na górze, dwie kolumny na dole |
| `3-h-equal` | 3 | Trzy równe kolumny |
| `3-v-equal` | 3 | Trzy równe wiersze |
| `4-grid` | 4 | Siatka 2x2 |
| `4-left-large` | 4 | Duży po lewej, trzy ułożone po prawej |
| `4-top-large` | 4 | Duży na górze, trzy kolumny na dole |
| `4-bottom-large` | 4 | Trzy kolumny na górze, duży na dole |
| `5-top2-bottom3` | 5 | Dwa na górze, trzy na dole |
| `5-top3-bottom2` | 5 | Trzy na górze, dwa na dole |
| `5-left-large` | 5 | Duży po lewej, cztery ułożone po prawej |
| `5-center-large` | 5 | Duży na środku, cztery w narożnikach |
| `6-grid-2x3` | 6 | 2 kolumny x 3 wiersze |
| `6-grid-3x2` | 6 | 3 kolumny x 2 wiersze |
| `6-top-large` | 6 | Duży na górze, pięć kolumn na dole |
| `7-mosaic` | 7 | Układ mozaikowy |
| `8-mosaic` | 8 | Układ mozaikowy |
| `9-grid` | 9 | Siatka 3x3 |
## Przykładowe żądanie {#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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/collage.png",
"originalSize": 2456789,
"processedSize": 1823456
}
```
## Uwagi {#notes}
- Prześlij wiele plików obrazów w żądaniu multipart. Obrazy są przypisywane do komórek szablonu w kolejności przesyłania.
- Jeśli prześlesz więcej obrazów, niż obsługuje szablon, dodatkowe obrazy są ignorowane.
- Obsługuje formaty wejściowe HEIC, RAW, PSD i SVG (automatycznie dekodowane).
- Bazowy rozmiar płótna wynosi 2400 px po najdłuższym boku, skalowany zgodnie z wybranymi proporcjami.
- Gdy `aspectRatio` ma wartość `"free"`, płótno domyślnie przyjmuje proporcje 4:3 (2400x1800).
- Wartości `panX`/`panY` dla poszczególnych komórek przesuwają okno kadrowania wewnątrz komórki. Wartość 100 przesuwa całkowicie do jednej krawędzi, -100 do przeciwnej.
- Kolor tła `"transparent"` jest zachowywany tylko w formatach wyjściowych `png`, `webp` lub `avif`.
@@ -0,0 +1,62 @@
---
description: "Symuluj, jak obrazy wyglądają dla osób z różnymi rodzajami zaburzeń widzenia barw."
i18n_source_hash: 0b537628ba79
i18n_provenance: human
i18n_output_hash: 14491fd69cec
---
# Symulacja daltonizmu {#color-blindness-simulation}
Symuluj zaburzenie widzenia barw (CVD), aby zobaczyć, jak obrazy wyglądają dla osób z różnymi rodzajami daltonizmu. Przydatne do testowania dostępności projektów, wykresów i interfejsów użytkownika.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/color-blindness`
Przyjmuje dane formularza multipart z plikiem obrazu oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| simulationType | string | Nie | `"deuteranomaly"` | Rodzaj zaburzenia widzenia barw do zasymulowania |
### Rodzaje symulacji {#simulation-types}
| Wartość | Stan | Opis |
|-------|-----------|-------------|
| `protanopia` | Ślepota na czerwień | Całkowity brak czopków czerwieni |
| `deuteranopia` | Ślepota na zieleń | Całkowity brak czopków zieleni |
| `tritanopia` | Ślepota na błękit | Całkowity brak czopków błękitu |
| `protanomaly` | Osłabione widzenie czerwieni | Obniżona czułość czopków czerwieni |
| `deuteranomaly` | Osłabione widzenie zieleni | Obniżona czułość czopków zieleni (najczęstsze) |
| `tritanomaly` | Osłabione widzenie błękitu | Obniżona czułość czopków błękitu |
| `achromatopsia` | Całkowita ślepota barw | Całkowity brak widzenia barw |
| `blueConeMonochromacy` | Tylko czopki błękitu | Działają wyłącznie czopki błękitu |
## Przykładowe żądanie {#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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/design.png",
"originalSize": 1850000,
"processedSize": 1820000
}
```
## Uwagi {#notes}
- Deuteranomalia (osłabione widzenie zieleni) jest ustawieniem domyślnym, ponieważ to najczęstsza postać zaburzenia widzenia barw, dotykająca około 6% mężczyzn.
- Symulacja wykorzystuje macierze transformacji kolorów, które modelują, jak obniżone lub nieobecne fotoreceptory czopkowe zmieniają postrzegane barwy.
- To narzędzie jest nieniszczące i generuje jedynie podgląd. Nie modyfikuje oryginalnego obrazu na potrzeby dostępności.
- Format wyjściowy odpowiada formatowi wejściowemu. Pliki wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetworzeniem.
+75
View File
@@ -0,0 +1,75 @@
---
description: "Wyodrębnij dominujące kolory z obrazu jako paletę barw."
i18n_source_hash: 65ab22dd75a9
i18n_provenance: human
i18n_output_hash: 59ef3b7b2f37
---
# Paleta kolorów {#color-palette}
Wyodrębnij dominujące kolory z obrazu i zwróć je jako wartości szesnastkowe. Wykorzystuje skwantowaną analizę częstości, aby zidentyfikować najbardziej wyróżniające się i wizualnie odmienne kolory.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/color-palette`
Przyjmuje dane formularza multipart z plikiem obrazu oraz opcjonalnym polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| count | integer | Nie | `8` | Liczba kolorów do wyodrębnienia (2-16) |
| format | string | Nie | `"hex"` | Format koloru: `hex`, `rgb`, `hsl` |
## Przykładowe żądanie {#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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"filename": "photo.jpg",
"colors": [
"#304080",
"#e0a060",
"#f0f0f0",
"#203020",
"#a0c0e0",
"#806040"
],
"hex": [
"#304080",
"#e0a060",
"#f0f0f0",
"#203020",
"#a0c0e0",
"#806040"
],
"count": 6
}
```
## Pola odpowiedzi {#response-fields}
| Pole | Typ | Opis |
|-------|------|-------------|
| filename | string | Oczyszczona nazwa pliku |
| colors | array | Tablica ciągów kolorów w żądanym formacie, uporządkowana według dominacji (najczęstsze jako pierwsze) |
| hex | array | Tablica szesnastkowych ciągów kolorów (zawsze szesnastkowa, niezależnie od ustawienia `format`) |
| count | number | Liczba wyodrębnionych kolorów |
## Uwagi {#notes}
- Zwraca do `count` dominujących kolorów (domyślnie 8, zakres 2-16), posortowanych według częstości (najczęstsze jako pierwsze).
- Obraz jest wewnętrznie skalowany do 100x100 pikseli na potrzeby analizy, więc paleta odzwierciedla ogólny rozkład kolorów, a nie drobne szczegóły.
- Kolory są wyodrębniane metodą kwantyzacji median-cut, która rekurencyjnie dzieli populacje pikseli wzdłuż kanału o najszerszym zakresie.
- Kanał alfa jest usuwany przed analizą, więc obszary przezroczyste nie są uwzględniane.
- To punkt końcowy tylko do odczytu. Nie generuje pliku wyjściowego do pobrania ani `jobId`.
- Pliki wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed analizą.
+80
View File
@@ -0,0 +1,80 @@
---
description: "Automatycznie koloryzuj czarno-białe lub szare zdjęcia za pomocą modelu AI DDColor."
i18n_source_hash: 688aa3abbdae
i18n_provenance: human
i18n_output_hash: 64c9b2a242d3
---
# Koloryzacja AI {#ai-colorization}
Zamień czarno-białe lub szare zdjęcia na pełnokolorowe przy użyciu AI (model DDColor z rezerwowym OpenCV DNN).
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/colorize`
**Przetwarzanie:** asynchroniczne (zwraca 202, odpytuj `/api/v1/jobs/{jobId}/progress` o status przez SSE)
**Pakiet modelu:** `object-eraser-colorize` (1-2 GB)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| intensity | number | Nie | `1.0` | Intensywność koloru (0-1). Niższe wartości dają subtelniejszą koloryzację |
| model | string | Nie | `"auto"` | Model do użycia: `auto`, `ddcolor`, `opencv` |
## Przykładowe żądanie {#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"}'
```
## Odpowiedź {#response}
### Odpowiedź początkowa (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Postęp (SSE pod `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Colorizing...","percent":55}
```
### Wynik końcowy (przez 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"
}
}
```
## Uwagi {#notes}
- Wymaga zainstalowania pakietu modelu `object-eraser-colorize` (1-2 GB).
- DDColor daje wyniki wyższej jakości, ale jest wolniejszy; OpenCV DNN jest szybszy przy nieco niższej jakości. `auto` używa DDColor, gdy jest dostępny, z rezerwowym OpenCV.
- Parametr `intensity` miesza oryginalny obraz w skali szarości z wynikiem koloryzacji AI. Użyj wartości 1.0 dla pełnego koloru, niższych wartości dla częściowo odbarwionego, vintage'owego wyglądu.
- Format wyjściowy jest automatycznie dopasowywany do formatu wejściowego.
- W przypadku formatów wyjściowych, których nie można podejrzeć w przeglądarce, obok głównego wyniku generowany jest podgląd WebP.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
+68
View File
@@ -0,0 +1,68 @@
---
description: "Porównaj dwa obrazy obok siebie z wizualizacją różnic na poziomie pikseli i wynikiem podobieństwa."
i18n_source_hash: cc0a02bd75c6
i18n_provenance: human
i18n_output_hash: 7ad8cdc9a3da
---
# Porównywanie obrazów {#image-compare}
Prześlij dwa obrazy, aby obliczyć mapę różnic na poziomie pikseli oraz liczbowy procent podobieństwa. Wynikiem jest obraz różnic wyróżniający zmienione obszary na czerwono.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/compare`
Przyjmuje dane formularza multipart z **dwoma** plikami obrazów. Pole ustawień nie jest wymagane.
## Parametry {#parameters}
To narzędzie nie ma konfigurowalnych parametrów. Prześlij dokładnie dwa pliki obrazów.
| Pole | Typ | Wymagane | Opis |
|-------|------|----------|-------------|
| file (pierwszy) | file | Tak | Pierwszy obraz |
| file (drugi) | file | Tak | Drugi obraz |
## Przykładowe żądanie {#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"
```
## Przykładowa odpowiedź {#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
}
```
## Pola odpowiedzi {#response-fields}
| Pole | Typ | Opis |
|-------|------|-------------|
| jobId | string | Identyfikator zadania do pobrania obrazu różnic |
| similarity | number | Procent podobieństwa między dwoma obrazami (od 0 do 100) |
| dimensions | object | Szerokość i wysokość użyte do porównania |
| downloadUrl | string | Adres URL do pobrania wygenerowanego obrazu różnic |
| originalSize | number | Łączny rozmiar obu obrazów wejściowych w bajtach |
| processedSize | number | Rozmiar wyjściowego obrazu różnic w bajtach |
## Uwagi {#notes}
- Oba obrazy są skalowane do tych samych wymiarów (maksimum z każdej osi) przed porównaniem.
- Obraz różnic wyróżnia różnice na czerwono z przezroczystością proporcjonalną do wielkości zmiany. Piksele identyczne lub prawie identyczne (różnica < 10) są pokazywane jako półprzezroczyste wersje oryginału.
- Podobieństwo jest obliczane jako odwrotność średniej różnicy pikseli w całym obrazie, wyrażona procentowo.
- Podobieństwo 100% oznacza, że obrazy są identyczne co do piksela (w rozdzielczości porównania).
- Wynikowy obraz różnic ma zawsze format PNG, niezależnie od formatów wejściowych.
- Oba obrazy są walidowane i dekodowane (obsługiwane HEIC, RAW, PSD, SVG) przed porównaniem.
- Orientacja EXIF jest automatycznie stosowana do obu obrazów przed przetwarzaniem.
+87
View File
@@ -0,0 +1,87 @@
---
description: "Nakładaj obrazy z określoną pozycją, przezroczystością i trybami mieszania w celu kompozycji."
i18n_source_hash: c5d09eb13fde
i18n_provenance: human
i18n_output_hash: d43fc1e1545b
---
# Kompozycja obrazów {#image-composition}
Nałóż obraz nakładki na obraz bazowy z konfigurowalną pozycją, przezroczystością i trybem mieszania. Przydatne do komponowania logotypów, grafik lub łączenia wielu obrazów.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/compose`
Przyjmuje dane formularza multipart z **dwoma** plikami obrazów oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| x | number | Nie | `0` | Poziome przesunięcie nakładki od lewego górnego rogu w pikselach (min 0) |
| y | number | Nie | `0` | Pionowe przesunięcie nakładki od lewego górnego rogu w pikselach (min 0) |
| opacity | number | Nie | `100` | Procent przezroczystości nakładki (od 0 do 100) |
| blendMode | string | Nie | `"over"` | Tryb mieszania podczas kompozycji |
### Tryby mieszania {#blend-modes}
| Wartość | Opis |
|-------|-------------|
| `over` | Zwykłe nałożenie (domyślne) |
| `multiply` | Przyciemnianie przez mnożenie wartości pikseli |
| `screen` | Rozjaśnianie przez odwrócenie, mnożenie i ponowne odwrócenie |
| `overlay` | Łączy mnożenie i rozjaśnianie w zależności od jasności bazy |
| `darken` | Zachowuje ciemniejszy piksel z każdej warstwy |
| `lighten` | Zachowuje jaśniejszy piksel z każdej warstwy |
| `hard-light` | Nałożenie o silnym kontraście |
| `soft-light` | Nałożenie o subtelnym kontraście |
| `difference` | Wartość bezwzględna różnicy między warstwami |
| `exclusion` | Podobne do różnicy, ale o niższym kontraście |
### Pola plików {#file-fields}
| Nazwa pola | Wymagane | Opis |
|------------|----------|-------------|
| file | Tak | Obraz bazowy/tło |
| overlay | Tak | Obraz nakładki/pierwszego planu |
## Przykładowe żądanie {#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"}'
```
Użycie trybu mieszania multiply:
```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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/background.jpg",
"originalSize": 3200000,
"processedSize": 3450000
}
```
## Uwagi {#notes}
- Oba obrazy są walidowane i dekodowane (obsługiwane HEIC, RAW, PSD, SVG) przed kompozycją.
- Nakładka jest umieszczana dokładnie we współrzędnych pikselowych określonych przez `x` i `y`. Nie jest skalowana do dopasowania.
- Jeśli przezroczystość jest mniejsza niż 100, przed mieszaniem do nakładki stosowana jest maska alfa.
- Nakładka może wykraczać poza granice obrazu bazowego (zostanie wtedy przycięta).
- Orientacja EXIF jest automatycznie stosowana do obu obrazów przed przetwarzaniem.
- Wymiary wyjściowe odpowiadają wymiarom obrazu bazowego.
+62
View File
@@ -0,0 +1,62 @@
---
description: "Zmniejsz rozmiar pliku obrazu według poziomu jakości lub do docelowego rozmiaru pliku."
i18n_source_hash: af4685da7e64
i18n_provenance: human
i18n_output_hash: ad5235390f3f
---
# Kompresja {#compress}
Zmniejsz rozmiar pliku obrazu, określając poziom jakości lub docelowy rozmiar pliku w kilobajtach. Narzędzie wykorzystuje iteracyjne wyszukiwanie binarne, aby dokładnie trafić w docelowy rozmiar.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/compress`
Przyjmuje dane formularza multipart z plikiem obrazu oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| mode | string | Nie | `"quality"` | Tryb kompresji: `quality` lub `targetSize` |
| quality | number | Nie | `80` | Poziom jakości (1-100). Używany, gdy tryb to `quality`. |
| targetSizeKb | number | Nie | - | Docelowy rozmiar pliku w kilobajtach. Używany, gdy tryb to `targetSize`. |
## Przykładowe żądanie {#example-request}
Kompresja do jakości 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}'
```
Kompresja do docelowego rozmiaru 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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 204800
}
```
## Uwagi {#notes}
- W trybie `quality` niższe wartości dają mniejsze pliki z większą liczbą artefaktów kompresji. Wartość 80 to dobra wartość domyślna do zastosowań webowych.
- W trybie `targetSize` silnik wykonuje iteracyjną kompresję, aby zbliżyć się do celu jak najbardziej bez jego przekroczenia.
- Format wyjściowy odpowiada formatowi wejściowemu. Kompresja dotyczy natywnego kodowania danego formatu (np. jakość JPEG dla plików JPEG, jakość WebP dla plików WebP).
- Jeśli domyślna jakość (80) jest akceptowalna, możesz całkowicie pominąć parametr `quality`.
@@ -0,0 +1,64 @@
---
description: "Zmiana rozmiaru metodą wycinania szwów, która dodaje lub usuwa piksele wzdłuż ścieżek o niskim znaczeniu, aby zachować kluczową zawartość i twarze."
i18n_source_hash: f383b28ab62a
i18n_provenance: human
i18n_output_hash: 041fb6c6b708
---
# Zmiana rozmiaru uwzględniająca treść {#content-aware-resize}
Zmiana rozmiaru metodą wycinania szwów, która inteligentnie usuwa lub dodaje piksele wzdłuż ścieżek o najmniejszym znaczeniu wizualnym, zachowując istotną zawartość i opcjonalnie chroniąc twarze.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/content-aware-resize`
**Przetwarzanie:** synchroniczne (zwraca wynik bezpośrednio)
**Pakiet modelu:** żaden nie jest wymagany do podstawowego działania. Ochrona twarzy używa pakietu `face-detection` (200-300 MB), jeśli jest włączona.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| width | number | Nie | - | Docelowa szerokość w pikselach |
| height | number | Nie | - | Docelowa wysokość w pikselach |
| protectFaces | boolean | Nie | `false` | Wykrywaj i chroń twarze przed usuwaniem szwów |
| blurRadius | number | Nie | `4` | Promień rozmycia wstępnego przetwarzania na potrzeby obliczania energii (0-20) |
| sobelThreshold | number | Nie | `2` | Próg wykrywania krawędzi Sobela (1-20). Wyższe wartości sprawiają, że algorytm jest bardziej agresywny |
| square | boolean | Nie | `false` | Zmień rozmiar do kwadratu (używa mniejszego wymiaru) |
Należy podać co najmniej jeden z parametrów `width`, `height` lub `square`.
## Przykładowe żądanie {#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}'
```
## Odpowiedź (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
}
```
## Uwagi {#notes}
- Ta niestandardowa trasa zwraca obecnie synchroniczną odpowiedź 200.
- Wykorzystuje bibliotekę wycinania szwów `caire` do zmiany rozmiaru uwzględniającej treść.
- Tylko zmniejsza wymiary (usuwa szwy). Nie może powiększyć obrazu poza jego oryginalny rozmiar.
- Opcja `protectFaces` używa wykrywania twarzy przez AI, aby oznaczyć obszary twarzy jako wysokoenergetyczne, uniemożliwiając przechodzenie szwów przez twarze.
- `blurRadius` steruje wygładzaniem przed obliczeniem mapy energii. Wyższe wartości czynią mapę energii bardziej jednorodną, co może pomóc przy zaszumionych obrazach.
- `sobelThreshold` wpływa na to, jak agresywnie wykrywane są krawędzie. Niższe wartości zachowują więcej subtelnych krawędzi.
- Wynik ma zawsze format PNG.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
+84
View File
@@ -0,0 +1,84 @@
---
description: "Konwertuj obrazy między formatami, w tym nowoczesnymi jak AVIF, JXL i HEIC."
i18n_source_hash: 562f8270e8c3
i18n_provenance: human
i18n_output_hash: 7d07d56af008
---
# Konwersja {#convert}
Konwertuj obrazy między formatami. Obsługuje popularne formaty webowe oraz specjalistyczne, takie jak HEIC, JXL, BMP, ICO, JP2, QOI i PSD.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/convert`
Przyjmuje dane formularza multipart z plikiem obrazu oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| format | string | Tak | - | Format docelowy: `jpg`, `png`, `webp`, `avif`, `tiff`, `gif`, `heic`, `heif`, `jxl`, `bmp`, `ico`, `jp2`, `qoi`, `psd`, `ppm`, `eps`, `tga` |
| quality | number | Nie | - | Jakość wyjściowa (1-100). Dotyczy formatów stratnych, takich jak jpg, webp, avif, heic. |
## Obsługiwane formaty wyjściowe {#supported-output-formats}
| Format | Typ | Uwagi |
|--------|------|-------|
| jpg | Stratny | JPEG, najlepsza kompatybilność |
| png | Bezstratny | Obsługuje przezroczystość |
| webp | Oba | Nowoczesny format webowy, dobra kompresja |
| avif | Stratny | Format nowej generacji, doskonała kompresja |
| tiff | Oba | Procesy druku/publikacji |
| gif | Bezstratny | Ograniczony do 256 kolorów |
| heic / heif | Stratny | Format ekosystemu Apple |
| jxl | Oba | JPEG XL, format nowej generacji |
| bmp | Bezstratny | Nieskompresowana mapa bitowa |
| ico | Bezstratny | Format ikon Windows |
| jp2 | Stratny | JPEG 2000 |
| qoi | Bezstratny | Format Quite OK Image |
| psd | Warstwowy | Adobe Photoshop (wymaga ImageMagick) |
| ppm | Bezstratny | Portable Pixmap (PPM/PGM/PBM) |
| eps | Wektorowy | Encapsulated PostScript |
| tga | Bezstratny | Format obrazu Targa |
## Przykładowe żądanie {#example-request}
Konwersja do 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}'
```
Konwersja do PNG (bezstratna):
```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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.webp",
"originalSize": 2450000,
"processedSize": 680000
}
```
## Uwagi {#notes}
- Rozszerzenie nazwy pliku wyjściowego jest automatycznie aktualizowane, aby pasowało do formatu docelowego.
- Pliki wejściowe SVG są rasteryzowane w 300 DPI przed konwersją.
- Konwersja PSD wymaga zainstalowanego na serwerze ImageMagick.
- Formaty BMP, EPS, ICO, JP2, JXL, PPM, QOI i TGA używają specjalistycznych koderów CLI i pomijają przetwarzanie przez Sharp.
- Kodowanie HEIC/HEIF używa systemowej biblioteki kodera HEIC.
- Formaty wejściowe są szerokie: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC, RAW (CR2, NEF, ARW itd.), PSD, SVG, BMP i inne.
+62
View File
@@ -0,0 +1,62 @@
---
description: "Kadruj obrazy, określając obszar za pomocą pozycji i wymiarów."
i18n_source_hash: aab38ccd7c53
i18n_provenance: human
i18n_output_hash: ac8f21ea2c80
---
# Kadrowanie {#crop}
Kadruj obrazy, definiując prostokątny obszar za pomocą pozycji i rozmiaru. Obsługuje zarówno jednostki pikselowe, jak i procentowe.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/crop`
Przyjmuje dane formularza multipart z plikiem obrazu oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| left | number | Tak | - | Przesunięcie X obszaru kadrowania (od lewej krawędzi) |
| top | number | Tak | - | Przesunięcie Y obszaru kadrowania (od górnej krawędzi) |
| width | number | Tak | - | Szerokość obszaru kadrowania |
| height | number | Tak | - | Wysokość obszaru kadrowania |
| unit | string | Nie | `"px"` | Jednostka wartości: `px` lub `percent` |
## Przykładowe żądanie {#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}'
```
Kadrowanie z użyciem wartości procentowych:
```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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 1200000
}
```
## Uwagi {#notes}
- Obszar kadrowania musi mieścić się w granicach obrazu. Jeśli obszar wykracza poza obraz, żądanie zakończy się niepowodzeniem.
- Przy użyciu jednostki `percent` wartości oznaczają procent wymiarów obrazu (np. `left: 10` oznacza 10% od lewej krawędzi).
- Format wyjściowy odpowiada formatowi wejściowemu.
- Orientacja EXIF jest automatycznie stosowana przed kadrowaniem, więc współrzędne odpowiadają wizualnie poprawnej orientacji.
+50
View File
@@ -0,0 +1,50 @@
---
description: "Zastosuj dwukolorowy efekt duotone z niestandardowymi kolorami cieni i świateł."
i18n_source_hash: ab99c4f0152c
i18n_provenance: human
i18n_output_hash: 0afe4767f2ad
---
# Duotone {#duotone}
Zastosuj dwukolorowy efekt duotone do obrazu. Obraz jest konwertowany do skali szarości, a następnie mapowany na gradient między kolorem cieni (ciemne tony) a kolorem świateł (jasne tony).
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/duotone`
Przyjmuje dane formularza multipart z plikiem obrazu oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| shadow | string | Nie | `"#1e3a8a"` | Szesnastkowy kolor cieni (stosowany do ciemnych tonów) |
| highlight | string | Nie | `"#fbbf24"` | Szesnastkowy kolor świateł (stosowany do jasnych tonów) |
| intensity | integer | Nie | `100` | Intensywność efektu (0-100); 0 zwraca oryginał, 100 stosuje pełny efekt duotone |
## Przykładowe żądanie {#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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 1870000
}
```
## Uwagi {#notes}
- Format wyjściowy odpowiada formatowi wejściowemu. Pliki wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetwarzaniem.
- Wartość `intensity` mniejsza niż 100 miesza wynik duotone z oryginalnym obrazem, pozwalając na subtelniejsze efekty.
- Popularne kombinacje duotone to granat/złoto, morski/koralowy oraz fioletowy/różowy.
+108
View File
@@ -0,0 +1,108 @@
---
description: "Edytuj pola metadanych EXIF, IPTC, GPS i XMP w obrazach bez ponownego kodowania pikseli."
i18n_source_hash: a37746db11c3
i18n_provenance: human
i18n_output_hash: d5065d34ee21
---
# Edycja metadanych {#edit-metadata}
Edytuj pola metadanych obrazu, w tym EXIF, IPTC, współrzędne GPS, daty i słowa kluczowe. Wykorzystuje pod spodem ExifTool, więc metadane są zapisywane w miejscu bez ponownego kodowania pikseli, zachowując pełną jakość obrazu.
## Punkty końcowe API {#api-endpoints}
### Edycja metadanych {#edit-metadata-1}
`POST /api/v1/tools/image/edit-metadata`
Zapisuje pola metadanych do obrazu i zwraca zmodyfikowany plik.
### Sprawdzanie metadanych {#inspect-metadata}
`POST /api/v1/tools/image/edit-metadata/inspect`
Zwraca pełne metadane z obrazu za pomocą ExifTool w formacie JSON. Nie modyfikuje obrazu.
## Parametry (Edycja) {#parameters-edit}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| title | string | Nie | - | Tytuł obrazu (XMP/EXIF) |
| author | string | Nie | - | Nazwa autora |
| artist | string | Nie | - | Nazwa artysty (znacznik EXIF Artist) |
| copyright | string | Nie | - | Nota o prawach autorskich |
| imageDescription | string | Nie | - | Opis obrazu (EXIF) |
| software | string | Nie | - | Znacznik oprogramowania |
| dateTime | string | Nie | - | Wartość EXIF DateTime |
| dateTimeOriginal | string | Nie | - | Wartość EXIF DateTimeOriginal |
| setAllDates | string | Nie | - | Ustaw wszystkie pola dat naraz |
| dateShift | string | Nie | - | Przesuń wszystkie daty o wartość (format: `+HH:MM` lub `-HH:MM`) |
| clearGps | boolean | Nie | `false` | Usuń wszystkie dane GPS |
| gpsLatitude | number | Nie | - | Ustaw szerokość geograficzną GPS (od -90 do 90) |
| gpsLongitude | number | Nie | - | Ustaw długość geograficzną GPS (od -180 do 180) |
| gpsAltitude | number | Nie | - | Ustaw wysokość GPS w metrach |
| keywords | string[] | Nie | - | Słowa kluczowe/tagi do dodania lub ustawienia |
| keywordsMode | string | Nie | `"add"` | Sposób obsługi słów kluczowych: `add` (dołącz) lub `set` (zastąp) |
| fieldsToRemove | string[] | Nie | `[]` | Lista nazw konkretnych pól metadanych do usunięcia |
| iptcTitle | string | Nie | - | IPTC Object Name |
| iptcHeadline | string | Nie | - | IPTC Headline |
| iptcCity | string | Nie | - | IPTC City |
| iptcState | string | Nie | - | IPTC Province/State |
| iptcCountry | string | Nie | - | IPTC Country |
## Przykładowe żądanie {#example-request}
Ustawianie autora i praw autorskich:
```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"}'
```
Ustawianie współrzędnych 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}'
```
Usuwanie GPS i dodawanie słów kluczowych:
```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"}'
```
Sprawdzanie metadanych:
```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"
```
## Przykładowa odpowiedź (Edycja) {#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
}
```
## Uwagi {#notes}
- To narzędzie wymaga zainstalowanego na serwerze ExifTool. Jest on dołączony do obrazu Docker.
- Metadane są zapisywane w miejscu, więc nie następuje ponowne kodowanie pikseli. Zmiana rozmiaru pliku jest minimalna (tylko bajty metadanych).
- Parametr `dateShift` przesuwa wszystkie pola dat o określoną wartość, co jest przydatne do korygowania błędów stref czasowych (np. `+02:00` lub `-05:30`).
- Jeśli nie zażądano żadnych zmian (wszystkie parametry pominięte lub puste), oryginalny plik jest zwracany bez zmian.
- Obsługiwane formaty: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC/HEIF.
- W przypadku formatów, których nie można podejrzeć w przeglądarce (HEIF, TIFF), odpowiedź zawiera pole `previewUrl` z podglądem WebP.
+85
View File
@@ -0,0 +1,85 @@
---
description: "Odrestauruj i wyostrz rozmyte lub niskiej jakości twarze na obrazach za pomocą modeli AI GFPGAN i CodeFormer."
i18n_source_hash: 7f9f6af8ebda
i18n_provenance: human
i18n_output_hash: 0467760d4ebc
---
# Poprawa twarzy {#face-enhancement}
Odrestauruj i popraw twarze na obrazach za pomocą modeli AI (GFPGAN/CodeFormer).
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/enhance-faces`
**Przetwarzanie:** asynchroniczne (zwraca 202, odpytuj `/api/v1/jobs/{jobId}/progress` o status przez SSE)
**Pakiety modeli:** `upscale-enhance` (5-6 GB) oraz `face-detection` (200-300 MB)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| model | string | Nie | `"auto"` | Model do użycia: `auto`, `gfpgan`, `codeformer` |
| strength | number | Nie | `0.8` | Siła poprawy (0-1). Wyższe wartości dają silniejszą poprawę |
| onlyCenterFace | boolean | Nie | `false` | Popraw tylko najbardziej centralną/wyeksponowaną twarz |
| sensitivity | number | Nie | `0.5` | Czułość wykrywania twarzy (0-1) |
## Przykładowe żądanie {#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}'
```
## Odpowiedź {#response}
### Odpowiedź początkowa (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Postęp (SSE pod `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Enhancing faces...","percent":60}
```
### Wynik końcowy (przez 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"
}
}
```
## Uwagi {#notes}
- Wymaga zarówno pakietu modelu `upscale-enhance` (5-6 GB), jak i pakietu modelu `face-detection` (200-300 MB).
- GFPGAN daje bardziej agresywną poprawę; CodeFormer lepiej zachowuje tożsamość. `auto` wybiera najlepszy model dla danego wejścia.
- Wynik ma zawsze format PNG dla maksymalnej jakości.
- Obok wyniku w pełnej rozdzielczości generowany jest podgląd WebP, aby przyspieszyć wyświetlanie w interfejsie.
- Parametr `strength` miesza poprawioną twarz z oryginałem. Użyj niższych wartości (0.3-0.5) dla subtelnych poprawek, wyższych (0.7-1.0) dla silniejszej restauracji.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
+79
View File
@@ -0,0 +1,79 @@
---
description: "Usuwaj niechciane obiekty z obrazów za pomocą inpaintingu AI (LaMa), kierując się maską obszaru do wymazania."
i18n_source_hash: 8e2e42a5e4f9
i18n_provenance: human
i18n_output_hash: d57ffcc5291b
---
# Wymazywanie obiektów {#object-eraser}
Usuwaj niechciane obiekty z obrazów za pomocą inpaintingu AI (model LaMa). Przyjmuje obraz oraz maskę wskazującą obszar do wymazania.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/erase-object`
**Przetwarzanie:** asynchroniczne (zwraca 202, odpytuj `/api/v1/jobs/{jobId}/progress` o status przez SSE)
**Pakiet modelu:** `object-eraser-colorize` (1-2 GB)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu źródłowego (multipart) |
| mask | file | Tak | - | Obraz maski (biały = obszar do wymazania, czarny = zachowanie). Musi być przesłany z nazwą pola `mask` |
| format | string | Nie | `"auto"` | Format wyjściowy: `auto`, `png`, `jpg`, `jpeg`, `webp`, `tiff`, `gif`, `avif`, `heic`, `heif`, `jxl` |
| quality | integer | Nie | `95` | Jakość wyjściowa (1-100) |
## Przykładowe żądanie {#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"
```
## Odpowiedź {#response}
### Odpowiedź początkowa (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Postęp (SSE pod `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Inpainting...","percent":70}
```
### Wynik końcowy (przez 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
}
}
```
## Uwagi {#notes}
- Wymaga zainstalowania pakietu modelu `object-eraser-colorize` (1-2 GB).
- Maska musi mieć takie same wymiary jak obraz źródłowy. Białe piksele wskazują obszary do wymazania; AI wypełnia je wiarygodną treścią.
- Wykorzystuje LaMa (Large Mask Inpainting) do wysokiej jakości usuwania obiektów.
- W przypadku formatów wyjściowych, których nie można podejrzeć w przeglądarce, obok głównego wyniku generowany jest podgląd WebP.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
+93
View File
@@ -0,0 +1,93 @@
---
description: "Generuj wszystkie standardowe rozmiary ikon favicon i ikon aplikacji z obrazu źródłowego."
i18n_source_hash: 3a6451a94b7a
i18n_provenance: human
i18n_output_hash: ce28a5b01308
---
# Generator favicon {#favicon-generator}
Wygeneruj kompletny zestaw plików favicon i ikon aplikacji z obrazu źródłowego. Tworzy wszystkie standardowe rozmiary potrzebne przeglądarkom, urządzeniom Apple i Android, wraz z manifestem web oraz fragmentem HTML.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/favicon`
Przyjmuje dane formularza multipart z jednym lub większą liczbą plików obrazów oraz opcjonalnym polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| background | string | Nie | - | Kolor tła w formacie hex (np. `"#ffffff"`). Gdy ustawiony, ikona jest spłaszczana na tym kolorze. |
| padding | integer | Nie | `0` | Procent odstępu wokół zawartości ikony (0 do 40) |
| radius | integer | Nie | `0` | Procent promienia zaokrąglenia narożników dla zaokrąglonych ikon (0 do 50) |
| sizes | integer[] | Nie | - | Ogranicz wynik do konkretnych rozmiarów w pikselach (np. `[16, 32, 180]`). Pomiń, aby wygenerować wszystkie standardowe rozmiary. |
| themeColor | string | Nie | `"#ffffff"` | Kolor motywu w formacie hex dla manifestu web |
## Generowane pliki {#generated-files}
Dla każdego obrazu wejściowego tworzone są następujące pliki:
| Plik | Rozmiar | Przeznaczenie |
|------|------|---------|
| `favicon-16x16.png` | 16x16 | Ikona karty przeglądarki |
| `favicon-32x32.png` | 32x32 | Ikona karty przeglądarki (HiDPI) |
| `favicon-48x48.png` | 48x48 | Skrót na pulpicie |
| `apple-touch-icon.png` | 180x180 | Ekran główny iOS |
| `android-chrome-192x192.png` | 192x192 | Ekran główny Android |
| `android-chrome-512x512.png` | 512x512 | Ekran powitalny Android |
| `favicon.ico` | 32x32 | Starszy format ICO |
| `manifest.json` | - | Manifest aplikacji web z odwołaniami do ikon |
| `favicon-snippet.html` | - | Gotowe do użycia znaczniki link HTML |
## Przykładowe żądanie {#example-request}
Pojedynczy obraz źródłowy z zaokrąglonymi narożnikami i odstępem:
```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"}'
```
Wiele obrazów źródłowych (każdy otrzymuje własny zestaw w podfolderze):
```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"
```
## Przykładowa odpowiedź {#example-response}
Odpowiedzią jest plik ZIP przesyłany strumieniowo bezpośrednio. Nagłówki odpowiedzi to:
```
Content-Type: application/zip
Content-Disposition: attachment; filename="favicons-a1b2c3d4.zip"
```
## Dołączony fragment HTML {#html-snippet-included}
Plik ZIP zawiera plik `favicon-snippet.html`, który możesz wkleić do swojego HTML `<head>`:
```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">
```
## Uwagi {#notes}
- Obrazy źródłowe są skalowane w trybie dopasowania `cover`, co oznacza, że są przycinane, aby wypełnić każdy kwadratowy rozmiar. Dla najlepszych rezultatów użyj kwadratowego obrazu źródłowego.
- Gdy przesłanych jest wiele plików, każdy otrzymuje własny podfolder w pliku ZIP (nazwany według pliku źródłowego).
- W przypadku przesłania pojedynczego pliku wszystkie wyniki znajdują się w katalogu głównym pliku ZIP bez podfolderu.
- Pliki, które nie przejdą walidacji lub dekodowania, są pomijane, a do pliku ZIP dołączany jest `skipped-files.txt` wyjaśniający problemy.
- Obsługiwane formaty wejściowe: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC, SVG, RAW, PSD i inne.
- Orientacja EXIF jest automatycznie stosowana przed skalowaniem.
+115
View File
@@ -0,0 +1,115 @@
---
description: "Wykrywaj zduplikowane i niemal identyczne obrazy przy użyciu haszowania percepcyjnego."
i18n_source_hash: 4e1f4413f90f
i18n_provenance: human
i18n_output_hash: 86a88fd343b3
---
# Znajdź duplikaty {#find-duplicates}
Prześlij wiele obrazów, aby wykryć duplikaty i niemal identyczne obrazy przy użyciu haszowania percepcyjnego (dHash). Grupuje podobne obrazy razem, identyfikuje wersję o najlepszej jakości w każdej grupie i oblicza potencjalne oszczędności miejsca.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/find-duplicates`
Przyjmuje dane formularza multipart z wieloma plikami obrazów oraz opcjonalnym polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| threshold | number | Nie | `8` | Maksymalna odległość Hamminga uznająca obrazy za duplikaty (0 do 20). Niższa = surowsze dopasowanie |
### Pola plików {#file-fields}
Prześlij co najmniej 2 pliki obrazów w żądaniu multipart (wszystkie używając nazwy pola `file` lub dowolnej nazwy pola dla części plików).
## Przykładowe żądanie {#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}'
```
## Przykładowa odpowiedź {#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": []
}
```
## Pola odpowiedzi {#response-fields}
| Pole | Typ | Opis |
|-------|------|-------------|
| totalImages | number | Liczba pomyślnie przeanalizowanych obrazów |
| duplicateGroups | array | Grupy zduplikowanych obrazów |
| uniqueImages | number | Liczba obrazów nienależących do żadnej grupy duplikatów |
| spaceSaveable | number | Łączna liczba bajtów, którą można zaoszczędzić, usuwając duplikaty inne niż najlepsze |
| skippedFiles | array | Pliki, których nie udało się przetworzyć (z nazwą pliku i powodem) |
### Obiekt grupy duplikatów {#duplicate-group-object}
| Pole | Typ | Opis |
|-------|------|-------------|
| groupId | number | Identyfikator grupy |
| files | array | Obrazy w tej grupie duplikatów |
### Obiekt pliku (w obrębie grupy) {#file-object-within-a-group}
| Pole | Typ | Opis |
|-------|------|-------------|
| filename | string | Oryginalna nazwa pliku |
| similarity | number | Procentowe podobieństwo do obrazu referencyjnego (pierwszego w grupie) |
| width | number | Szerokość obrazu w pikselach |
| height | number | Wysokość obrazu w pikselach |
| fileSize | number | Rozmiar pliku w bajtach |
| format | string | Format obrazu |
| isBest | boolean | Czy jest to wersja o najwyższej jakości (najwięcej pikseli, największy plik) |
| thumbnail | string lub null | Miniatura JPEG w Base64 (szerokość 200px) do podglądu |
## Uwagi {#notes}
- Wykorzystuje 128-bitowy dHash (64-bitowy wiersz + 64-bitowa kolumna) do wykrywania podobieństwa percepcyjnego. Wykrywa to duplikaty nawet po zmianie rozmiaru, ponownej kompresji i drobnych edycjach.
- Próg reprezentuje maksymalną odległość Hamminga między haszami. Domyślna wartość 8 wykrywa niemal identyczne obrazy, unikając fałszywych trafień. Użyj 0 dla identycznych pikselowo, lub 15-20 dla bardzo luźnego dopasowania.
- „Najlepszym” obrazem w każdej grupie jest ten z największą liczbą pikseli (szerokość x wysokość), z rozmiarem pliku jako kryterium rozstrzygającym.
- Wymagane są co najmniej 2 obrazy. Pliki, które nie przejdą walidacji lub dekodowania, są zgłaszane w `skippedFiles`, zamiast powodować niepowodzenie całego żądania.
- Miniatury to podglądy JPEG o szerokości 200px zakodowane jako identyfikatory URI danych.
- Obsługiwane są wszystkie popularne formaty (HEIC, RAW, PSD, SVG dekodowane automatycznie).
+147
View File
@@ -0,0 +1,147 @@
---
description: "Zmieniaj rozmiar, optymalizuj, zmieniaj prędkość, odwracaj, obracaj i wyodrębniaj klatki z animowanych plików GIF w jednym narzędziu."
i18n_source_hash: 5e525e80db92
i18n_provenance: human
i18n_output_hash: 90168d0b887b
---
# Narzędzia GIF {#gif-tools}
Zmieniaj rozmiar, optymalizuj, zmieniaj prędkość, odwracaj, wyodrębniaj klatki i obracaj animowane pliki GIF. Zapewnia wiele trybów działania w jednym narzędziu.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/gif-tools`
## Parametry {#parameters}
### Wspólne parametry {#common-parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| mode | string | Nie | `"resize"` | Tryb działania: `resize`, `optimize`, `speed`, `reverse`, `extract`, `rotate` |
| loop | number | Nie | 0 | Liczba powtórzeń wyjściowego pliku GIF (0 = nieskończenie, 1-100 = skończona liczba pętli) |
### Parametry trybu zmiany rozmiaru {#resize-mode-parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| width | integer | Nie | - | Docelowa szerokość w pikselach (1 do 16384) |
| height | integer | Nie | - | Docelowa wysokość w pikselach (1 do 16384) |
| percentage | number | Nie | - | Skalowanie procentowe (1 do 500). Nadpisuje width/height, jeśli ustawione. |
### Parametry trybu optymalizacji {#optimize-mode-parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| colors | number | Nie | 256 | Maksymalna liczba kolorów w palecie (2 do 256) |
| dither | number | Nie | 1.0 | Siła ditheringu (0 do 1, gdzie 0 wyłącza dithering) |
| effort | number | Nie | 7 | Poziom wysiłku optymalizacji (1 do 10, wyższy = wolniej, ale mniejszy) |
### Parametry trybu prędkości {#speed-mode-parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| speedFactor | number | Nie | 1.0 | Mnożnik prędkości (0.1 do 10). Wartości > 1 przyspieszają, < 1 spowalniają. |
### Parametry trybu wyodrębniania {#extract-mode-parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| extractMode | string | Nie | `"single"` | Tryb wyodrębniania: `single`, `range`, `all` |
| frameNumber | number | Nie | 0 | Indeks klatki do wyodrębnienia w trybie `single` (od 0) |
| frameStart | number | Nie | 0 | Indeks klatki początkowej dla trybu `range` (od 0) |
| frameEnd | number | Nie | - | Indeks klatki końcowej dla trybu `range` (od 0, włącznie) |
| extractFormat | string | Nie | `"png"` | Format wyodrębnionych klatek: `png`, `webp` |
### Parametry trybu obracania {#rotate-mode-parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| angle | number | Nie | - | Kąt obrotu: `90`, `180` lub `270` stopni |
| flipH | boolean | Nie | `false` | Odbij w poziomie |
| flipV | boolean | Nie | `false` | Odbij w pionie |
## Przykładowe żądania {#example-requests}
### Zmiana rozmiaru {#resize}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools \
-F "file=@animation.gif" \
-F 'settings={"mode":"resize","percentage":50}'
```
### Optymalizacja {#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}'
```
### Przyspieszenie {#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}'
```
### Wyodrębnienie pojedynczej klatki {#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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/animation.gif",
"originalSize": 2345678,
"processedSize": 1234567
}
```
## Podtrasa Info {#info-sub-route}
`POST /api/v1/tools/image/gif-tools/info`
Zwraca metadane o animowanym pliku GIF bez jego przetwarzania.
### Żądanie Info {#info-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools/info \
-F "file=@animation.gif"
```
### Odpowiedź 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
}
```
## Uwagi {#notes}
- Wykorzystuje standardową fabrykę `createToolRoute` dla głównego punktu końcowego przetwarzania.
- Punkt końcowy info wymaga jedynie przesłania pliku (nie są potrzebne żadne ustawienia).
- W trybie `resize`, jeśli podano `percentage`, ma on priorytet nad `width`/`height`. Zmiana rozmiaru używa `fit: inside` w celu zachowania proporcji.
- W trybie `speed` opóźnienia klatek są dzielone przez współczynnik prędkości. Minimalne opóźnienie na klatkę wynosi 20 ms (ograniczenie specyfikacji GIF).
- W trybie `reverse` dostępny jest również parametr `speedFactor`, aby jednocześnie dostosować prędkość podczas odwracania.
- W trybie `extract` z `range` lub `all` wynikiem jest plik ZIP zawierający poszczególne klatki.
- W trybie `rotate` każda klatka jest przetwarzana indywidualnie i ponownie składana w animację.
- Parametr `loop` kontroluje, ile razy wyjściowy plik GIF się zapętla. Użyj 0 dla nieskończonego zapętlania.
- Pole `duration` w odpowiedzi info to całkowity czas trwania animacji w milisekundach.
+51
View File
@@ -0,0 +1,51 @@
---
description: "Konwertuj animowany GIF na WebP i odwrotnie, zachowując wszystkie klatki."
i18n_source_hash: 20946e5001cb
i18n_provenance: human
i18n_output_hash: 716380fe088a
---
# Konwerter GIF/WebP {#gif-webp-converter}
Konwertuj animowane pliki GIF na WebP i odwrotnie, zachowując wszystkie klatki i taktowanie animacji. Animacje WebP są zazwyczaj o 25-35% mniejsze niż równoważne pliki GIF.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/gif-webp`
Przyjmuje dane formularza multipart z plikiem GIF lub WebP oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| quality | integer | Nie | `80` | Jakość wyjściowa dla kodowania WebP (1-100) |
| lossless | boolean | Nie | `false` | Użyj bezstratnej kompresji WebP |
| resizePercent | integer | Nie | `100` | Skaluj wynik procentowo (10-100) |
## Przykładowe żądanie {#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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/animation.webp",
"originalSize": 3500000,
"processedSize": 2200000
}
```
## Uwagi {#notes}
- Akceptowane są tylko pliki `.gif` i `.webp`. Inne formaty obrazów nie są obsługiwane przez to narzędzie.
- Kierunek konwersji jest automatyczny: wejście GIF daje wyjście WebP, a wejście WebP daje wyjście GIF.
- Opcje `quality` i `lossless` mają zastosowanie tylko podczas kodowania do WebP. Podczas konwersji do GIF wynik używa standardowej palety GIF.
- Użyj `resizePercent`, aby zmniejszyć wymiary (i rozmiar pliku) dużych animacji.
+65
View File
@@ -0,0 +1,65 @@
---
description: "Generuj wykres histogramu RGB ze statystykami dla poszczególnych kanałów z obrazu."
i18n_source_hash: 57aa610206a5
i18n_provenance: human
i18n_output_hash: 14ab115a148f
---
# Histogram {#histogram}
Generuj wykres histogramu RGB z obrazu. Zwraca obraz histogramu w formacie PNG wraz ze statystykami dla poszczególnych kanałów oraz surowymi danymi histogramu z 256 przedziałami w odpowiedzi JSON.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/histogram`
Przyjmuje dane formularza multipart z plikiem obrazu oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| scale | string | Nie | `"linear"` | Skala osi Y: `linear` lub `log` |
## Przykładowe żądanie {#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"}'
```
## Przykładowa odpowiedź {#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 }
}
```
## Uwagi {#notes}
- `downloadUrl` wskazuje na wyrenderowany wykres histogramu PNG pokazujący rozkłady R, G, B i luminancji.
- `bins` zawiera surowe tablice 256 wartości dla każdego kanału (czerwony, zielony, niebieski, luminancja), przydatne do renderowania niestandardowych wizualizacji.
- `stats` dostarcza średnią, medianę i odchylenie standardowe dla każdego kanału.
- `mean` i `max` to zgodne wstecznie pola skrócone.
- Użyj skali `log`, gdy histogram jest zdominowany przez kilka szczytów, a chcesz zobaczyć szczegóły w niższych przedziałach.
- Wejścia HEIC, RAW, PSD i SVG są automatycznie dekodowane przed analizą.
+81
View File
@@ -0,0 +1,81 @@
---
description: "Przechwytuj strony internetowe lub fragmenty HTML jako obrazy wysokiej jakości z emulacją urządzeń."
i18n_source_hash: 1e49d070ea2e
i18n_provenance: human
i18n_output_hash: bb38d8d464f0
---
# HTML na obraz {#html-to-image}
Przechwyć adres URL strony internetowej lub surową zawartość HTML jako obraz zrzutu ekranu. Obsługuje emulację urządzeń (komputer stacjonarny, tablet, telefon), przechwytywanie całej strony i wiele formatów wyjściowych.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/html-to-image`
Przyjmuje **treść JSON** (nie multipart). Nie jest wymagane przesyłanie pliku.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| url | string | Warunkowo | - | Adres URL do przechwycenia (musi być prawidłowym adresem URL) |
| html | string | Warunkowo | - | Surowa zawartość HTML do wyrenderowania (1 do 5 000 000 znaków) |
| format | string | Nie | `"png"` | Format wyjściowy: `jpg`, `png`, `webp` |
| quality | number | Nie | `90` | Jakość wyjściowa dla formatów stratnych (1 do 100) |
| fullPage | boolean | Nie | `false` | Przechwyć całą przewijalną stronę, a nie tylko widoczny obszar |
| devicePreset | string | Nie | `"desktop"` | Emulacja urządzenia: `desktop`, `tablet`, `mobile`, `custom` |
| viewportWidth | number | Nie | `1280` | Niestandardowa szerokość widoku w pikselach (320 do 3840, używana gdy devicePreset to `custom`) |
| viewportHeight | number | Nie | `720` | Niestandardowa wysokość widoku w pikselach (320 do 2160, używana gdy devicePreset to `custom`) |
Należy podać albo `url`, albo `html`, ale nie oba naraz.
### Presety urządzeń {#device-presets}
| Preset | Szerokość | Wysokość | Mobilny UA |
|--------|-------|--------|-----------|
| `desktop` | 1280 | 720 | Nie |
| `tablet` | 768 | 1024 | Nie |
| `mobile` | 375 | 812 | Tak |
| `custom` | (określone przez użytkownika) | (określone przez użytkownika) | Nie |
## Przykładowe żądanie {#example-request}
Przechwyć stronę internetową:
```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"}'
```
Wyrenderuj zawartość 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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/screenshot.png",
"originalSize": 0,
"processedSize": 145000
}
```
## Uwagi {#notes}
- Wymaga zainstalowania Chromium na serwerze. Zwraca HTTP 503, jeśli usługa przeglądarki jest niedostępna.
- Adresy URL są walidowane pod kątem ataków SSRF (adresy sieci prywatnej/wewnętrznej są blokowane).
- Ten punkt końcowy jest ograniczony do 120 żądań na godzinę.
- `originalSize` zawsze wynosi 0, ponieważ to narzędzie generuje obrazy z adresów URL/HTML.
- Nazwa pliku wyjściowego to `screenshot.<format>`.
- Jeśli wczytanie strony trwa zbyt długo, żądanie zwraca HTTP 504 (przekroczenie limitu czasu bramy).
- Jeśli usługa przeglądarki wielokrotnie ulega awarii, jest tymczasowo wyłączana i zwraca HTTP 503 z kodem `BROWSER_CRASHED`.
@@ -0,0 +1,99 @@
---
description: "Automatyczne ulepszanie jednym kliknięciem, które analizuje obraz i koryguje ekspozycję, kontrast, balans bieli, nasycenie i ostrość."
i18n_source_hash: 42b6ab956f91
i18n_provenance: human
i18n_output_hash: e8d464571edb
---
# Ulepszanie obrazu {#image-enhancement}
Automatyczne ulepszanie jednym kliknięciem z inteligentną analizą. Analizuje obraz i stosuje korekcje ekspozycji, kontrastu, balansu bieli, nasycenia, ostrości i odszumiania.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/image-enhancement`
**Przetwarzanie:** Synchroniczne (używa fabryki `createToolRoute`, zwraca wynik bezpośrednio)
**Pakiet modelu:** Nie jest wymagany do podstawowego ulepszania. Pakiet `upscale-enhance` (5-6 GB) jest używany tylko wtedy, gdy włączone jest `deepEnhance` (do usuwania szumów AI za pomocą SCUNet).
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| mode | string | Nie | `"auto"` | Tryb ulepszania: `auto`, `portrait`, `landscape`, `low-light`, `food`, `document` |
| intensity | number | Nie | `50` | Ogólna intensywność ulepszania (0-100) |
| corrections | object | Nie | wszystkie `true` | Selektywne korekcje do zastosowania (patrz niżej) |
| deepEnhance | boolean | Nie | `false` | Włącz usuwanie szumów wspomagane AI (wymaga zainstalowanego narzędzia `noise-removal`) |
### Obiekt corrections {#corrections-object}
| Pole | Typ | Domyślnie | Opis |
|-------|------|---------|-------------|
| exposure | boolean | `true` | Automatyczna korekcja ekspozycji |
| contrast | boolean | `true` | Automatyczna korekcja kontrastu |
| whiteBalance | boolean | `true` | Automatyczna korekcja balansu bieli |
| saturation | boolean | `true` | Automatyczna korekcja nasycenia |
| sharpness | boolean | `true` | Automatyczne wyostrzanie |
| denoise | boolean | `true` | Lekkie odszumianie |
## Przykładowe żądanie {#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}}'
```
## Odpowiedź (200 OK) {#response-200-ok}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/{jobId}/photo.jpg",
"originalSize": 300000,
"processedSize": 310000
}
```
## Punkt końcowy Analyze {#analyze-endpoint}
`POST /api/v1/tools/image/image-enhancement/analyze`
Analizuje obraz i zwraca zalecenia korekcji bez ich stosowania.
### Parametry {#parameters-1}
| Parametr | Typ | Wymagany | Opis |
|-----------|------|----------|-------------|
| file | file | Tak | Plik obrazu (multipart) |
### Przykładowe żądanie {#example-request-1}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/image-enhancement/analyze \
-F "file=@photo.jpg"
```
### Odpowiedź (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" }
}
}
```
## Uwagi {#notes}
- To narzędzie używa synchronicznej fabryki `createToolRoute`, więc zwraca standardową odpowiedź (nie 202 async).
- Parametr `mode` dostosowuje sposób ważenia korekcji (np. tryb portretowy jest łagodniejszy dla odcieni skóry, tryb krajobrazowy zwiększa nasycenie).
- Gdy `deepEnhance` jest włączone i narzędzie `noise-removal` (SCUNet) jest zainstalowane, po standardowych korekcjach stosowany jest dodatkowy przebieg odszumiania AI.
- Punkt końcowy analyze jest przydatny do podglądu, jakie korekcje zostałyby zastosowane, przed ich zatwierdzeniem.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
+54
View File
@@ -0,0 +1,54 @@
---
description: "Dopełnij obraz do docelowych proporcji jednolitym kolorem, przezroczystym lub rozmytym tłem."
i18n_source_hash: 796122da3dae
i18n_provenance: human
i18n_output_hash: 47d27ff89e89
---
# Dopełnianie obrazu {#image-pad}
Dopełnij obraz do docelowych proporcji, dodając wokół niego jednolity kolor, przezroczyste lub rozmyte tło. Przydatne do dopasowywania obrazów do stałych proporcji dla mediów społecznościowych lub druku bez przycinania.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/image-pad`
Przyjmuje dane formularza multipart z plikiem obrazu oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| target | string | Nie | `"1:1"` | Docelowe proporcje: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` lub `custom` |
| ratioW | integer | Nie | `1` | Niestandardowa szerokość proporcji (1-100, używana gdy target to `custom`) |
| ratioH | integer | Nie | `1` | Niestandardowa wysokość proporcji (1-100, używana gdy target to `custom`) |
| background | string | Nie | `"color"` | Tryb tła: `color`, `transparent` lub `blur` |
| color | string | Nie | `"#ffffff"` | Kolor tła w formacie hex (gdy background to `color`) |
| padding | integer | Nie | `0` | Dodatkowy odstęp jako procent kanwy (0-50) |
## Przykładowe żądanie {#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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 3100000
}
```
## Uwagi {#notes}
- Tryb tła `blur` tworzy rozmytą kopię oryginalnego obrazu jako wypełnienie dopełnienia, dając wizualnie spójny rezultat.
- Podczas używania tła `transparent` wynik jest konwertowany na PNG w celu zachowania kanału alfa.
- Format wyjściowy odpowiada formatowi wejściowemu, chyba że w grę wchodzi przezroczystość. Wejścia HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetwarzaniem.
- Ustaw `target` na `custom` i podaj `ratioW` oraz `ratioH` dla dowolnych proporcji (np. `ratioW: 3, ratioH: 2` dla 3:2).
@@ -0,0 +1,96 @@
---
description: "Konwertuj obrazy na identyfikatory URI danych Base64 do osadzania w HTML, CSS i innych."
i18n_source_hash: ba4b8f3b4ece
i18n_provenance: human
i18n_output_hash: 4af7bf124f8d
---
# Obraz na Base64 {#image-to-base64}
Konwertuj jeden lub więcej obrazów na ciągi zakodowane w Base64 i identyfikatory URI danych. Obsługuje opcjonalną konwersję formatu, kontrolę jakości i zmianę rozmiaru. Przydatne do osadzania obrazów bezpośrednio w HTML, CSS, JSON lub szablonach e-mail.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/image-to-base64`
Przyjmuje dane formularza multipart z jednym lub większą liczbą plików obrazów oraz opcjonalnym polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| outputFormat | string | Nie | `"original"` | Konwertuj przed zakodowaniem: `original`, `jpeg`, `png`, `webp`, `avif`, `jxl` |
| quality | number | Nie | `80` | Jakość wyjściowa dla formatów stratnych (1 do 100) |
| maxWidth | number | Nie | `0` | Maksymalna szerokość w pikselach (0 = brak zmiany rozmiaru, nie powiększy) |
| maxHeight | number | Nie | `0` | Maksymalna wysokość w pikselach (0 = brak zmiany rozmiaru, nie powiększy) |
## Przykładowe żądanie {#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}'
```
Wiele plików:
```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"}'
```
## Przykładowa odpowiedź {#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": []
}
```
## Pola odpowiedzi {#response-fields}
| Pole | Typ | Opis |
|-------|------|-------------|
| results | array | Pomyślnie przekonwertowane obrazy |
| errors | array | Obrazy, których nie udało się przetworzyć (z nazwą pliku i komunikatem błędu) |
### Obiekt result {#result-object}
| Pole | Typ | Opis |
|-------|------|-------------|
| filename | string | Oryginalna nazwa pliku |
| mimeType | string | Typ MIME zakodowanego wyniku |
| width | number | Końcowa szerokość w pikselach (po ewentualnej zmianie rozmiaru) |
| height | number | Końcowa wysokość w pikselach (po ewentualnej zmianie rozmiaru) |
| originalSize | number | Oryginalny rozmiar pliku w bajtach |
| encodedSize | number | Rozmiar ciągu Base64 w bajtach |
| overheadPercent | number | Procentowa różnica rozmiaru względem oryginału (dodatnia = większy, ujemna = mniejszy) |
| base64 | string | Surowe dane obrazu zakodowane w Base64 |
| dataUri | string | Kompletny identyfikator URI danych gotowy do użycia w atrybutach `src` |
## Uwagi {#notes}
- Kodowanie Base64 zazwyczaj zwiększa rozmiar o około 33% w porównaniu z plikiem binarnym. Pole `overheadPercent` pokazuje rzeczywistą różnicę.
- Gdy `outputFormat` to `"original"`, pliki HEIC/HEIF są konwertowane na JPEG (ponieważ przeglądarki nie mogą wyświetlać HEIC w identyfikatorach URI danych).
- Opcje `maxWidth` i `maxHeight` zmieniają rozmiar za pomocą `fit: inside` z `withoutEnlargement`, więc obrazy mniejsze niż podane wymiary nie są powiększane.
- W jednym żądaniu można przetworzyć wiele plików. Każdy plik jest przetwarzany niezależnie, a niepowodzenia nie uniemożliwiają pomyślnego przetworzenia innych plików.
- Pliki SVG są przepuszczane jako `image/svg+xml` bez ponownego kodowania (chyba że zażądano konwersji formatu).
- To punkt końcowy tylko do odczytu. Nie tworzy pliku do pobrania ani `jobId`. Dane Base64 są zwracane bezpośrednio w treści odpowiedzi.
+119
View File
@@ -0,0 +1,119 @@
---
description: "Połącz jeden lub więcej obrazów w dokument PDF z opcjami rozmiaru strony, orientacji i docelowego rozmiaru pliku."
i18n_source_hash: f659c7e7f56b
i18n_provenance: human
i18n_output_hash: 990d14b7fce3
---
# Obraz na PDF {#image-to-pdf}
Połącz jeden lub więcej obrazów w dokument PDF. Obsługuje wiele rozmiarów stron, orientacji, marginesów oraz opcjonalne ustawienie docelowego rozmiaru pliku poprzez regulację jakości.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/image-to-pdf`
Przyjmuje dane formularza multipart z jednym lub większą liczbą plików obrazów oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| pageSize | string | Nie | `"A4"` | Rozmiar strony: `A4`, `Letter`, `A3`, `A5` |
| orientation | string | Nie | `"portrait"` | Orientacja strony: `portrait` lub `landscape` |
| margin | number | Nie | `20` | Margines strony w punktach (0-500) |
| targetSize | object | Nie | - | Ograniczenie docelowego rozmiaru pliku (patrz niżej) |
| collate | boolean | Nie | `true` | Połącz wszystkie obrazy w jeden PDF. Jeśli `false`, tworzy jeden PDF na obraz. |
### Obiekt targetSize {#target-size-object}
| Pole | Typ | Wymagany | Opis |
|-------|------|----------|-------------|
| value | number | Tak | Wartość docelowego rozmiaru |
| unit | string | Tak | Jednostka: `KB` lub `MB` |
Minimalny docelowy rozmiar to 50 KB.
## Przykładowe żądanie {#example-request}
Podstawowy PDF z wieloma obrazami:
```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}'
```
Z docelowym rozmiarem pliku:
```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"}}'
```
Jeden PDF na obraz:
```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}'
```
## Przykładowa odpowiedź (połączona) {#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
}
```
## Przykładowa odpowiedź (niepołączona) {#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
}
```
## Przykładowa odpowiedź (z docelowym rozmiarem) {#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
}
}
```
## Uwagi {#notes}
- Obrazy są wyśrodkowane na stronie i skalowane tak, aby zmieściły się w marginesach, zachowując proporcje. Obrazy nigdy nie są powiększane.
- Gdy `collate` to `false`, każdy obraz staje się osobnym plikiem PDF, a plikiem do pobrania jest archiwum ZIP zawierające wszystkie pliki PDF.
- Funkcja docelowego rozmiaru używa iteracyjnego wyszukiwania binarnego po poziomach jakości JPEG (10-95), aby znaleźć najlepszą jakość mieszczącą się w budżecie.
- Przezroczyste obrazy są spłaszczane do bieli przed osadzeniem w PDF.
- Obsługiwane formaty wejściowe: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC, RAW, PSD, SVG i inne.
- Orientacja EXIF jest automatycznie stosowana przed osadzeniem.
+92
View File
@@ -0,0 +1,92 @@
---
description: "Wyświetl szczegółowe metadane obrazu, właściwości i statystyki histogramu dla poszczególnych kanałów."
i18n_source_hash: 8a0f7a0b0153
i18n_provenance: human
i18n_output_hash: ad7ebbe87780
---
# Informacje o obrazie {#image-info}
Narzędzie analityczne tylko do odczytu, które zwraca kompleksowe metadane obrazu, w tym wymiary, format, przestrzeń kolorów, obecność EXIF/ICC/XMP oraz statystyki histogramu dla poszczególnych kanałów. Nie tworzy przetworzonego pliku wyjściowego.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/info`
Przyjmuje dane formularza multipart z plikiem obrazu. Pole ustawień nie jest potrzebne.
## Parametry {#parameters}
To narzędzie nie ma konfigurowalnych parametrów. Wystarczy przesłać plik obrazu.
| Pole | Typ | Wymagany | Opis |
|-------|------|----------|-------------|
| file | file | Tak | Obraz do analizy |
## Przykładowe żądanie {#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"
```
## Przykładowa odpowiedź {#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 }
]
}
```
## Pola odpowiedzi {#response-fields}
| Pole | Typ | Opis |
|-------|------|-------------|
| filename | string | Oczyszczona nazwa pliku |
| fileSize | number | Rozmiar pliku w bajtach |
| width | number | Szerokość obrazu w pikselach |
| height | number | Wysokość obrazu w pikselach |
| format | string | Wykryty format (jpeg, png, webp itd.) |
| channels | number | Liczba kanałów kolorów |
| hasAlpha | boolean | Czy obraz ma kanał alfa |
| colorSpace | string | Przestrzeń kolorów (srgb, cmyk itd.) |
| density | number lub null | Rozdzielczość DPI/PPI |
| isProgressive | boolean | Czy JPEG używa kodowania progresywnego |
| orientation | number lub null | Wartość orientacji EXIF (1-8) |
| hasProfile | boolean | Czy osadzony jest profil ICC |
| hasExif | boolean | Czy obecne są metadane EXIF |
| hasIcc | boolean | Czy obecny jest profil kolorów ICC |
| hasXmp | boolean | Czy obecne są metadane XMP |
| bitDepth | string lub null | Bity na próbkę |
| pages | number | Liczba stron (dla formatów wielostronicowych, takich jak TIFF, GIF) |
| histogram | array | Statystyki dla poszczególnych kanałów (min, max, średnia, odchylenie standardowe) |
## Uwagi {#notes}
- To punkt końcowy tylko do odczytu. Nie tworzy pliku wyjściowego do pobrania ani `jobId`.
- W przypadku obrazów w formacie RAW (DNG, CR2, NEF, ARW itd.) do wyodrębnienia rzeczywistych wymiarów sensora i flag metadanych, których Sharp nie potrafi odczytać bezpośrednio, używany jest ExifTool.
- Pliki HEIC/HEIF są dekodowane wewnętrznie do PNG w celu wyodrębnienia statystyk pikseli, ponieważ Sharp nie potrafi dekodować pikseli HEVC.
- Histogram dostarcza min/max/średnią/odchylenie standardowe na kanał, a nie pełny rozkład z 256 przedziałami.
- Pole `density` odzwierciedla osadzone metadane DPI, jeśli są obecne.
@@ -0,0 +1,62 @@
---
description: "Generuj maleńki symbol zastępczy obrazu niskiej jakości z identyfikatorem URI danych Base64."
i18n_source_hash: f8a27c8021f5
i18n_provenance: human
i18n_output_hash: 2fc223c7c2e9
---
# Symbol zastępczy LQIP {#lqip-placeholder}
Generuj maleńki symbol zastępczy obrazu niskiej jakości (LQIP) z obrazu źródłowego. Zwraca mały plik symbolu zastępczego wraz z identyfikatorem URI danych Base64, gotowym do użycia znacznikiem HTML `<img>` oraz fragmentem CSS `background-image` do natychmiastowego osadzenia.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/lqip-placeholder`
Przyjmuje dane formularza multipart z plikiem obrazu oraz polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| width | integer | Nie | `16` | Docelowa szerokość w pikselach (4-64) |
| blur | number | Nie | `2` | Promień rozmycia dla strategii rozmycia (0-20) |
| strategy | string | Nie | `"blur"` | Strategia symbolu zastępczego: `blur`, `pixelate` lub `solid` |
| format | string | Nie | `"webp"` | Format wyjściowy: `webp`, `png` lub `jpeg` |
| quality | integer | Nie | `50` | Jakość wyjściowa (1-100) |
## Przykładowe żądanie {#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"}'
```
## Przykładowa odpowiedź {#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;"
}
```
## Uwagi {#notes}
- Pole `dataUri` zawiera kompletny identyfikator URI danych, gotowy do użycia w atrybutach `src` lub CSS bez żadnych dodatkowych żądań.
- Pola `html` i `css` dostarczają fragmenty do skopiowania i wklejenia w typowych zastosowaniach.
- Strategia `blur` tworzy miękką, rozmytą miniaturę. Strategia `pixelate` tworzy blokową mozaikę. Strategia `solid` zwraca pojedynczy uśredniony kolor.
- Typowe rozmiary symboli zastępczych to 200-500 bajtów, co czyni je odpowiednimi do osadzania bezpośrednio w HTML.
- Wysokość jest obliczana automatycznie, aby zachować proporcje obrazu źródłowego.
- Wejścia HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetwarzaniem.
@@ -0,0 +1,92 @@
---
description: "Twórz memy z szablonów lub własnych obrazów, ze stylizowanymi polami tekstowymi i opcjami czcionek."
i18n_source_hash: 0a4970112ca6
i18n_provenance: human
i18n_output_hash: 5641aa8f9ea3
---
# Generator memów {#meme-generator}
Twórz memy przy użyciu wbudowanych szablonów lub własnych obrazów. Dodawaj tekst w klasycznej stylistyce memów (pogrubiony tekst z obrysem), z wieloma gotowymi układami i opcjami czcionek.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/meme-generator`
Przyjmuje jedno z dwóch:
- **Dane formularza multipart** z plikiem obrazu i polem JSON `settings` (tryb własnego obrazu)
- **Treść JSON** z `templateId` (tryb szablonu, bez potrzeby przesyłania pliku)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| templateId | string | Nie | - | ID wbudowanego szablonu memu. Jeśli podane, nie trzeba przesyłać obrazu |
| textLayout | string | Nie | `"top-bottom"` | Układ pól tekstowych: `top-bottom`, `top-only`, `bottom-only`, `center`, `side-by-side` |
| textBoxes | array | Nie | `[]` | Tablica obiektów pól tekstowych z polami `id` i `text` |
| fontFamily | string | Nie | `"anton"` | Czcionka: `anton`, `arial-black`, `comic-sans`, `montserrat`, `bebas-neue`, `permanent-marker`, `roboto` |
| fontSize | number | Nie | auto | Rozmiar czcionki w pikselach (8 do 200). Obliczany automatycznie, jeśli pominięty |
| textColor | string | Nie | `"#ffffff"` | Kolor wypełnienia tekstu |
| strokeColor | string | Nie | `"#000000"` | Kolor obrysu/konturu tekstu |
| textAlign | string | Nie | `"center"` | Wyrównanie tekstu: `left`, `center`, `right` |
| allCaps | boolean | Nie | `true` | Zamień tekst na wielkie litery |
### Pola tekstowe {#text-boxes}
Każdy wpis w tablicy `textBoxes` powinien mieć:
| Pole | Typ | Opis |
|-------|------|-------------|
| id | string | Identyfikator pola pasujący do układu (np. `"top"`, `"bottom"`, `"left"`, `"right"`, `"center"`) |
| text | string | Tekst memu do wyświetlenia |
### Identyfikatory pól dla układów tekstu {#text-layout-box-ids}
| Układ | Dostępne ID pól |
|--------|-------------------|
| `top-bottom` | `top`, `bottom` |
| `top-only` | `top` |
| `bottom-only` | `bottom` |
| `center` | `center` |
| `side-by-side` | `left`, `right` |
## Przykładowe żądanie {#example-request}
Własny obraz z tekstem u góry i u dołu:
```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}'
```
Z użyciem wbudowanego szablonu (treść JSON, bez przesyłania pliku):
```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"}]}'
```
## Przykładowa odpowiedź {#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
}
```
## Uwagi {#notes}
- Wymagane jest podanie `templateId` albo przesłanego pliku obrazu. Podanie obu naraz spowoduje użycie szablonu.
- Szablony definiują własne pozycje pól tekstowych; parametr `textLayout` jest ignorowany przy użyciu szablonów.
- Tekst jest renderowany jako SVG z obrysem, aby uzyskać klasyczny wygląd memu.
- Rozmiar czcionki jest obliczany automatycznie tak, aby zmieścić tekst w polu, jeśli nie został ustawiony jawnie.
- Puste pola tekstowe są pomijane (renderowanie nie następuje, jeśli wszystkie pola są puste).
- Nazwa pliku wynikowego zawiera ID szablonu przy jego użyciu (np. `meme-drake.png`).
- Pliki wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetwarzaniem.
+79
View File
@@ -0,0 +1,79 @@
---
description: "Usuwanie szumu i ziarna wspomagane AI z wielopoziomowymi opcjami jakości."
i18n_source_hash: f0dfc876e0e0
i18n_provenance: human
i18n_output_hash: 0845acd65ae1
---
# Usuwanie szumu {#noise-removal}
Usuwanie szumu i ziarna wspomagane AI z wielopoziomowymi opcjami jakości, przy użyciu sidecara w Pythonie (model SCUNet).
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/noise-removal`
**Przetwarzanie:** Asynchroniczne (zwraca 202, odpytuj `/api/v1/jobs/{jobId}/progress` o status przez SSE)
**Pakiet modeli:** `upscale-enhance` (5-6 GB)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| tier | string | Nie | `"balanced"` | Poziom jakości: `quick`, `balanced`, `quality`, `maximum` |
| strength | number | Nie | `50` | Siła odszumiania (0-100) |
| detailPreservation | number | Nie | `50` | Jak wiele szczegółów zachować (0-100). Wyższe wartości zachowują więcej tekstury |
| colorNoise | number | Nie | `30` | Siła redukcji szumu barwnego (0-100) |
| format | string | Nie | `"original"` | Format wyjściowy: `original`, `png`, `jpeg`, `webp`, `avif`, `jxl` |
| quality | number | Nie | `90` | Jakość kodowania wyjścia (1-100) |
## Przykładowe żądanie {#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}'
```
## Odpowiedź {#response}
### Odpowiedź początkowa (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Postęp (SSE pod `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Denoising...","percent":65}
```
### Wynik końcowy (przez 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
}
}
```
## Uwagi {#notes}
- Wymaga zainstalowania pakietu modeli `upscale-enhance` (5-6 GB).
- Poziomy jakości to kompromis między szybkością a jakością: `quick` jest najszybszy z podstawowym odszumianiem, `maximum` stosuje najbardziej dokładne podejście wieloprzebiegowe.
- Parametr `detailPreservation` ma kluczowe znaczenie dla obiektów o teksturze (tkanina, włosy, listowie). Wyższe wartości zapobiegają wygładzaniu drobnych szczegółów przez algorytm odszumiania.
- Gdy `format` ma wartość `"original"`, format wyjściowy odpowiada formatowi pliku wejściowego.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
+65
View File
@@ -0,0 +1,65 @@
---
description: "Wyodrębniaj tekst z obrazów za pomocą optycznego rozpoznawania znaków wspomaganego AI."
i18n_source_hash: 3d85d423b82c
i18n_provenance: human
i18n_output_hash: 41c5d748cf54
---
# OCR / Wyodrębnianie tekstu {#ocr-text-extraction}
Wyodrębniaj tekst z obrazów za pomocą optycznego rozpoznawania znaków wspomaganego AI. Obsługuje wiele języków i poziomów jakości.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/ocr`
**Przetwarzanie:** Synchroniczna odpowiedź JSON. Jeśli podano `clientJobId`, postęp jest też raportowany przez SSE.
**Pakiet modeli:** `ocr` (5-6 GB)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| quality | string | Nie | `"balanced"` | Poziom jakości: `fast` (Tesseract), `balanced` (PaddleOCR v5), `best` (PaddleOCR VL) |
| language | string | Nie | `"auto"` | Podpowiedź językowa: `auto`, `en`, `de`, `fr`, `es`, `zh`, `ja`, `ko` |
| enhance | boolean | Nie | `true` | Wstępnie przetwórz obraz dla lepszej dokładności OCR |
| engine | string | Nie | - | Przestarzały. Użyj `quality`. Mapuje `tesseract` na `fast`, `paddleocr` na `balanced` |
## Przykładowe żądanie {#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}'
```
## Odpowiedź (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"
}
```
### Postęp (SSE, opcjonalnie) {#progress-sse-optional}
Jeśli podano pole formularza `clientJobId`, zdarzenia postępu są strumieniowane:
```
event: progress
data: {"phase":"processing","stage":"Recognizing text...","percent":50}
```
## Uwagi {#notes}
- Wymaga zainstalowania pakietu modeli `ocr` (5-6 GB).
- OCR zwraca wyodrębniony tekst bezpośrednio, a nie adres URL do pobrania obrazu.
- Używa łańcucha awaryjnego: jeśli poziom o wyższej jakości ulegnie awarii (np. segfault PaddleOCR), automatycznie ponawia próbę z kolejnym niższym poziomem.
- Jeśli poziom zwróci pusty tekst bez awarii, również przełącza się na kolejny poziom.
- Poziomy jakości mapują się na silniki: `fast` = Tesseract, `balanced` = PaddleOCR v5, `best` = PaddleOCR VL.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
@@ -0,0 +1,74 @@
---
description: "Optymalizuj obrazy do publikacji w sieci z konwersją formatu, kontrolą jakości, zmianą rozmiaru i usuwaniem metadanych."
i18n_source_hash: c327bbbce768
i18n_provenance: human
i18n_output_hash: 5e9a8ae5d62a
---
# Optymalizacja pod sieć {#optimize-for-web}
Optymalizuj obrazy do publikacji w sieci w jednym kroku. Łączy konwersję formatu, dostosowanie jakości, opcjonalną zmianę rozmiaru, kodowanie progresywne i usuwanie metadanych.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/optimize-for-web`
Przyjmuje dane formularza multipart z plikiem obrazu i polem JSON `settings`.
Dostępny jest też punkt końcowy podglądu na żywo pod `POST /api/v1/tools/image/optimize-for-web/preview`, który zwraca przetworzony obraz bezpośrednio jako dane binarne (bez tworzenia obszaru roboczego) na potrzeby strojenia parametrów w czasie rzeczywistym.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| format | string | Nie | `"webp"` | Format wyjściowy: `webp`, `jpeg`, `avif`, `png`, `jxl` |
| quality | number | Nie | `80` | Jakość wyjścia (1-100) |
| maxWidth | number | Nie | - | Maksymalna szerokość w pikselach. Obraz jest zmniejszany, jeśli jest szerszy. |
| maxHeight | number | Nie | - | Maksymalna wysokość w pikselach. Obraz jest zmniejszany, jeśli jest wyższy. |
| progressive | boolean | Nie | `true` | Włącz kodowanie progresywne/przeplatane |
| stripMetadata | boolean | Nie | `true` | Usuń metadane EXIF, GPS, ICC i XMP |
## Przykładowe żądanie {#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}'
```
Optymalizacja do AVIF z agresywną kompresją:
```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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.webp",
"originalSize": 4500000,
"processedSize": 320000
}
```
### Odpowiedź punktu końcowego podglądu {#preview-endpoint-response}
Punkt końcowy podglądu (`/api/v1/tools/image/optimize-for-web/preview`) zwraca obraz binarny bezpośrednio wraz z nagłówkami informacyjnymi:
- `X-Original-Size` - Rozmiar oryginalnego pliku w bajtach
- `X-Processed-Size` - Rozmiar przetworzonego pliku w bajtach
- `X-Output-Filename` - Nazwa pliku wynikowego zakodowana w URL
## Uwagi {#notes}
- To narzędzie jest zaprojektowane jako kompleksowy potok optymalizacji zasobów sieciowych. Obsługuje konwersję formatu, strojenie jakości, ograniczanie maksymalnych wymiarów i usuwanie metadanych w jednym przebiegu.
- Rozszerzenie nazwy pliku wynikowego jest aktualizowane, aby pasowało do wybranego formatu.
- Kodowanie JXL (JPEG XL) używa wyspecjalizowanego kodera CLI. Obraz jest najpierw przetwarzany jako PNG, a następnie kodowany do JXL.
- Kodowanie progresywne poprawia postrzegany czas ładowania dla JPEG i PNG, umożliwiając przeglądarkom wyświetlenie podglądu niskiej jakości przed pełnym załadowaniem obrazu.
- Punkt końcowy podglądu jest lżejszy (bez tworzenia obszaru roboczego/zadania) i jest przeznaczony do interfejsu strojenia parametrów na żywo we frontendzie.
+173
View File
@@ -0,0 +1,173 @@
---
description: "Generator zdjęć paszportowych i do dokumentów wspomagany AI z wykrywaniem twarzy, usuwaniem tła i układaniem na arkuszu do druku."
i18n_source_hash: d4b4f4ced988
i18n_provenance: human
i18n_output_hash: e7771c6de920
---
# Zdjęcie paszportowe {#passport-photo}
Generator zdjęć paszportowych i do dokumentów wspomagany AI. Dwuetapowy przepływ pracy: analiza (wykrywanie twarzy + usuwanie tła), a następnie generowanie (kadrowanie, zmiana rozmiaru i układanie do druku).
## Punkty końcowe API {#api-endpoints}
To narzędzie używa dwuetapowego przepływu z osobnymi punktami końcowymi do analizy i generowania.
**Pakiety modeli:** `background-removal` i `face-detection`
---
### Etap 1: Analiza {#phase-1-analyze}
`POST /api/v1/tools/image/passport-photo/analyze`
Wykrywa punkty charakterystyczne twarzy i usuwa tło. Zwraca dane punktów charakterystycznych oraz podgląd, aby frontend mógł wyświetlić podgląd kadrowania.
#### Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| clientJobId | string | Nie | - | Opcjonalne ID zadania do śledzenia postępu przez SSE |
#### Przykładowe żądanie {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/passport-photo/analyze \
-F "file=@headshot.jpg"
```
#### Odpowiedź (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
}
```
#### Postęp (SSE, opcjonalnie) {#progress-sse-optional}
Jeśli podano `clientJobId`, postęp jest strumieniowany (0-30% dla wykrywania twarzy, 30-95% dla usuwania tła).
#### Błąd: Nie wykryto twarzy (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."
}
```
---
### Etap 2: Generowanie {#phase-2-generate}
`POST /api/v1/tools/image/passport-photo/generate`
Kadruje, zmienia rozmiar i opcjonalnie układa zdjęcie na arkuszu do druku. Korzysta z obrazów zapisanych w pamięci podręcznej z Etapu 1 (bez ponownego uruchamiania AI).
#### Parametry (treść JSON) {#parameters-json-body}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| jobId | string | Tak | - | ID zadania z Etapu 1 |
| filename | string | Tak | - | Oryginalna nazwa pliku z Etapu 1 |
| countryCode | string | Tak | - | Kod kraju dla specyfikacji paszportu (np. `US`, `GB`, `IN`) |
| documentType | string | Nie | `"passport"` | Typ dokumentu (ze specyfikacji kraju) |
| bgColor | string | Nie | `"#FFFFFF"` | Kolor tła w formacie hex |
| printLayout | string | Nie | `"none"` | Układ papieru do druku: `none`, `4x6`, `a4` |
| maxFileSizeKb | number | Nie | `0` | Ograniczenie maksymalnego rozmiaru pliku w KB (0 = bez limitu) |
| dpi | number | Nie | `300` | DPI wyjścia (72-1200) |
| customWidthMm | number | Nie | - | Własna szerokość zdjęcia w mm (nadpisuje specyfikację kraju) |
| customHeightMm | number | Nie | - | Własna wysokość zdjęcia w mm (nadpisuje specyfikację kraju) |
| zoom | number | Nie | `1` | Współczynnik przybliżenia (0.5-3). Wartości > 1 kadrują ciaśniej |
| adjustX | number | Nie | `0` | Korekta położenia w poziomie |
| adjustY | number | Nie | `0` | Korekta położenia w pionie |
| landmarks | object | Tak | - | Obiekt punktów charakterystycznych z odpowiedzi Etapu 1 |
| imageWidth | number | Tak | - | Szerokość obrazu z odpowiedzi Etapu 1 |
| imageHeight | number | Tak | - | Wysokość obrazu z odpowiedzi Etapu 1 |
#### Przykładowe żądanie {#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
}'
```
#### Odpowiedź (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"
}
```
---
### Trasa bazowa {#base-route}
`POST /api/v1/tools/image/passport-photo`
Zwraca wskazówki, aby użyć właściwego podrzędnego punktu końcowego.
```json
{
"error": "Use /api/v1/tools/image/passport-photo/analyze or /generate"
}
```
## Uwagi {#notes}
- Wymaga zainstalowania pakietów modeli `background-removal` i `face-detection`.
- Etap 1 uruchamia AI (punkty charakterystyczne twarzy + usuwanie tła) i zapisuje wyniki w pamięci podręcznej. Etap 2 to czysta manipulacja obrazem w Sharp (szybka, bez potrzeby AI).
- Punkty charakterystyczne są zwracane jako współrzędne znormalizowane (zakres 0-1 względem wymiarów obrazu).
- Pole `preview` w odpowiedzi analizy to zakodowany w base64 obraz PNG (maks. 800px szerokości) dla szybkiego wyświetlania.
- Specyfikacje krajów obejmują wymiary dokumentu, proporcje wysokości głowy i pozycjonowanie linii oczu na podstawie oficjalnych wymagań dotyczących zdjęć paszportowych.
- Opcja `printLayout` generuje arkusz z ułożonymi zdjęciami na papierze 4x6\" lub A4 z 2mm odstępami między zdjęciami.
- Gdy ustawiono `maxFileSizeKb`, wynik jest iteracyjnie kompresowany, aby zmieścić się w limicie rozmiaru.
+69
View File
@@ -0,0 +1,69 @@
---
description: "Zastosuj efekt pikselizacji do całego obrazu lub wybranego obszaru."
i18n_source_hash: a3ad29841f7b
i18n_provenance: human
i18n_output_hash: f098fbbfdcab
---
# Pikselizacja {#pixelate}
Zastosuj efekt pikselizacji do całego obrazu lub wybranego prostokątnego obszaru. Przydatne do zasłaniania wrażliwej treści, takiej jak twarze, tablice rejestracyjne czy dane osobowe.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/pixelate`
Przyjmuje dane formularza multipart z plikiem obrazu i polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| blockSize | integer | Nie | `12` | Rozmiar bloku pikseli (2-128); większe wartości dają grubszą pikselizację |
| region | object | Nie | - | Ogranicz pikselizację do prostokąta (patrz poniżej) |
### Obiekt region {#region-object}
| Pole | Typ | Wymagane | Opis |
|-------|------|----------|-------------|
| left | integer | Tak | Przesunięcie od lewej w pikselach (>= 0) |
| top | integer | Tak | Przesunięcie od góry w pikselach (>= 0) |
| width | integer | Tak | Szerokość obszaru w pikselach (>= 1) |
| height | integer | Tak | Wysokość obszaru w pikselach (>= 1) |
## Przykładowe żądanie {#example-request}
Pikselizacja całego obrazu:
```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}'
```
Pikselizacja wybranego obszaru:
```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}}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2380000
}
```
## Uwagi {#notes}
- Gdy `region` jest pominięty, pikselizowany jest cały obraz.
- Współrzędne obszaru są podawane w pikselach względem lewego górnego rogu obrazu. Obszar musi mieścić się w granicach obrazu.
- Format wyjściowy odpowiada formatowi wejściowemu. Pliki wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetwarzaniem.
+76
View File
@@ -0,0 +1,76 @@
---
description: "Generuj kody QR z niestandardowymi kolorami i poziomami korekcji błędów."
i18n_source_hash: 096ef4d90da5
i18n_provenance: human
i18n_output_hash: d9030f17e1ca
---
# Generator kodów QR {#qr-code-generator}
Generuj obrazy kodów QR z tekstu lub adresów URL z konfigurowalnym rozmiarem, poziomem korekcji błędów oraz niestandardowymi kolorami pierwszego planu i tła.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/qr-generate`
Przyjmuje **treść JSON** (nie multipart). Nie jest potrzebne przesyłanie pliku.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| text | string | Tak | - | Treść do zakodowania w kodzie QR (od 1 do 2000 znaków) |
| size | number | Nie | `400` | Szerokość/wysokość obrazu wynikowego w pikselach (100 do 10000) |
| errorCorrection | string | Nie | `"M"` | Poziom korekcji błędów: `L` (7%), `M` (15%), `Q` (25%), `H` (30%) |
| foreground | string | Nie | `"#000000"` | Kolor pierwszego planu/modułów kodu QR w hex (`#RRGGBB`) |
| background | string | Nie | `"#FFFFFF"` | Kolor tła kodu QR w hex (`#RRGGBB`) |
| logoDataUri | string | Nie | - | Obraz logo jako data URI (`data:image/png;base64,...` lub `data:image/jpeg;base64,...`, maks. 700 KB). Wyśrodkowany na kodzie QR na 22% jego rozmiaru. Wymusza korekcję błędów na `H` |
### Poziomy korekcji błędów {#error-correction-levels}
| Poziom | Odzyskiwanie | Zastosowanie |
|-------|----------|----------|
| `L` | ~7% | Maksymalna gęstość danych |
| `M` | ~15% | Zrównoważony (domyślny) |
| `Q` | ~25% | Dobry dla kodów drukowanych |
| `H` | ~30% | Najlepszy dla kodów z nakładką logo |
## Przykładowe żądanie {#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"}'
```
Kod QR z marką i niestandardowymi kolorami:
```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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/qrcode.png",
"originalSize": 0,
"processedSize": 4520
}
```
## Uwagi {#notes}
- Ten punkt końcowy przyjmuje JSON, a nie dane formularza multipart, ponieważ nie jest potrzebne przesyłanie obrazu.
- Wynikiem jest zawsze obraz PNG.
- Nazwa pliku wynikowego to zawsze `qrcode.png`.
- `originalSize` zawsze wynosi 0, ponieważ to narzędzie generuje obrazy od zera.
- Wokół kodu QR uwzględniana jest 2-modułowa strefa cichej (margines).
- Maksymalna długość tekstu to 2000 znaków. Rzeczywista pojemność zależy od poziomu korekcji błędów i kodowania znaków.
- Wyższe poziomy korekcji błędów pozwalają, by kod QR pozostał skanowalny nawet przy częściowym zasłonięciu, ale zmniejszają pojemność danych.
- Gdy podano `logoDataUri`, korekcja błędów jest automatycznie wymuszana na `H` (30%), aby kod QR pozostał skanowalny mimo zasłonięcia środka przez logo.
@@ -0,0 +1,79 @@
---
description: "Wykrywanie i korekcja efektu czerwonych oczu spowodowanego lampą błyskową, wspomagane AI."
i18n_source_hash: 647c6ff1ef7c
i18n_provenance: human
i18n_output_hash: 1f5d29f39bb0
---
# Usuwanie efektu czerwonych oczu {#red-eye-removal}
Wykrywanie i korekcja efektu czerwonych oczu spowodowanego lampą błyskową, wspomagane AI.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/red-eye-removal`
**Przetwarzanie:** Asynchroniczne (zwraca 202, odpytuj `/api/v1/jobs/{jobId}/progress` o status przez SSE)
**Pakiet modeli:** `face-detection` (200-300 MB)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| sensitivity | number | Nie | `50` | Czułość wykrywania czerwonych oczu (0-100). Wyższe wartości wykrywają subtelniejszy efekt |
| strength | number | Nie | `70` | Siła korekcji (0-100). Jak agresywnie neutralizować czerwień |
| format | string | Nie | - | Format wyjściowy (opcjonalne nadpisanie) |
| quality | number | Nie | `90` | Jakość wyjścia (1-100) |
## Przykładowe żądanie {#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}'
```
## Odpowiedź {#response}
### Odpowiedź początkowa (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Postęp (SSE pod `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Detecting red eyes...","percent":40}
```
### Wynik końcowy (przez 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
}
}
```
## Uwagi {#notes}
- Wymaga zainstalowania pakietu modeli `face-detection` (200-300 MB).
- Najpierw wykrywa twarze, następnie lokalizuje obszary oczu w każdej twarzy, a na końcu identyfikuje i koryguje piksele czerwonych oczu.
- Licznik `facesDetected` wskazuje, ile twarzy znaleziono; `eyesCorrected` to łączna liczba pojedynczych oczu, w których skorygowano efekt czerwonych oczu.
- Wyjściem jest zawsze PNG dla maksymalnego zachowania jakości.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
@@ -0,0 +1,136 @@
---
description: "Usuwanie tła wspomagane AI z opcjonalnymi efektami (rozmycie, cień, gradient, niestandardowe tło)."
i18n_source_hash: 326a91284529
i18n_provenance: human
i18n_output_hash: c66a3291299a
---
# Usuwanie tła {#remove-background}
Usuwanie tła wspomagane AI z opcjonalnymi efektami (rozmycie, cień, gradient, niestandardowe tło).
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/remove-background`
**Przetwarzanie:** Asynchroniczne (zwraca 202, odpytuj `/api/v1/jobs/{jobId}/progress` o status przez SSE)
**Pakiet modeli:** `background-removal` (4-5 GB)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| model | string | Nie | - | Wariant modelu AI do użycia |
| backgroundType | string | Nie | `"transparent"` | Jedno z: `transparent`, `color`, `gradient`, `blur`, `image` |
| backgroundColor | string | Nie | - | Kolor hex dla jednolitego tła |
| gradientColor1 | string | Nie | - | Pierwszy kolor gradientu |
| gradientColor2 | string | Nie | - | Drugi kolor gradientu |
| gradientAngle | number | Nie | - | Kąt gradientu w stopniach |
| blurEnabled | boolean | Nie | - | Włącz efekt rozmycia tła |
| blurIntensity | number | Nie | - | Intensywność rozmycia (0-100) |
| shadowEnabled | boolean | Nie | - | Włącz cień pod obiektem |
| shadowOpacity | number | Nie | - | Krycie cienia (0-100) |
| outputFormat | string | Nie | - | Format wyjściowy: `png`, `webp` lub `avif` |
| edgeRefine | integer | Nie | - | Poziom wygładzania krawędzi (0-3) |
| decontaminate | boolean | Nie | - | Usuń przenikanie koloru z krawędzi |
## Przykładowe żądanie {#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"}'
```
## Odpowiedź {#response}
### Odpowiedź początkowa (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Postęp (SSE pod `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Removing background...","percent":50}
```
### Wynik końcowy (przez 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"
}
}
```
## Punkt końcowy efektów (Etap 2) {#effects-endpoint-phase-2}
`POST /api/v1/tools/image/remove-background/effects`
Ponownie stosuje efekty tła bez ponownego uruchamiania modelu AI. Korzysta z zapisanej w pamięci podręcznej maski i oryginału z Etapu 1.
### Parametry {#parameters-1}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| settings | JSON | Tak | - | JSON z ustawieniami efektów (patrz poniżej) |
| backgroundImage | file | Nie | - | Niestandardowy obraz tła (gdy backgroundType to `image`) |
#### Pola JSON ustawień {#settings-json-fields}
| Pole | Typ | Wymagane | Opis |
|-------|------|----------|-------------|
| jobId | string | Tak | ID zadania z Etapu 1 |
| filename | string | Tak | Oryginalna nazwa pliku z Etapu 1 |
| backgroundType | string | Nie | `transparent`, `color`, `gradient`, `blur`, `image` |
| backgroundColor | string | Nie | Kolor hex dla jednolitego tła |
| gradientColor1 | string | Nie | Pierwszy kolor gradientu |
| gradientColor2 | string | Nie | Drugi kolor gradientu |
| gradientAngle | number | Nie | Kąt gradientu w stopniach |
| blurEnabled | boolean | Nie | Włącz rozmycie tła |
| blurIntensity | number | Nie | Intensywność rozmycia (0-100) |
| shadowEnabled | boolean | Nie | Włącz cień |
| shadowOpacity | number | Nie | Krycie cienia (0-100) |
| outputFormat | string | Nie | `png`, `webp` lub `avif` |
### Przykładowe żądanie {#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"}'
```
### Odpowiedź (200 OK) {#response-200-ok}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/{jobId}/photo_nobg.png",
"processedSize": 195000
}
```
## Uwagi {#notes}
- Wymaga zainstalowania pakietu modeli `background-removal` (4-5 GB).
- Etap 1 zapisuje w pamięci podręcznej przezroczystą maskę i oryginalny obraz, dzięki czemu Etap 2 (efekty) może natychmiast zastosować różne tła bez ponownego uruchamiania modelu AI.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
- Obrót EXIF jest automatycznie korygowany przed przetwarzaniem.
+62
View File
@@ -0,0 +1,62 @@
---
description: "Zastąp określony kolor na obrazie innym kolorem lub uczyń go przezroczystym."
i18n_source_hash: df55ac451ecb
i18n_provenance: human
i18n_output_hash: 738c3a5148df
---
# Zamiana i inwersja koloru {#replace-invert-color}
Zastąp piksele pasujące do koloru źródłowego kolorem docelowym lub uczyń je przezroczystymi. Używa odległości euklidesowej w przestrzeni RGB z konfigurowalną tolerancją dla płynnego przejścia na granicach kolorów.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/replace-color`
Przyjmuje dane formularza multipart z plikiem obrazu i polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| sourceColor | string | Nie | `"#FF0000"` | Kolor hex do znalezienia (format: `#RRGGBB`) |
| targetColor | string | Nie | `"#00FF00"` | Kolor hex, na który zamienić (format: `#RRGGBB`) |
| makeTransparent | boolean | Nie | `false` | Uczyń pasujące piksele przezroczystymi zamiast zamieniać na kolor docelowy |
| tolerance | number | Nie | `30` | Tolerancja dopasowania koloru (0 do 255). Wyższe wartości dopasowują szerszy zakres podobnych kolorów |
## Przykładowe żądanie {#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}'
```
Uczyń zielone tło przezroczystym:
```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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.png",
"originalSize": 2450000,
"processedSize": 2100000
}
```
## Uwagi {#notes}
- Dopasowanie koloru używa odległości euklidesowej w przestrzeni RGB, skalowanej przez `tolerance * sqrt(3)`.
- Mieszanie przy zamianie jest proporcjonalne do odległości koloru: piksele bliższe kolorowi źródłowemu otrzymują więcej koloru docelowego, tworząc płynne przejścia.
- Gdy `makeTransparent` ma wartość `true`, wynik jest wymuszany na PNG (lub WebP/AVIF), jeśli format wejściowy nie obsługuje kanałów alfa (np. JPEG).
- Tolerancja 0 dopasowuje tylko dokładny kolor źródłowy. Wyższe wartości (50+) dopasują szerszy zakres podobnych odcieni.
- Format wyjściowy odpowiada formatowi wejściowemu, chyba że potrzebna jest przezroczystość, a format wejściowy nie obsługuje kanału alfa.
+72
View File
@@ -0,0 +1,72 @@
---
description: "Zmieniaj rozmiar obrazów w pikselach, procentowo lub z trybami dopasowania."
i18n_source_hash: 00d1bffa4d38
i18n_provenance: human
i18n_output_hash: d0de66d1ead7
---
# Zmiana rozmiaru {#resize}
Zmieniaj rozmiar obrazów, podając dokładne wymiary w pikselach, procentowy współczynnik skali lub tryb dopasowania kontrolujący, jak obraz dostosowuje się do wymiarów docelowych.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/resize`
Przyjmuje dane formularza multipart z plikiem obrazu i polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| width | integer | Nie | - | Docelowa szerokość w pikselach (maks. 16383) |
| height | integer | Nie | - | Docelowa wysokość w pikselach (maks. 16383) |
| fit | string | Nie | `"contain"` | Jak obraz dopasowuje się do wymiarów: `contain`, `cover`, `fill`, `inside`, `outside` |
| withoutEnlargement | boolean | Nie | `false` | Zapobiegaj powiększaniu, jeśli obraz jest mniejszy niż cel |
| percentage | number | Nie | - | Skaluj procentowo (np. 50 dla połowy rozmiaru) |
Musi być podany przynajmniej jeden z: `width`, `height` lub `percentage`.
### Tryby dopasowania {#fit-modes}
- **contain** - Zmień rozmiar tak, aby zmieścić się w wymiarach, zachowując proporcje (może pozostawić puste miejsce)
- **cover** - Zmień rozmiar tak, aby pokryć wymiary, zachowując proporcje (może kadrować)
- **fill** - Rozciągnij dokładnie do wymiarów (ignoruje proporcje)
- **inside** - Jak `contain`, ale tylko zmniejsza, nigdy nie powiększa
- **outside** - Jak `cover`, ale tylko zmniejsza, nigdy nie powiększa
## Przykładowe żądanie {#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"}'
```
Zmiana rozmiaru procentowa:
```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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 980000
}
```
## Uwagi {#notes}
- Maksymalny wymiar to 16383 piksele na każdej osi (limit Sharp/libvips).
- Format wyjściowy odpowiada formatowi wejściowemu. Pliki wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetwarzaniem.
- Orientacja EXIF jest automatycznie stosowana przed zmianą rozmiaru.
- Flaga `withoutEnlargement` jest przydatna przy przetwarzaniu wsadowym, gdzie niektóre obrazy mogą już być mniejsze niż cel.
+96
View File
@@ -0,0 +1,96 @@
---
description: "Napraw zarysowania, rozdarcia i uszkodzenia na starych zdjęciach za pomocą potoku AI do renowacji, poprawy twarzy i koloryzacji."
i18n_source_hash: 3de13284216c
i18n_provenance: human
i18n_output_hash: 317d701f3054
---
# Renowacja zdjęć {#photo-restoration}
Napraw zarysowania, rozdarcia i uszkodzenia na starych zdjęciach za pomocą wieloetapowego potoku AI. Łączy naprawę zarysowań, poprawę twarzy, odszumianie i opcjonalną koloryzację.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/restore-photo`
**Przetwarzanie:** Asynchroniczne (zwraca 202, odpytuj `/api/v1/jobs/{jobId}/progress` o status przez SSE)
**Pakiet modeli:** `photo-restoration` (4-5 GB)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| scratchRemoval | boolean | Nie | `true` | Usuń zarysowania i uszkodzenia powierzchni |
| faceEnhancement | boolean | Nie | `true` | Popraw twarze na odrestaurowanym zdjęciu |
| fidelity | number | Nie | `0.7` | Wierność poprawy twarzy (0-1). Wyższe wartości mocniej zachowują oryginalne rysy |
| denoise | boolean | Nie | `true` | Zastosuj odszumianie do odrestaurowanego wyniku |
| denoiseStrength | number | Nie | `25` | Siła odszumiania (0-100) |
| colorize | boolean | Nie | `false` | Koloryzuj odrestaurowane zdjęcie (dla obrazów w skali szarości) |
| colorizeStrength | number | Nie | `85` | Intensywność koloryzacji (0-100) |
## Przykładowe żądanie {#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}'
```
## Odpowiedź {#response}
### Odpowiedź początkowa (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Postęp (SSE pod `/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}
```
### Wynik końcowy (przez 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
}
}
```
## Uwagi {#notes}
- Wymaga zainstalowania pakietu modeli `photo-restoration` (4-5 GB).
- Potok uruchamia wiele kroków AI kolejno: naprawa zarysowań, poprawa twarzy (GFPGAN), odszumianie i opcjonalnie koloryzacja.
- Tablica `steps` w wyniku pokazuje, które kroki przetwarzania zostały faktycznie wykonane.
- `scratchCoverage` to szacowany procent powierzchni obrazu, który miał uszkodzenia zarysowaniami.
- `fidelity` kontroluje, jak mocno twarze są poprawiane w stosunku do zachowania oryginalnego wyglądu. Niższe wartości dają bardziej agresywną poprawę; wyższe wartości są bardziej zachowawcze.
- Opcja `colorize` automatycznie wykrywa, czy obraz jest w skali szarości. Flaga `isGrayscale` w wyniku potwierdza to wykrycie.
- Format wyjściowy odpowiada automatycznie formatowi wejściowemu.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR, HDR i AVIF poprzez automatyczne dekodowanie.
+71
View File
@@ -0,0 +1,71 @@
---
description: "Obracaj obrazy o dowolny kąt i odbijaj je w poziomie lub pionie."
i18n_source_hash: af2581d7cd8d
i18n_provenance: human
i18n_output_hash: 4e6c302679f5
---
# Obrót i odbicie {#rotate-flip}
Obracaj obrazy o dowolny kąt i/lub odbijaj je w poziomie lub pionie. Operacje obrotu i odbicia można łączyć w jednym żądaniu.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/rotate`
Przyjmuje dane formularza multipart z plikiem obrazu i polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślnie | Opis |
|-----------|------|----------|---------|-------------|
| angle | number | Nie | `0` | Kąt obrotu w stopniach (zgodnie z ruchem wskazówek zegara). Przyjmuje dowolną wartość liczbową. |
| horizontal | boolean | Nie | `false` | Odbij obraz w poziomie (lustrzane odbicie) |
| vertical | boolean | Nie | `false` | Odbij obraz w pionie |
## Przykładowe żądanie {#example-request}
Obrót o 90 stopni zgodnie z ruchem wskazówek zegara:
```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}'
```
Odbicie w poziomie:
```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}'
```
Obrót i odbicie razem:
```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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2480000
}
```
## Uwagi {#notes}
- Najpierw stosowany jest obrót, potem operacje odbicia.
- Obroty inne niż o 90 stopni (np. 45 stopni) powiększą płótno, aby zmieścić obrócony obraz, z wypełnieniem przezroczystym lub czarnym zależnie od formatu wyjściowego.
- Typowe wartości: 90, 180, 270 dla obrotów o ćwierć obrotu.
- Orientacja EXIF jest automatycznie stosowana przed przetwarzaniem, więc obrót jest względny do orientacji wizualnej.
+71
View File
@@ -0,0 +1,71 @@
---
description: "Wyostrzaj obrazy metodami adaptacyjną, maski wyostrzającej lub filtra górnoprzepustowego z opcjonalną redukcją szumów."
i18n_source_hash: ccb60af9faae
i18n_provenance: human
i18n_output_hash: 6d8a1b16e180
---
# Wyostrzanie {#sharpening}
Zaawansowane narzędzie do wyostrzania z trzema metodami: adaptacyjną (inteligentne rozpoznawanie krawędzi), maską wyostrzającą (klasyczny promień/siła) oraz filtrem górnoprzepustowym (uwydatnienie tekstury). Zawiera wbudowaną redukcję szumów, aby zapobiec powstawaniu artefaktów wyostrzania.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/sharpening`
Przyjmuje dane formularza multipart z plikiem obrazu i polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| method | string | Nie | `"adaptive"` | Algorytm wyostrzania: `adaptive`, `unsharp-mask`, `high-pass` |
| sigma | number | Nie | `1.0` | Adaptacyjny: sigma Gaussa (0.5 do 10) |
| m1 | number | Nie | `1.0` | Adaptacyjny: wyostrzanie obszarów gładkich (0 do 10) |
| m2 | number | Nie | `3.0` | Adaptacyjny: wyostrzanie obszarów postrzępionych (0 do 20) |
| x1 | number | Nie | `2.0` | Adaptacyjny: próg gładki/postrzępiony (0 do 10) |
| y2 | number | Nie | `12` | Adaptacyjny: maksymalne wyostrzanie obszarów gładkich (0 do 50) |
| y3 | number | Nie | `20` | Adaptacyjny: maksymalne wyostrzanie obszarów postrzępionych (0 do 50) |
| amount | number | Nie | `100` | Maska wyostrzająca: siła wyostrzania (0 do 1000) |
| radius | number | Nie | `1.0` | Maska wyostrzająca: promień rozmycia w pikselach (0.1 do 5) |
| threshold | number | Nie | `0` | Maska wyostrzająca: minimalna różnica jasności do wyostrzenia (0 do 255) |
| strength | number | Nie | `50` | Filtr górnoprzepustowy: siła filtra (0 do 100) |
| kernelSize | number | Nie | `3` | Filtr górnoprzepustowy: rozmiar jądra splotu (3 lub 5) |
| denoise | string | Nie | `"off"` | Redukcja szumów przed wyostrzaniem: `off`, `light`, `medium`, `strong` |
## Przykładowe żądanie {#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}'
```
Maska wyostrzająca z progiem chroniącym gładkie obszary:
```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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2510000
}
```
## Uwagi {#notes}
- Używane są tylko parametry właściwe dla wybranej metody. Na przykład `amount`, `radius` i `threshold` są ignorowane, gdy `method` ma wartość `adaptive`.
- Metoda adaptacyjna korzysta z wbudowanego w Sharp wyostrzania adaptacyjnego z konfigurowalnym zachowaniem dla obszarów gładkich/postrzępionych.
- Opcja `denoise` stosuje redukcję szumów przed wyostrzaniem, aby zapobiec wzmocnieniu szumu/ziarna.
- Wyostrzanie filtrem górnoprzepustowym wydobywa drobne detale, odejmując rozmytą wersję od oryginału, a następnie łącząc ją z powrotem.
- Format wyjściowy odpowiada formatowi wejściowemu. Dane wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetwarzaniem.
+96
View File
@@ -0,0 +1,96 @@
---
description: "Kadrowanie uwzględniające obiekt, twarze i entropię, które inteligentnie komponuje obrazy przy użyciu Sharp i wykrywania twarzy przez AI."
i18n_source_hash: acbe1439c6d8
i18n_provenance: human
i18n_output_hash: cad4c61cd50b
---
# Inteligentne kadrowanie {#smart-crop}
Inteligentne kadrowanie uwzględniające obiekt, twarze lub przycinanie tła. Wykorzystuje strategie uwagi/entropii Sharp oraz wykrywanie twarzy przez AI do inteligentnej kompozycji.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/smart-crop`
**Przetwarzanie:** Asynchroniczne (zwraca 202, odpytuj `/api/v1/jobs/{jobId}/progress` o status przez SSE)
**Pakiet modeli:** `face-detection` (200-300 MB) - wymagany tylko dla trybu `face`
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| mode | string | Nie | `"subject"` | Tryb kadrowania: `subject`, `face`, `trim`. (Starsze wartości `attention` i `content` są mapowane na `subject` i `trim`) |
| strategy | string | Nie | `"attention"` | Strategia dla trybu obiektu: `attention` lub `entropy` |
| width | integer | Nie | - | Docelowa szerokość w pikselach |
| height | integer | Nie | - | Docelowa wysokość w pikselach |
| padding | integer | Nie | `0` | Procent marginesu wokół obiektu (0-50) |
| facePreset | string | Nie | `"head-shoulders"` | Ustawienie kadrowania twarzy: `closeup`, `head-shoulders`, `upper-body`, `half-body` |
| sensitivity | number | Nie | `0.5` | Czułość wykrywania twarzy (0-1) |
| threshold | integer | Nie | `30` | Próg trybu przycinania dla wykrywania tła (0-255) |
| padToSquare | boolean | Nie | `false` | Uzupełnij przycięty wynik do kwadratu |
| padColor | string | Nie | `"#ffffff"` | Kolor tła dla uzupełnienia |
| targetSize | integer | Nie | - | Docelowy rozmiar uzupełnionego wyniku (piksele) |
| quality | integer | Nie | - | Jakość wyjściowa (1-100) |
## Przykładowe żądanie {#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"}'
```
## Odpowiedź {#response}
### Wstępna odpowiedź (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Postęp (SSE pod `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","percent":50}
```
### Wynik końcowy (przez 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
}
}
```
## Tryby {#modes}
### Tryb obiektu {#subject-mode}
Wykorzystuje strategię uwagi lub entropii Sharp, aby znaleźć najbardziej interesujący wizualnie obszar i kadruje wokół niego.
### Tryb twarzy {#face-mode}
Wykrywa twarze za pomocą AI, a następnie komponuje kadr wokół wykrytych twarzy przy użyciu określonego `facePreset`. Wraca do trybu obiektu (strategia uwagi), jeśli nie wykryto żadnych twarzy.
### Tryb przycinania {#trim-mode}
Usuwa jednolite obramowania/tło z obrazu. Opcjonalnie uzupełnia wynik do kwadratu o określonym kolorze tła i rozmiarze docelowym.
## Uwagi {#notes}
- To narzędzie używa fabryki `createToolRoute` z `executionHint: "long"`, więc zwraca 202 z postępem przez SSE.
- Tryb twarzy wymaga pakietu modeli `face-detection` (200-300 MB).
- Tryby obiektu i przycinania działają bez żadnego pakietu modeli AI.
- `facePreset` określa, jak ciasno kadr obejmuje wykryte twarze: `closeup` jest najciaśniejszy, a `half-body` najszerszy.
- Jeśli nie określono szerokości/wysokości, domyślnie przyjmuje 1080x1080.
+49
View File
@@ -0,0 +1,49 @@
---
description: "Podziel jeden obraz na kafelki siatki według wierszy i kolumn lub według rozmiaru w pikselach, zwracane jako archiwum ZIP."
i18n_source_hash: 57a2e11e7cce
i18n_provenance: human
i18n_output_hash: fe0c6f88ea40
---
# Dzielenie obrazu {#image-splitting}
Podziel pojedynczy obraz na kafelki siatki według liczby kolumn/wierszy lub według konkretnych wymiarów w pikselach. Zwraca archiwum ZIP zawierające wszystkie kafelki.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/split`
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| columns | integer | Nie | 3 | Liczba kolumn do podziału (1 do 100) |
| rows | integer | Nie | 3 | Liczba wierszy do podziału (1 do 100) |
| tileWidth | integer | Nie | - | Szerokość kafelka w pikselach (min 10). Zastępuje `columns`, gdy ustawione są jednocześnie `tileWidth` i `tileHeight`. |
| tileHeight | integer | Nie | - | Wysokość kafelka w pikselach (min 10). Zastępuje `rows`, gdy ustawione są jednocześnie `tileWidth` i `tileHeight`. |
| outputFormat | string | Nie | `"original"` | Format wyjściowy kafelków: `original`, `png`, `jpg`, `webp`, `avif`, `jxl` |
| quality | number | Nie | 90 | Jakość wyjściowa dla formatów stratnych (1 do 100) |
## Przykładowe żądanie {#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
```
## Przykładowa odpowiedź {#example-response}
Odpowiedź jest przesyłana strumieniowo bezpośrednio jako plik ZIP z `Content-Type: application/zip`. Nazwa pliku ma format `split-<jobId>.zip`.
Każdy kafelek wewnątrz ZIP jest nazwany `<originalBaseName>_r<row>_c<col>.<ext>` (np. `photo_r1_c1.png`, `photo_r2_c3.webp`).
## Uwagi {#notes}
- Przyjmuje pojedynczy plik obrazu.
- Obsługuje formaty wejściowe HEIC, RAW, PSD i SVG (automatycznie dekodowane).
- Gdy podane są jednocześnie `tileWidth` i `tileHeight`, mają one priorytet nad `columns`/`rows`. Wymiary siatki są obliczane jako `ceil(imageWidth / tileWidth)` i `ceil(imageHeight / tileHeight)`.
- Kafelki brzegowe (najbardziej wysunięta w prawo kolumna, dolny wiersz) mogą być mniejsze niż określony rozmiar kafelka, jeśli wymiary obrazu nie dzielą się równo.
- Maksymalny rozmiar siatki jest ograniczony do 100x100 (10 000 kafelków).
- Odpowiedź przesyła ZIP strumieniowo bezpośrednio, więc nie ma treści odpowiedzi JSON. Użyj `--output` z curl, aby zapisać plik.
+69
View File
@@ -0,0 +1,69 @@
---
description: "Połącz wiele obrazów w jedną siatkę arkusza sprite'ów z metadanymi klatek."
i18n_source_hash: 1938d7fb100d
i18n_provenance: human
i18n_output_hash: 20696c236b46
---
# Arkusz sprite'ów {#sprite-sheet}
Połącz wiele obrazów w jedną siatkę arkusza sprite'ów. Każdy obraz jest skalowany, aby dopasować się do wymiarów pierwszego obrazu, i umieszczany w siatce. Zwraca obraz arkusza sprite'ów wraz z metadanymi współrzędnych dla każdej klatki.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/sprite-sheet`
Przyjmuje dane formularza multipart z dwoma lub więcej plikami obrazów i polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| columns | integer | Nie | `4` | Liczba kolumn w siatce (1-16) |
| padding | integer | Nie | `0` | Odstęp między komórkami w pikselach (0-64) |
| background | string | Nie | `"#ffffff"` | Kolor tła w formacie hex |
| format | string | Nie | `"png"` | Format wyjściowy: `png`, `webp` lub `jpeg` |
| quality | integer | Nie | `90` | Jakość wyjściowa (1-100) |
## Przykładowe żądanie {#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"}'
```
## Przykładowa odpowiedź {#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
}
```
## Uwagi {#notes}
- Przyjmuje od 2 do 64 obrazów. Wszystkie obrazy są skalowane, aby dopasować się do wymiarów pierwszego przesłanego obrazu.
- Tablica `frames` podaje dokładne współrzędne pikselowe każdej klatki w wyniku, odpowiednie do definicji sprite'ów CSS lub map klatek silników gier.
- Liczba wierszy jest obliczana automatycznie na podstawie liczby obrazów i wartości `columns`.
- Użyj parametru `padding`, aby dodać odstęp między komórkami. Kolor `background` jest widoczny w obszarach odstępów oraz we wszelkich pustych końcowych komórkach.
- Dane wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetwarzaniem.
+63
View File
@@ -0,0 +1,63 @@
---
description: "Łącz obrazy obok siebie, jeden nad drugim lub w siatce, z kontrolą wyrównania, odstępów, obramowań i trybu skalowania."
i18n_source_hash: 39333210505a
i18n_provenance: human
i18n_output_hash: 74ff73169fd0
---
# Łączenie / Scalanie {#stitch-combine}
Łącz wiele obrazów obok siebie, ułożonych pionowo lub rozmieszczonych w siatce. Obsługuje wyrównanie, odstępy, obramowanie, zaokrąglenie narożników i wiele trybów skalowania.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/stitch`
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| direction | string | Nie | `"horizontal"` | Kierunek układu: `horizontal`, `vertical`, `grid` |
| gridColumns | integer | Nie | 2 | Liczba kolumn, gdy kierunek to `grid` (2 do 100) |
| resizeMode | string | Nie | `"fit"` | Sposób skalowania obrazów: `fit`, `original`, `stretch`, `crop` |
| alignment | string | Nie | `"center"` | Wyrównanie w poprzek osi: `start`, `center`, `end` |
| gap | number | Nie | 0 | Odstęp między obrazami w pikselach (0 do 1000) |
| border | number | Nie | 0 | Szerokość zewnętrznego obramowania w pikselach (0 do 500) |
| cornerRadius | number | Nie | 0 | Zaokrąglenie narożników zastosowane do końcowego wyniku (0 do 500) |
| backgroundColor | string | Nie | `"#FFFFFF"` | Kolor tła/obramowania w formacie hex (np. `#FF0000`) |
| format | string | Nie | `"png"` | Format wyjściowy: `png`, `jpeg`, `webp`, `avif`, `jxl` |
| quality | number | Nie | 90 | Jakość wyjściowa (1 do 100) |
## Przykładowe żądanie {#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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/stitch.png",
"originalSize": 1234567,
"processedSize": 987654
}
```
## Uwagi {#notes}
- Wymaga co najmniej 2 obrazów. Prześlij wiele plików obrazów w żądaniu multipart.
- Obsługuje formaty wejściowe HEIC, RAW, PSD i SVG (automatycznie dekodowane).
- Tryby skalowania:
- `fit` - Skaluje obrazy tak, aby dopasować się do najmniejszego wymiaru wzdłuż osi łączenia.
- `original` - Zachowuje oryginalne rozmiary (może dawać nierówne krawędzie).
- `stretch` - Wymusza dopasowanie obrazów do najmniejszego wymiaru bez zachowania proporcji.
- `crop` - Kadruje obrazy metodą cover, aby dopasować się do najmniejszego wymiaru.
- W trybie `grid` komórki są skalowane do median wymiarów wszystkich obrazów.
- `cornerRadius` jest stosowane do całego końcowego wyniku, a nie do poszczególnych obrazów.
- Rozmiar płótna jest ograniczony konfiguracją serwera `MAX_CANVAS_PIXELS`, aby zapobiec wyczerpaniu pamięci.
+113
View File
@@ -0,0 +1,113 @@
---
description: "Usuń metadane EXIF, GPS, ICC i XMP z obrazów dla prywatności i mniejszego rozmiaru plików."
i18n_source_hash: e89147734fd0
i18n_provenance: human
i18n_output_hash: e96a07138b5c
---
# Usuwanie metadanych {#remove-metadata}
Usuń metadane EXIF, GPS, profile kolorów ICC oraz XMP z obrazów. Przydatne dla prywatności (usuwanie współrzędnych GPS, informacji o aparacie) oraz zmniejszania rozmiaru pliku.
## Punkty końcowe API {#api-endpoints}
### Usuwanie metadanych {#strip-metadata}
`POST /api/v1/tools/image/strip-metadata`
Przetwarza obraz i zwraca oczyszczoną wersję z usuniętymi wybranymi metadanymi.
### Inspekcja metadanych {#inspect-metadata}
`POST /api/v1/tools/image/strip-metadata/inspect`
Zwraca sparsowane metadane jako JSON bez modyfikowania obrazu. Przydatne do podglądu, jakie metadane istnieją, przed ich usunięciem.
## Parametry (Usuwanie) {#parameters-strip}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| stripExif | boolean | Nie | `false` | Usuń dane EXIF (ustawienia aparatu, daty itp.) |
| stripGps | boolean | Nie | `false` | Usuń tylko dane GPS/lokalizacji |
| stripIcc | boolean | Nie | `false` | Usuń profil kolorów ICC |
| stripXmp | boolean | Nie | `false` | Usuń metadane XMP (Adobe, IPTC) |
| stripAll | boolean | Nie | `true` | Usuń wszystkie metadane naraz |
Gdy `stripAll` ma wartość `true`, zastępuje ono poszczególne flagi i usuwa wszystko.
## Przykładowe żądanie {#example-request}
Usuń wszystkie metadane:
```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}'
```
Usuń tylko dane GPS (zachowaj informacje o aparacie i profil kolorów):
```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}'
```
Sprawdź metadane bez modyfikowania:
```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"
```
## Przykładowa odpowiedź (Usuwanie) {#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
}
```
## Przykładowa odpowiedź (Inspekcja) {#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"
}
}
```
## Uwagi {#notes}
- Obraz jest ponownie kodowany w oryginalnym formacie po usunięciu metadanych. JPEG używa mozjpeg z jakością 90, PNG używa poziomu kompresji 9, WebP używa jakości 85.
- Usunięcie profili ICC może powodować subtelne przesunięcia kolorów, jeśli obraz był oznaczony profilem innym niż sRGB. Użyj `stripIcc: false`, jeśli dokładność kolorów ma znaczenie.
- Punkt końcowy inspekcji parsuje współrzędne GPS na dziesiętne wartości szerokości/długości geograficznej (poprzedzone podkreśleniem) dla wygody.
- Obsługiwane formaty wejściowe: JPEG, PNG, WebP, AVIF, TIFF, GIF.
+85
View File
@@ -0,0 +1,85 @@
---
description: "Konwertuj pliki SVG do PNG, JPEG, WebP, AVIF, TIFF, GIF, HEIF lub JXL w niestandardowej rozdzielczości i DPI, z obsługą przetwarzania wsadowego."
i18n_source_hash: cf36830f8797
i18n_provenance: human
i18n_output_hash: f2c4302cb6d9
---
# SVG do rastra {#svg-to-raster}
Konwertuj pliki SVG do rastrowych formatów obrazu (PNG, JPEG, WebP, AVIF, TIFF, GIF, HEIF lub JXL) w niestandardowej rozdzielczości i DPI. Obsługuje również konwersję wsadową wielu plików SVG.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/svg-to-raster`
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| width | integer | Nie | - | Docelowa szerokość w pikselach (1 do 65536). Zachowuje proporcje, jeśli ustawiono tylko jeden wymiar. |
| height | integer | Nie | - | Docelowa wysokość w pikselach (1 do 65536). Zachowuje proporcje, jeśli ustawiono tylko jeden wymiar. |
| dpi | integer | Nie | 300 | DPI renderowania, kontroluje bazową gęstość rasteryzacji (36 do 2400) |
| quality | number | Nie | 90 | Jakość wyjściowa dla formatów stratnych (1 do 100) |
| backgroundColor | string | Nie | `"#00000000"` | Kolor tła w formacie hex (6 lub 8 znaków, wersja 8-znakowa zawiera kanał alfa) |
| outputFormat | string | Nie | `"png"` | Format wyjściowy: `png`, `jpg`, `webp`, `avif`, `tiff`, `gif`, `heif`, `jxl` |
## Przykładowe żądanie {#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"}'
```
## Przykładowa odpowiedź {#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
}
```
## Punkt końcowy przetwarzania wsadowego {#batch-endpoint}
`POST /api/v1/tools/image/svg-to-raster/batch`
Konwertuj wiele plików SVG w jednym żądaniu. Zwraca archiwum ZIP.
### Dodatkowe parametry wsadowe {#additional-batch-parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| clientJobId | string | Nie | - | Opcjonalny identyfikator zadania dostarczony przez klienta do śledzenia postępu (maks. 128 znaków) |
### Przykładowe żądanie wsadowe {#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}'
```
### Odpowiedź wsadowa {#batch-response}
Punkt końcowy przetwarzania wsadowego przesyła strumieniowo plik ZIP bezpośrednio z nagłówkami:
- `Content-Type: application/zip`
- `X-Job-Id: <jobId>`
- `X-File-Results: <url-encoded JSON mapping of index to filename>`
## Uwagi {#notes}
- Przyjmuje wyłącznie pliki SVG i SVGZ (waliduje zawartość, nie tylko rozszerzenie). SVGZ jest automatycznie dekompresowany.
- Zawartość SVG jest oczyszczana przed renderowaniem, aby zapobiec atakom XSS i ładowaniu zasobów zewnętrznych.
- Ustawienie `dpi` kontroluje gęstość, z jaką SVG jest rasteryzowany. Wyższe DPI daje większe wymiary pikselowe z tego samego widoku SVG.
- Gdy podane są jednocześnie `width` i `height`, obraz jest skalowany za pomocą `fit: inside` (zachowuje proporcje w granicach).
- `previewUrl` jest dołączany do odpowiedzi dla formatów, których przeglądarki nie mogą natywnie wyświetlić (TIFF, HEIF). Podgląd to miniatura WebP o rozmiarze 1200px.
- Domyślne tło `#00000000` jest całkowicie przezroczyste. Ustaw `#FFFFFF` dla białego tła (przydatne przy wyjściu JPEG, który nie obsługuje przezroczystości).
- Przetwarzanie wsadowe respektuje konfigurację serwera `MAX_BATCH_SIZE` i wykorzystuje współbieżnych pracowników dla wydajności.
- Postęp operacji wsadowych można śledzić przez SSE pod `/api/v1/jobs/:jobId/progress`.
+66
View File
@@ -0,0 +1,66 @@
---
description: "Dodawaj stylizowane nakładki tekstowe z cieniami i tłem w formie prostokąta."
i18n_source_hash: 9f8e697188fc
i18n_provenance: human
i18n_output_hash: 76614f24d297
---
# Nakładka tekstowa {#text-overlay}
Dodawaj stylizowany tekst do obrazów z opcjonalnym cieniem i półprzezroczystym prostokątnym tłem. Odpowiednie do tytułów, podpisów lub adnotacji na zdjęciach.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/text-overlay`
Przyjmuje dane formularza multipart z plikiem obrazu i polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| text | string | Tak | - | Tekst do nałożenia (1 do 500 znaków) |
| fontSize | number | Nie | `48` | Rozmiar czcionki w pikselach (8 do 200) |
| color | string | Nie | `"#FFFFFF"` | Kolor tekstu w formacie hex (`#RRGGBB`) |
| position | string | Nie | `"bottom"` | Umieszczenie w pionie: `top`, `center`, `bottom` |
| backgroundBox | boolean | Nie | `false` | Pokaż półprzezroczysty prostokąt tła za tekstem |
| backgroundColor | string | Nie | `"#000000"` | Kolor prostokąta tła w formacie hex (`#RRGGBB`) |
| shadow | boolean | Nie | `true` | Zastosuj cień za tekstem |
## Przykładowe żądanie {#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}'
```
Z prostokątem tła:
```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"}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2470000
}
```
## Uwagi {#notes}
- Tekst jest zawsze wyśrodkowany poziomo w obrębie obrazu.
- Cień używa przesunięcia 2px z rozmyciem 3px przy 70% nieprzezroczystości czerni.
- Prostokąt tła obejmuje całą szerokość obrazu przy 70% nieprzezroczystości, a jego wysokość jest proporcjonalna do rozmiaru czcionki (1.8x).
- Tekst jest renderowany przez kompozyt SVG, więc używana jest domyślna bezszeryfowa czcionka systemu.
- Znaki specjalne XML w tekście są bezpiecznie escapowane.
- Format wyjściowy odpowiada formatowi wejściowemu. Dane wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetwarzaniem.
@@ -0,0 +1,78 @@
---
description: "Napraw fałszywie przezroczyste pliki PNG za pomocą mattingu AI (BiRefNet), aby uzyskać prawdziwy kanał alfa, plus czyszczenie krawędzi metodą defringe."
i18n_source_hash: 7eb748b80f93
i18n_provenance: human
i18n_output_hash: e85aa5b620ef
---
# Naprawianie przezroczystości PNG {#png-transparency-fixer}
Napraw fałszywie przezroczyste pliki PNG jednym kliknięciem. Wykorzystuje matting AI (model BiRefNet HR Matting), aby uzyskać prawdziwą przezroczystość alfa, z przetwarzaniem końcowym defringe do oczyszczania krawędzi.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/transparency-fixer`
**Przetwarzanie:** Asynchroniczne (zwraca 202, odpytuj `/api/v1/jobs/{jobId}/progress` o status przez SSE)
**Pakiet modeli:** `background-removal` (4-5 GB)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| defringe | number | Nie | `30` | Intensywność defringe (0-100). Usuwa półprzezroczyste piksele obwódki wokół krawędzi |
| outputFormat | string | Nie | `"png"` | Format wyjściowy: `png` lub `webp` |
| removeWatermark | boolean | Nie | `false` | Zastosuj przetwarzanie wstępne usuwające znak wodny (filtr medianowy) |
## Przykładowe żądanie {#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"}'
```
## Odpowiedź {#response}
### Wstępna odpowiedź (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Postęp (SSE pod `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Processing transparency...","percent":50}
```
### Wynik końcowy (przez 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"
}
}
```
## Uwagi {#notes}
- Wymaga zainstalowania pakietu modeli `background-removal` (4-5 GB).
- Używa `birefnet-hr-matting` jako podstawowego modelu do wysokiej jakości mattingu alfa. Wraca do `birefnet-general`, jeśli modelowi HR zabraknie pamięci.
- Opcja `defringe` usuwa półprzezroczyste piksele obwódki, które matting AI czasem pozostawia wokół włosów, futra i drobnych krawędzi. Działa przez rozmycie kanału alfa i wyzerowanie pikseli o niskiej pewności.
- Opcja `removeWatermark` stosuje krok przetwarzania wstępnego z filtrem medianowym. Jest to podstawowa redukcja znaku wodnego, a nie dedykowane narzędzie do jego usuwania.
- Wyprowadza wyłącznie PNG lub bezstratny WebP (oba obsługują przezroczystość alfa).
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
+83
View File
@@ -0,0 +1,83 @@
---
description: "Powiększaj obrazy od 2x do 4x za pomocą superrozdzielczości AI Real-ESRGAN, zachowując drobne detale."
i18n_source_hash: 150032e99476
i18n_provenance: human
i18n_output_hash: e1778b4b5ecf
---
# Powiększanie obrazu {#image-upscaling}
Ulepszanie za pomocą superrozdzielczości AI przy użyciu Real-ESRGAN. Powiększa obrazy 2x-4x, zachowując detale.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/upscale`
**Przetwarzanie:** Asynchroniczne (zwraca 202, odpytuj `/api/v1/jobs/{jobId}/progress` o status przez SSE)
**Pakiet modeli:** `upscale-enhance` (5-6 GB)
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| file | file | Tak | - | Plik obrazu (multipart) |
| scale | number | Nie | `2` | Współczynnik powiększenia (np. 2, 3, 4) |
| model | string | Nie | `"auto"` | Model do użycia (np. `auto`, konkretne nazwy modeli) |
| faceEnhance | boolean | Nie | `false` | Zastosuj poprawę twarzy podczas powiększania |
| denoise | number | Nie | `0` | Siła odszumiania (0 = wyłączone) |
| format | string | Nie | `"auto"` | Format wyjściowy: `auto`, `png`, `jpg`, `webp`, `tiff`, `gif`, `avif`, `heic`, `heif`, `jxl` |
| quality | number | Nie | `95` | Jakość wyjściowa (1-100) |
## Przykładowe żądanie {#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"}'
```
## Odpowiedź {#response}
### Wstępna odpowiedź (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Postęp (SSE pod `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Upscaling...","percent":60}
```
### Wynik końcowy (przez 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"
}
}
```
## Uwagi {#notes}
- Wymaga zainstalowania pakietu modeli `upscale-enhance` (5-6 GB).
- Używa Real-ESRGAN, gdy jest dostępny; wraca do interpolacji Lanczosa, jeśli model AI jest niedostępny.
- Opcja `faceEnhance` stosuje odtwarzanie twarzy GFPGAN podczas powiększania dla lepszej jakości twarzy.
- Dla formatów wyjściowych, których przeglądarka nie może wyświetlić (HEIC, JXL, TIFF), generowany jest podgląd WebP obok głównego wyniku.
- Obsługuje formaty wejściowe HEIC/HEIF, RAW, TGA, PSD, EXR i HDR poprzez automatyczne dekodowanie.
+64
View File
@@ -0,0 +1,64 @@
---
description: "Konwertuj obrazy rastrowe do SVG z wektoryzacją czarno-białą (potrace) oraz pełnokolorową, wielowarstwową."
i18n_source_hash: f3e4777188ad
i18n_provenance: human
i18n_output_hash: 9ebb92e9d5f9
---
# Obraz do SVG {#image-to-svg}
Wektoryzuj obrazy rastrowe do SVG przy użyciu algorytmów śledzenia. Obsługuje śledzenie czarno-białe (potrace) oraz pełnokolorową wektoryzację wielowarstwową.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/vectorize`
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| colorMode | string | Nie | `"bw"` | Tryb śledzenia: `bw` (czarno-biały) lub `color` (wielokolorowe warstwy) |
| threshold | number | Nie | 128 | Próg jasności dla trybu czarno-białego (0 do 255). Piksele poniżej stają się czarne. |
| colorPrecision | number | Nie | 6 | Precyzja kwantyzacji kolorów dla trybu kolorowego (1 do 16). Wyższe wartości dają więcej odrębnych warstw kolorów. |
| layerDifference | number | Nie | 6 | Minimalna różnica kolorów między warstwami w trybie kolorowym (1 do 128) |
| filterSpeckle | number | Nie | 4 | Minimalna powierzchnia śledzonych kształtów w pikselach (1 do 256). Usuwa szum/plamki. |
| pathMode | string | Nie | `"spline"` | Wygładzanie ścieżek: `none` (postrzępione), `polygon` (proste odcinki), `spline` (gładkie krzywe) |
| cornerThreshold | number | Nie | 60 | Próg kąta dla wykrywania narożników w trybie kolorowym (0 do 180 stopni) |
| invert | boolean | Nie | `false` | Odwróć obraz przed śledzeniem (zamień czarny/biały) |
## Przykładowe żądanie {#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"}'
```
### Wektoryzacja kolorowa {#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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/logo.svg",
"originalSize": 45678,
"processedSize": 12345
}
```
## Uwagi {#notes}
- Wynikiem jest zawsze plik SVG, niezależnie od formatu wejściowego.
- Obsługuje formaty wejściowe HEIC, RAW, PSD i SVG (automatycznie dekodowane do rastra przed śledzeniem).
- Tryb czarno-biały używa algorytmu potrace. Obraz jest najpierw konwertowany na skalę szarości, a następnie progowany do czystej czerni/bieli przed śledzeniem.
- Tryb kolorowy stosuje podejście wielowarstwowe: obraz jest kwantyzowany na warstwy kolorów, z których każda jest śledzona osobno i układana w wyniku SVG.
- Niższe wartości `filterSpeckle` zachowują więcej detali, ale dają większe pliki SVG z większą liczbą ścieżek.
- Ustawienie `pathMode` znacząco wpływa na rozmiar pliku: `none` daje najwięcej ścieżek, `spline` daje najgładszy (i zwykle najmniejszy) wynik.
- Dla najlepszych rezultatów z logo i ikonami użyj trybu czarno-białego z czystym, wysokokontrastowym wejściem. Dla zdjęć lub ilustracji użyj trybu kolorowego z wyższym `colorPrecision`.
+55
View File
@@ -0,0 +1,55 @@
---
description: "Dodaj efekt winiety z regulowaną siłą, kolorem i pozycją."
i18n_source_hash: 0b9795fea2eb
i18n_provenance: human
i18n_output_hash: 94c41fb69c7e
---
# Winieta {#vignette}
Dodaj efekt winiety, który przyciemnia lub zabarwia krawędzie obrazu. Obsługuje regulowaną siłę, kolor, promień, miękkość, zaokrąglenie i pozycję środka.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/vignette`
Przyjmuje dane formularza multipart z plikiem obrazu i polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| strength | number | Nie | `0.5` | Nieprzezroczystość winiety (0.1-1) |
| color | string | Nie | `"#000000"` | Kolor winiety w formacie hex |
| radius | integer | Nie | `70` | Promień zewnętrzny jako procent połowy przekątnej (0-100) |
| softness | integer | Nie | `50` | Miękkość wtapiania (0-100); wyższe wartości dają bardziej stopniowe przejście |
| roundness | integer | Nie | `100` | Kształt: 100 = koło, 0 = elipsa dopasowana do proporcji obrazu |
| centerX | integer | Nie | `50` | Pozioma pozycja środka jako procent (0-100) |
| centerY | integer | Nie | `50` | Pionowa pozycja środka jako procent (0-100) |
## Przykładowe żądanie {#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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2410000
}
```
## Uwagi {#notes}
- Mniejszy `radius` przyciemnia większą część obrazu; większy promień ogranicza winietę do skrajnych krawędzi.
- Użyj koloru `color` innego niż czarny (np. białego lub w tonach sepii) dla kreatywnych efektów winiety.
- Regulacja `centerX` i `centerY` pozwala umieścić czysty obszar poza środkiem, co jest przydatne do skierowania uwagi na obiekt, który nie znajduje się na środku kadru.
- Format wyjściowy odpowiada formatowi wejściowemu. Dane wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetwarzaniem.
@@ -0,0 +1,61 @@
---
description: "Nałóż logo lub obraz jako znak wodny z konfigurowalną pozycją, nieprzezroczystością i skalą."
i18n_source_hash: c73ab0ef8ab9
i18n_provenance: human
i18n_output_hash: e20ea49a024c
---
# Znak wodny z obrazu {#image-watermark}
Nałóż logo lub dodatkowy obraz jako znak wodny na obraz bazowy. Znak wodny jest skalowany względem szerokości obrazu bazowego i umieszczany w narożniku lub na środku.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/watermark-image`
Przyjmuje dane formularza multipart z **dwoma** plikami obrazów i polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| position | string | Nie | `"bottom-right"` | Umieszczenie znaku wodnego: `center`, `top-left`, `top-right`, `bottom-left`, `bottom-right` |
| opacity | number | Nie | `50` | Procent nieprzezroczystości znaku wodnego (0 do 100) |
| scale | number | Nie | `25` | Szerokość znaku wodnego jako procent szerokości głównego obrazu (1 do 100) |
### Pola plików {#file-fields}
| Nazwa pola | Wymagany | Opis |
|------------|----------|-------------|
| file | Tak | Główny/bazowy obraz |
| watermark | Tak | Obraz znaku wodnego/logo |
## Przykładowe żądanie {#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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2520000
}
```
## Uwagi {#notes}
- Oba obrazy są walidowane i dekodowane (obsługiwane HEIC, RAW, PSD, SVG).
- Znak wodny jest skalowany proporcjonalnie tak, aby jego szerokość równała się `scale`% szerokości głównego obrazu.
- Nieprzezroczystość jest stosowana przez maskę alfa złożoną z mieszaniem `dest-in`.
- Pozycje narożne stosują margines 20px od krawędzi obrazu.
- Jeśli obraz znaku wodnego ma przezroczystość (np. logo PNG), jest ona zachowywana podczas komponowania.
- Orientacja EXIF jest automatycznie stosowana do obu obrazów przed przetwarzaniem.
@@ -0,0 +1,65 @@
---
description: "Dodawaj tekstowe znaki wodne z konfigurowalną pozycją, nieprzezroczystością, obrotem i kafelkowaniem."
i18n_source_hash: b80f12f410e4
i18n_provenance: human
i18n_output_hash: 94060d4844a7
---
# Tekstowy znak wodny {#text-watermark}
Dodaj nakładkę tekstowego znaku wodnego na obrazy. Obsługuje pojedyncze umieszczenie w narożnikach/na środku lub kafelkowe powtarzanie na całym obrazie, z konfigurowalnym rozmiarem czcionki, kolorem, nieprzezroczystością i obrotem.
## Punkt końcowy API {#api-endpoint}
`POST /api/v1/tools/image/watermark-text`
Przyjmuje dane formularza multipart z plikiem obrazu i polem JSON `settings`.
## Parametry {#parameters}
| Parametr | Typ | Wymagany | Domyślny | Opis |
|-----------|------|----------|---------|-------------|
| text | string | Tak | - | Tekst znaku wodnego (1 do 500 znaków) |
| fontSize | number | Nie | `48` | Rozmiar czcionki w pikselach (8 do 1000) |
| color | string | Nie | `"#000000"` | Kolor tekstu w formacie hex (`#RRGGBB`) |
| opacity | number | Nie | `50` | Procent nieprzezroczystości tekstu (0 do 100) |
| position | string | Nie | `"center"` | Umieszczenie: `center`, `top-left`, `top-right`, `bottom-left`, `bottom-right`, `tiled` |
| rotation | number | Nie | `0` | Kąt obrotu tekstu w stopniach (-360 do 360) |
## Przykładowe żądanie {#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}'
```
Kafelkowy znak wodny na całym obrazie:
```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}'
```
## Przykładowa odpowiedź {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2480000
}
```
## Uwagi {#notes}
- Znak wodny jest renderowany jako tekst SVG i komponowany na obrazie, zachowując jakość wyjściową.
- Tryb kafelkowy rozmieszcza elementy tekstu na podstawie rozmiaru czcionki (odstęp 6x w poziomie, 4x w pionie), z limitem maksymalnie 500 elementów.
- Dla pozycji narożnych margines od krawędzi równa się rozmiarowi czcionki.
- Używana czcionka to domyślna bezszeryfowa czcionka systemu.
- Znaki specjalne XML w tekście (`&`, `<`, `>`, `"`, `'`) są bezpiecznie escapowane.
- Format wyjściowy odpowiada formatowi wejściowemu. Dane wejściowe HEIC, RAW, PSD i SVG są automatycznie dekodowane przed przetwarzaniem.