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: "Regola luminosità, contrasto, saturazione, temperatura, tonalità, canali e applica effetti cromatici."
i18n_source_hash: 41b35fe5c2ba
i18n_provenance: human
i18n_output_hash: 79810efa7b49
---
# Regola colori {#adjust-colors}
Strumento completo di regolazione del colore che combina luminosità, contrasto, esposizione, saturazione, temperatura, tinta, rotazione di tonalità, livelli per singolo canale ed effetti a un clic (scala di grigi, seppia, inversione) in un unico endpoint.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/adjust-colors`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| brightness | number | No | `0` | Regolazione della luminosità (da -100 a 100) |
| contrast | number | No | `0` | Regolazione del contrasto (da -100 a 100) |
| exposure | number | No | `0` | Esposizione / gamma dei mezzitoni (da -100 a 100) |
| saturation | number | No | `0` | Saturazione del colore (da -100 a 100) |
| temperature | number | No | `0` | Bilanciamento del bianco: freddo/blu verso caldo/arancione (da -100 a 100) |
| tint | number | No | `0` | Spostamento della tinta: verde verso magenta (da -100 a 100) |
| hue | number | No | `0` | Rotazione della tonalità in gradi (da -180 a 180) |
| sharpness | number | No | `0` | Intensità della nitidezza (da 0 a 100) |
| red | number | No | `100` | Livello del canale rosso (da 0 a 200, 100 = invariato) |
| green | number | No | `100` | Livello del canale verde (da 0 a 200, 100 = invariato) |
| blue | number | No | `100` | Livello del canale blu (da 0 a 200, 100 = invariato) |
| effect | string | No | `"none"` | Effetto cromatico: `none`, `grayscale`, `sepia`, `invert` |
## Esempio di richiesta {#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"}'
```
Applica un aspetto vintage caldo:
```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"}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2380000
}
```
## Note {#notes}
- Tutti i parametri hanno come valore predefinito quello neutro, così puoi regolare solo ciò che ti serve.
- Le regolazioni vengono applicate in quest'ordine: luminosità, contrasto, esposizione, saturazione/tonalità, temperatura/tinta, nitidezza, canali, effetti.
- La temperatura usa una matrice di ricombinazione del colore 3x3 sugli assi blu-arancione e verde-magenta.
- L'esposizione è mappata sulla funzione gamma di Sharp (valori positivi schiariscono i mezzitoni, valori negativi li scuriscono).
- Questo endpoint risponde anche ai percorsi legacy `/api/v1/tools/image/brightness-contrast`, `/api/v1/tools/image/saturation`, `/api/v1/tools/image/color-channels` e `/api/v1/tools/image/color-effects`. Tutti usano lo stesso schema.
- Il formato di output corrisponde a quello di input. Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
@@ -0,0 +1,84 @@
---
description: "Espande la tela di un'immagine con outpainting basato su IA, estendendola in qualsiasi direzione e riempiendo le nuove aree in modo coerente con l'originale."
i18n_source_hash: 1b00db4ed40d
i18n_provenance: human
i18n_output_hash: c90a990016d1
---
# Espansione tela con IA {#ai-canvas-expand}
Espande la tela di un'immagine con riempimento basato su IA (outpainting). Estende l'immagine in qualsiasi direzione e riempie le nuove aree con contenuto generato dall'IA in modo coerente con l'immagine esistente.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/ai-canvas-expand`
**Elaborazione:** asincrona (restituisce 202, interroga `/api/v1/jobs/{jobId}/progress` per lo stato tramite SSE)
**Bundle del modello:** `object-eraser-colorize` (1-2 GB)
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| file | file | Sì | - | File immagine (multipart) |
| extendTop | integer | No | `0` | Pixel di estensione in alto |
| extendRight | integer | No | `0` | Pixel di estensione a destra |
| extendBottom | integer | No | `0` | Pixel di estensione in basso |
| extendLeft | integer | No | `0` | Pixel di estensione a sinistra |
| tier | string | No | `"balanced"` | Livello di qualità: `fast`, `balanced`, `high` |
| format | string | No | `"auto"` | Formato di output: `auto`, `png`, `jpg`, `jpeg`, `webp`, `tiff`, `gif`, `avif`, `heic`, `heif`, `jxl` |
| quality | integer | No | `95` | Qualità di output (1-100) |
Almeno una direzione di estensione deve essere maggiore di 0.
## Esempio di richiesta {#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"}'
```
## Risposta {#response}
### Risposta iniziale (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Avanzamento (SSE su `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Expanding canvas...","percent":50}
```
### Risultato finale (tramite 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
}
}
```
## Note {#notes}
- Richiede l'installazione del bundle del modello `object-eraser-colorize` (1-2 GB).
- Usa l'outpainting basato su LaMa per generare contenuto per le regioni espanse.
- Il parametro `tier` bilancia velocità e qualità: `fast` produce risultati rapidamente con possibili artefatti, `high` impiega più tempo ma produce riempimenti più uniformi e coerenti.
- I valori di estensione sono in pixel. Le dimensioni finali dell'immagine saranno: larghezza originale + extendLeft + extendRight per altezza originale + extendTop + extendBottom.
- Per i formati di output non visualizzabili in anteprima nel browser (HEIC, JXL, TIFF), viene generata un'anteprima WebP insieme all'output principale.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
@@ -0,0 +1,55 @@
---
description: "Sostituisce lo sfondo dell'immagine con un colore pieno o un gradiente usando l'IA."
i18n_source_hash: 930fe8890e55
i18n_provenance: human
i18n_output_hash: 53618a2fe839
---
# Sostituzione sfondo {#background-replace}
Sostituisce lo sfondo di un'immagine con un colore pieno o un gradiente. Il modello di IA rileva il soggetto, rimuove lo sfondo originale e compone il soggetto sullo sfondo scelto.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/background-replace`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| backgroundType | string | No | `"color"` | Modalità sfondo: `color` o `gradient` |
| color | string | No | `"#ffffff"` | Colore esadecimale dello sfondo (quando backgroundType è `color`) |
| gradientColor1 | string | No | - | Primo colore esadecimale del gradiente |
| gradientColor2 | string | No | - | Secondo colore esadecimale del gradiente |
| gradientAngle | integer | No | `180` | Angolo del gradiente in gradi (0-360) |
| feather | integer | No | `0` | Raggio di sfumatura dei bordi (0-20) |
| format | string | No | `"png"` | Formato di output: `png` o `webp` |
## Esempio di richiesta {#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}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
Monitora l'avanzamento tramite SSE su `GET /api/v1/jobs/{jobId}/progress`. Al completamento del job, lo stream SSE emette un evento `completed` con l'URL di download.
## Note {#notes}
- Questo è uno strumento basato su IA che restituisce `202 Accepted` ed elabora in modo asincrono. Connettiti all'endpoint SSE per ricevere gli aggiornamenti di avanzamento e il risultato finale.
- Richiede l'installazione del bundle di funzionalità **background-removal**. Restituisce `501` se il bundle non è disponibile.
- Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
- L'output è predefinito a PNG per preservare la trasparenza attorno al soggetto.
@@ -0,0 +1,52 @@
---
description: "Genera codici a barre nei formati Code 128, EAN-13, UPC-A, Code 39, ITF-14 e Data Matrix."
i18n_source_hash: e84b1df40c7e
i18n_provenance: human
i18n_output_hash: ca62ce96912b
---
# Generatore di codici a barre {#barcode-generator}
Genera immagini di codici a barre da testo in input. Supporta i formati Code 128, EAN-13, UPC-A, Code 39, ITF-14 e Data Matrix.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/barcode-generate`
Accetta un corpo `application/json` (non multipart). Il codice a barre viene generato dal testo fornito, non da un file caricato.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| text | string | Sì | - | Testo da codificare nel codice a barre (1-256 caratteri) |
| type | string | No | `"code128"` | Formato del codice a barre: `code128`, `ean13`, `upca`, `code39`, `itf14`, `datamatrix` |
| scale | integer | No | `3` | Fattore di scala dell'immagine (1-8) |
| includeText | boolean | No | `true` | Se rendere il testo sotto il codice a barre |
## Esempio di richiesta {#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}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/barcode.png",
"originalSize": 0,
"processedSize": 4520
}
```
## Note {#notes}
- A differenza della maggior parte degli strumenti, questo endpoint accetta un corpo JSON, non dati di form multipart, poiché i codici a barre vengono generati da testo anziché da un file caricato.
- EAN-13 richiede esattamente 12 o 13 cifre. UPC-A richiede esattamente 11 o 12 cifre. Se una cifra di controllo viene omessa, viene calcolata automaticamente.
- Code 128 è il formato più flessibile e supporta l'intero set di caratteri ASCII.
- Data Matrix produce un codice a barre 2D adatto a codificare stringhe più lunghe in un quadrato compatto.
+97
View File
@@ -0,0 +1,97 @@
---
description: "Analizza le immagini alla ricerca di codici QR, codici a barre e codici 2D con output annotato."
i18n_source_hash: 97c9d395c257
i18n_provenance: human
i18n_output_hash: 8068fbb792d3
---
# Lettore di codici a barre {#barcode-reader}
Analizza le immagini caricate alla ricerca di tutti i tipi di codici a barre e codici QR. Restituisce il testo decodificato, il tipo di codice a barre e i dati di posizione per ogni codice rilevato. Genera inoltre un'immagine annotata con riquadri colorati attorno ai codici rilevati.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/barcode-read`
Accetta dati di form multipart con un file immagine e un campo JSON opzionale `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| tryHarder | boolean | No | `true` | Abilita la modalità di scansione aggressiva per codici a barre più difficili da leggere (più lenta ma più approfondita) |
## Esempio di richiesta {#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}'
```
## Esempio di risposta {#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"
}
```
## Campi della risposta {#response-fields}
| Campo | Tipo | Descrizione |
|-------|------|-------------|
| filename | string | Nome del file originale |
| barcodes | array | Array di oggetti codice a barre rilevati |
| annotatedUrl | string o null | URL per scaricare l'immagine annotata (null se non viene trovato alcun codice a barre) |
| previewUrl | string o null | Uguale a annotatedUrl (per compatibilità con l'anteprima del frontend) |
### Oggetto codice a barre {#barcode-object}
| Campo | Tipo | Descrizione |
|-------|------|-------------|
| type | string | Formato del codice a barre (QRCode, EAN-13, Code128, DataMatrix, PDF417, ecc.) |
| text | string | Contenuto decodificato del codice a barre |
| position | object | Riquadro delimitante con coordinate topLeft, topRight, bottomLeft, bottomRight |
## Tipi di codici a barre supportati {#supported-barcode-types}
Codici a barre 1D: Code128, Code39, Code93, Codabar, EAN-8, EAN-13, ITF, UPC-A, UPC-E
Codici a barre 2D: QRCode, DataMatrix, PDF417, Aztec, MaxiCode
## Note {#notes}
- Usa la libreria zxing-wasm per il rilevamento dei codici a barre.
- L'immagine annotata sovrappone riquadri poligonali colorati ed etichette numerate su ciascun codice a barre rilevato.
- È possibile rilevare fino a 255 codici a barre in una singola immagine.
- Se non viene trovato alcun codice a barre, `barcodes` è un array vuoto e `annotatedUrl` è null.
- La modalità `tryHarder` esegue una scansione più approfondita a costo di un maggior tempo di elaborazione. Disabilitala per un'elaborazione più veloce di codici a barre puliti e ben allineati.
- L'output annotato è sempre in formato PNG.
- Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima della scansione.
- L'orientamento EXIF viene applicato automaticamente prima dell'elaborazione.
+85
View File
@@ -0,0 +1,85 @@
---
description: "Trasforma semplici screenshot in immagini rifinite con sfondi a gradiente, cornici del dispositivo, ombre e dimensioni per i social media."
i18n_source_hash: 8fd8a930a45e
i18n_provenance: human
i18n_output_hash: 1a0b49bc74da
---
# Rifinisci screenshot {#beautify-screenshot}
Aggiunge sfondi a gradiente, cornici del dispositivo, ombre, filigrane e dimensioni per i social media agli screenshot. Ideale per creare immagini rifinite per il marketing di prodotto, i social media e la documentazione.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/beautify`
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| backgroundType | string | No | `"linear-gradient"` | Tipo di sfondo: `solid`, `linear-gradient`, `radial-gradient`, `image`, `transparent` |
| backgroundColor | string | No | `"#667eea"` | Colore di sfondo pieno (usato quando `backgroundType` è `solid`) |
| gradientStops | array | No | `[{"color":"#667eea","position":0},{"color":"#764ba2","position":100}]` | Punti di colore del gradiente (min 2). Ogni punto ha `color` (esadecimale) e `position` (0-100). |
| gradientAngle | number | No | 135 | Angolo del gradiente in gradi (da 0 a 360) |
| padding | number | No | 64 | Spaziatura attorno all'immagine in pixel (da 0 a 256) |
| borderRadius | number | No | 12 | Raggio degli angoli dello screenshot (da 0 a 64) |
| shadowPreset | string | No | `"subtle"` | Preset dell'ombra: `none`, `subtle`, `medium`, `dramatic`, `custom` |
| shadowBlur | number | No | 20 | Raggio di sfocatura personalizzato dell'ombra (da 0 a 100, usato quando `shadowPreset` è `custom`) |
| shadowOffsetX | number | No | 0 | Offset orizzontale personalizzato dell'ombra (da -50 a 50) |
| shadowOffsetY | number | No | 10 | Offset verticale personalizzato dell'ombra (da -50 a 50) |
| shadowColor | string | No | `"#000000"` | Colore personalizzato dell'ombra in esadecimale |
| shadowOpacity | number | No | 30 | Opacità personalizzata dell'ombra (da 0 a 100) |
| frame | string | No | `"none"` | Cornice del dispositivo o della finestra: `none`, `macos-light`, `macos-dark`, `windows-light`, `windows-dark`, `browser-light`, `browser-dark`, `iphone`, `iphone-dark`, `macbook`, `macbook-dark`, `ipad`, `ipad-dark` |
| frameTitle | string | No | - | Testo del titolo visualizzato nelle barre del titolo delle cornici a finestra |
| socialPreset | string | No | `"none"` | Ridimensiona alle dimensioni dei social media: `none`, `twitter`, `linkedin`, `instagram-square`, `instagram-story`, `facebook`, `producthunt` |
| watermarkText | string | No | - | Testo opzionale della filigrana sovrapposto |
| watermarkPosition | string | No | `"bottom-right"` | Posizione della filigrana: `top-left`, `top-right`, `bottom-left`, `bottom-right`, `center` |
| watermarkOpacity | number | No | 50 | Opacità della filigrana (da 0 a 100) |
| outputFormat | string | No | `"png"` | Formato di output: `png`, `jpeg`, `webp` |
## Esempio di richiesta {#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"}'
```
### Con immagine di sfondo {#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"}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/screenshot.png",
"originalSize": 234567,
"processedSize": 567890
}
```
## Note {#notes}
- Accetta due campi file: `file` (obbligatorio, lo screenshot principale) e `backgroundImage` (opzionale, usato quando `backgroundType` è `image`).
- Supporta i formati di input HEIC, RAW, PSD e SVG (decodificati automaticamente).
- I preset dell'ombra sono mappati su valori specifici:
- `subtle`: sfocatura 20, offsetY 4, opacità 20%
- `medium`: sfocatura 40, offsetY 10, opacità 35%
- `dramatic`: sfocatura 80, offsetY 20, opacità 50%
- I preset dei social media ridimensionano l'output finale per adattarsi alle dimensioni di destinazione usando la modalità `contain`:
- `twitter`: 1600x900
- `linkedin`: 1200x627
- `instagram-square`: 1080x1080
- `instagram-story`: 1080x1920
- `facebook`: 1200x630
- `producthunt`: 1270x760
- Le cornici del dispositivo (`iphone`, `macbook`, `ipad`) applicano una cornice hardware attorno all'immagine e ignorano l'impostazione `borderRadius`.
- Quando è richiesta la trasparenza (ombra, raggio degli angoli, cornici del dispositivo o sfondo trasparente), l'output viene forzato a PNG anche se è selezionato `jpeg`.
- Gli sfondi con immagine non sono supportati in modalità pipeline/batch.
@@ -0,0 +1,51 @@
---
description: "Sfoca lo sfondo mantenendo il soggetto nitido usando l'IA."
i18n_source_hash: 9073f10e6e9d
i18n_provenance: human
i18n_output_hash: 06510f368d1c
---
# Sfoca sfondo {#blur-background}
Sfoca lo sfondo di un'immagine mantenendo il soggetto nitido. Il modello di IA isola il soggetto, applica una sfocatura allo sfondo originale e compone il soggetto nitido sopra di esso.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/blur-background`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| intensity | integer | No | `50` | Intensità della sfocatura (1-100) |
| feather | integer | No | `0` | Raggio di sfumatura dei bordi (0-20) |
| format | string | No | `"png"` | Formato di output: `png` o `webp` |
## Esempio di richiesta {#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}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
Monitora l'avanzamento tramite SSE su `GET /api/v1/jobs/{jobId}/progress`. Al completamento del job, lo stream SSE emette un evento `completed` con l'URL di download.
## Note {#notes}
- Questo è uno strumento basato su IA che restituisce `202 Accepted` ed elabora in modo asincrono. Connettiti all'endpoint SSE per ricevere gli aggiornamenti di avanzamento e il risultato finale.
- Richiede l'installazione del bundle di funzionalità **background-removal**. Restituisce `501` se il bundle non è disponibile.
- Valori di intensità più elevati producono un effetto di sfocatura più forte. Valori superiori a 80 creano una pronunciata separazione simile a un bokeh.
- Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
+96
View File
@@ -0,0 +1,96 @@
---
description: "Rileva e sfoca automaticamente i volti nelle immagini con il rilevamento facciale basato su IA per la privacy e l'anonimizzazione conforme al GDPR."
i18n_source_hash: fb861c12aea5
i18n_provenance: human
i18n_output_hash: d32c51859f58
---
# Sfocatura volti / PII {#face-pii-blur}
Rileva e sfoca automaticamente i volti nelle immagini usando il rilevamento facciale basato su IA (MediaPipe).
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/blur-faces`
**Elaborazione:** asincrona (restituisce 202, interroga `/api/v1/jobs/{jobId}/progress` per lo stato tramite SSE)
**Bundle del modello:** `face-detection` (200-300 MB)
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| file | file | Sì | - | File immagine (multipart) |
| blurRadius | number | No | `30` | Raggio di sfocatura applicato ai volti rilevati (1-100) |
| sensitivity | number | No | `0.5` | Sensibilità del rilevamento facciale (0-1). Valori più bassi rilevano meno volti con maggiore confidenza |
## Esempio di richiesta {#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}'
```
## Risposta {#response}
### Risposta iniziale (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Avanzamento (SSE su `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Detecting faces...","percent":40}
```
### Risultato finale (tramite 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}
]
}
}
```
### Nessun volto rilevato {#no-faces-detected}
Se non viene trovato alcun volto, il risultato include un avviso:
```json
{
"phase": "complete",
"percent": 100,
"result": {
"facesDetected": 0,
"warning": "No faces detected in this image. Try increasing detection sensitivity."
}
}
```
## Note {#notes}
- Richiede l'installazione del bundle del modello `face-detection` (200-300 MB).
- Il formato di output corrisponde automaticamente a quello di input.
- L'array `faces` contiene le coordinate del riquadro delimitante (x, y, width, height) per ogni volto rilevato.
- Aumenta `sensitivity` (più vicino a 1.0) per rilevare più volti, inclusi quelli parzialmente occlusi.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
+58
View File
@@ -0,0 +1,58 @@
---
description: "Aggiunge bordi, spaziatura, angoli arrotondati e ombre esterne alle immagini in un ordine prevedibile e controllabile."
i18n_source_hash: 8845150736a9
i18n_provenance: human
i18n_output_hash: 89bef5dab03b
---
# Bordo e cornice {#border-frame}
Aggiunge bordi, spaziatura, angoli arrotondati e ombre esterne alle immagini. Lo strumento applica gli effetti in quest'ordine: spaziatura, bordo, raggio degli angoli, poi ombra.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/border`
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| borderWidth | number | No | 10 | Spessore del bordo in pixel (da 0 a 2000) |
| borderColor | string | No | `"#000000"` | Colore del bordo in esadecimale (ad es. `#FF0000`) |
| padding | number | No | 0 | Spaziatura interna tra immagine e bordo in pixel (da 0 a 200) |
| paddingColor | string | No | `"#FFFFFF"` | Colore di riempimento della spaziatura in esadecimale |
| cornerRadius | number | No | 0 | Raggio degli angoli in pixel (da 0 a 2000) |
| shadow | boolean | No | `false` | Se aggiungere un'ombra esterna |
| shadowBlur | number | No | 15 | Raggio di sfocatura dell'ombra (da 1 a 200) |
| shadowOffsetX | number | No | 0 | Offset orizzontale dell'ombra (da -50 a 50) |
| shadowOffsetY | number | No | 5 | Offset verticale dell'ombra (da -50 a 50) |
| shadowColor | string | No | `"#000000"` | Colore dell'ombra in esadecimale |
| shadowOpacity | number | No | 40 | Percentuale di opacità dell'ombra (da 0 a 100) |
## Esempio di richiesta {#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}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.png",
"originalSize": 456789,
"processedSize": 523456
}
```
## Note {#notes}
- Usa la factory standard `createToolRoute`. Accetta un singolo file immagine tramite caricamento multipart.
- Supporta i formati di input HEIC, RAW, PSD e SVG (decodificati automaticamente).
- Ordine di elaborazione: viene aggiunta prima la spaziatura, poi il bordo la avvolge, poi viene applicato il raggio degli angoli, poi viene composta l'ombra.
- Quando `cornerRadius` o `shadow` è abilitato, l'output viene forzato a PNG (indipendentemente dal formato di input) per preservare la trasparenza. I formati che supportano l'alfa (PNG, WebP, AVIF) mantengono il loro formato originale.
- L'ombra tiene conto della forma: segue gli angoli arrotondati anziché creare un'ombra rettangolare.
- Impostando `borderWidth` a 0 e usando solo `cornerRadius` + `shadow` si crea un effetto di ombra arrotondata senza cornice.
+75
View File
@@ -0,0 +1,75 @@
---
description: "Rinomina più file usando un modello di pattern e li scarica come ZIP."
i18n_source_hash: 2776dcc2f71c
i18n_provenance: human
i18n_output_hash: e89cd776d886
---
# Rinomina in blocco {#bulk-rename}
Rinomina più file usando un modello di pattern con segnaposto per indice, indice con riempimento e nome del file originale. Restituisce un archivio ZIP contenente tutti i file rinominati.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/bulk-rename`
Accetta dati di form multipart con più file e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| pattern | string | No | `"image-{{index}}"` | Pattern di denominazione con segnaposto (max 1000 caratteri) |
| startIndex | number | No | `1` | Numero di indice iniziale |
### Segnaposto del pattern {#pattern-placeholders}
| Segnaposto | Descrizione | Esempio |
|-------------|-------------|---------|
| `{{index}}` | Numero sequenziale a partire da `startIndex` | `1`, `2`, `3` |
| `{{padded}}` | Numero sequenziale con riempimento di zeri | `01`, `02`, `03` |
| `{{original}}` | Nome del file originale senza estensione | `photo`, `IMG_001` |
L'estensione del file originale viene sempre preservata.
## Esempio di richiesta {#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}'
```
Questo produce: `vacation-1.jpg`, `vacation-2.jpg`, `vacation-3.jpg`
Usando il nome del file originale:
```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}}"}'
```
Questo produce: `2024-trip-IMG_001-1.jpg`, `2024-trip-IMG_002-2.jpg`
## Esempio di risposta {#example-response}
La risposta è un file ZIP trasmesso in streaming direttamente (non una risposta JSON). Le intestazioni della risposta sono:
```
Content-Type: application/zip
Content-Disposition: attachment; filename="renamed-a1b2c3d4.zip"
```
## Note {#notes}
- Questo strumento non elabora immagini. Rinomina solo i file e li impacchetta in un archivio ZIP.
- La larghezza del riempimento di zeri per `{{padded}}` viene determinata automaticamente in base al numero totale di file (ad es. 100 file userebbero un riempimento a 3 cifre: `001`, `002`, ecc.).
- Le estensioni dei file vengono preservate dai nomi dei file originali.
- I nomi dei file vengono ripuliti per rimuovere i caratteri non sicuri.
- Deve essere fornito almeno un file.
+55
View File
@@ -0,0 +1,55 @@
---
description: "Ritaglia un'immagine in un cerchio centrato con angoli trasparenti."
i18n_source_hash: 06c50ccd96b2
i18n_provenance: human
i18n_output_hash: cd71d5db62cd
---
# Ritaglio circolare {#circle-crop}
Ritaglia un'immagine in un cerchio centrato con angoli trasparenti. Supporta zoom, offset, bordo e dimensione di output regolabili.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/circle-crop`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| zoom | number | No | `1` | Fattore di zoom (1-5); valori più alti ritagliano più stretto |
| offsetX | number | No | `0.5` | Posizione orizzontale del centro (0-1) |
| offsetY | number | No | `0.5` | Posizione verticale del centro (0-1) |
| borderWidth | integer | No | `0` | Larghezza del bordo in pixel (0-200) |
| borderColor | string | No | `"#ffffff"` | Colore esadecimale del bordo |
| background | string | No | `"transparent"` | Riempimento degli angoli: `"transparent"` o un colore esadecimale |
| outputSize | integer | No | - | Dimensione finale quadrata in pixel (16-4096) |
## Esempio di richiesta {#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"}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.png",
"originalSize": 2450000,
"processedSize": 185000
}
```
## Note {#notes}
- L'output è sempre PNG per preservare gli angoli trasparenti (a meno che `background` non sia impostato su un colore pieno).
- Il cerchio è inscritto nella dimensione più corta dell'immagine. Usa `zoom` per ritagliare più stretto e `offsetX`/`offsetY` per spostare l'area visibile.
- Quando viene fornito `outputSize`, il risultato viene ridimensionato a quella dimensione quadrata dopo il ritaglio.
- Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
+92
View File
@@ -0,0 +1,92 @@
---
description: "Combina più immagini in collage a griglia con oltre 25 modelli, spazi e angoli regolabili e pan e zoom per singola cella."
i18n_source_hash: 96f2055717df
i18n_provenance: human
i18n_output_hash: 6a2fb7cb8440
---
# Collage / Griglia {#collage-grid}
Combina più immagini in bellissimi collage a griglia con oltre 25 modelli. Supporta layout da 2 a 9 immagini con spazio, raggio degli angoli, colore di sfondo e controlli di pan/zoom per singola cella personalizzabili.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/collage`
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| templateId | string | Sì | - | ID del layout del modello (es. `2-h-equal`, `3-left-large`, `4-grid`, `9-grid`) |
| cells | array | No | - | Array di impostazioni per singola cella con `imageIndex`, `panX`, `panY`, `zoom`, `objectFit` |
| cells[].imageIndex | integer | Sì | - | Indice dell'immagine da inserire in questa cella (in base 0) |
| cells[].panX | number | No | 0 | Offset di pan orizzontale (da -100 a 100) |
| cells[].panY | number | No | 0 | Offset di pan verticale (da -100 a 100) |
| cells[].zoom | number | No | 1 | Livello di zoom (da 1 a 10) |
| cells[].objectFit | string | No | `"cover"` | Come l'immagine riempie la cella: `cover` o `contain` |
| gap | number | No | 8 | Spazio tra le celle in pixel (da 0 a 500) |
| cornerRadius | number | No | 0 | Raggio degli angoli per ogni cella in pixel (da 0 a 500) |
| backgroundColor | string | No | `"#FFFFFF"` | Colore di sfondo come esadecimale o `"transparent"` |
| aspectRatio | string | No | `"free"` | Proporzioni della tela: `free`, `1:1`, `4:3`, `3:2`, `16:9`, `9:16`, `4:5` |
| outputFormat | string | No | `"png"` | Formato di output: `png`, `jpeg`, `webp`, `avif`, `jxl` |
| quality | number | No | 90 | Qualità di output (da 1 a 100) |
## Modelli disponibili {#available-templates}
| ID modello | Immagini | Layout |
|-------------|--------|--------|
| `2-h-equal` | 2 | Due colonne uguali |
| `2-v-equal` | 2 | Due righe uguali |
| `2-h-left-large` | 2 | Sinistra 2/3, destra 1/3 |
| `2-h-right-large` | 2 | Sinistra 1/3, destra 2/3 |
| `3-left-large` | 3 | Grande a sinistra, due impilate a destra |
| `3-right-large` | 3 | Due impilate a sinistra, grande a destra |
| `3-top-large` | 3 | Grande in alto, due colonne in basso |
| `3-h-equal` | 3 | Tre colonne uguali |
| `3-v-equal` | 3 | Tre righe uguali |
| `4-grid` | 4 | Griglia 2x2 |
| `4-left-large` | 4 | Grande a sinistra, tre impilate a destra |
| `4-top-large` | 4 | Grande in alto, tre colonne in basso |
| `4-bottom-large` | 4 | Tre colonne in alto, grande in basso |
| `5-top2-bottom3` | 5 | Due in alto, tre in basso |
| `5-top3-bottom2` | 5 | Tre in alto, due in basso |
| `5-left-large` | 5 | Grande a sinistra, quattro impilate a destra |
| `5-center-large` | 5 | Grande al centro, quattro agli angoli |
| `6-grid-2x3` | 6 | 2 colonne x 3 righe |
| `6-grid-3x2` | 6 | 3 colonne x 2 righe |
| `6-top-large` | 6 | Grande in alto, cinque colonne in basso |
| `7-mosaic` | 7 | Layout a mosaico |
| `8-mosaic` | 8 | Layout a mosaico |
| `9-grid` | 9 | Griglia 3x3 |
## Esempio di richiesta {#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}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/collage.png",
"originalSize": 2456789,
"processedSize": 1823456
}
```
## Note {#notes}
- Carica più file immagine nella richiesta multipart. Le immagini vengono assegnate alle celle del modello nell'ordine di caricamento.
- Se vengono caricate più immagini di quante il modello ne supporti, le immagini in eccesso vengono ignorate.
- Supporta i formati di input HEIC, RAW, PSD e SVG (decodificati automaticamente).
- La dimensione base della tela è di 2400px sul lato più lungo, scalata in base alle proporzioni scelte.
- Quando `aspectRatio` è `"free"`, la tela usa come predefinito 4:3 (2400x1800).
- I valori `panX`/`panY` per singola cella spostano la finestra di ritaglio all'interno della cella. Un valore di 100 sposta completamente verso un bordo, -100 verso l'altro.
- Il colore di sfondo `"transparent"` viene preservato solo con i formati di output `png`, `webp` o `avif`.
@@ -0,0 +1,62 @@
---
description: "Simula come appaiono le immagini alle persone con diversi tipi di deficit della visione dei colori."
i18n_source_hash: 0b537628ba79
i18n_provenance: human
i18n_output_hash: 323b587af4dd
---
# Simulazione di daltonismo {#color-blindness-simulation}
Simula il deficit della visione dei colori (CVD) per vedere in anteprima come appaiono le immagini alle persone con vari tipi di daltonismo. Utile per i test di accessibilità di design, grafici e UI.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/color-blindness`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| simulationType | string | No | `"deuteranomaly"` | Tipo di deficit della visione dei colori da simulare |
### Tipi di simulazione {#simulation-types}
| Valore | Condizione | Descrizione |
|-------|-----------|-------------|
| `protanopia` | Cecità al rosso | Assenza completa dei coni per il rosso |
| `deuteranopia` | Cecità al verde | Assenza completa dei coni per il verde |
| `tritanopia` | Cecità al blu | Assenza completa dei coni per il blu |
| `protanomaly` | Debolezza al rosso | Sensibilità ridotta dei coni per il rosso |
| `deuteranomaly` | Debolezza al verde | Sensibilità ridotta dei coni per il verde (la più comune) |
| `tritanomaly` | Debolezza al blu | Sensibilità ridotta dei coni per il blu |
| `achromatopsia` | Daltonismo totale | Assenza completa della visione dei colori |
| `blueConeMonochromacy` | Solo coni per il blu | Solo i coni per il blu funzionanti |
## Esempio di richiesta {#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"}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/design.png",
"originalSize": 1850000,
"processedSize": 1820000
}
```
## Note {#notes}
- La deuteranomalia (debolezza al verde) è l'impostazione predefinita perché è la forma più comune di deficit della visione dei colori, che interessa circa il 6% dei maschi.
- La simulazione usa matrici di trasformazione dei colori che modellano come i fotorecettori a coni ridotti o assenti alterano i colori percepiti.
- Questo strumento è non distruttivo e produce solo un'anteprima. Non modifica l'immagine originale per l'accessibilità.
- Il formato di output corrisponde al formato di input. Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
+75
View File
@@ -0,0 +1,75 @@
---
description: "Estrai i colori dominanti da un'immagine come palette di colori."
i18n_source_hash: 65ab22dd75a9
i18n_provenance: human
i18n_output_hash: ad7971282a1d
---
# Palette di colori {#color-palette}
Estrai i colori dominanti da un'immagine e restituiscili come valori esadecimali. Usa l'analisi di frequenza quantizzata per identificare i colori più prominenti e visivamente distinti.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/color-palette`
Accetta dati di form multipart con un file immagine e un campo JSON `settings` opzionale.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| count | integer | No | `8` | Numero di colori da estrarre (2-16) |
| format | string | No | `"hex"` | Formato del colore: `hex`, `rgb`, `hsl` |
## Esempio di richiesta {#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"}'
```
## Esempio di risposta {#example-response}
```json
{
"filename": "photo.jpg",
"colors": [
"#304080",
"#e0a060",
"#f0f0f0",
"#203020",
"#a0c0e0",
"#806040"
],
"hex": [
"#304080",
"#e0a060",
"#f0f0f0",
"#203020",
"#a0c0e0",
"#806040"
],
"count": 6
}
```
## Campi della risposta {#response-fields}
| Campo | Tipo | Descrizione |
|-------|------|-------------|
| filename | string | Nome del file sanificato |
| colors | array | Array di stringhe di colore nel formato richiesto, ordinate per dominanza (dal più frequente) |
| hex | array | Array di stringhe di colore esadecimali (sempre esadecimali, indipendentemente dall'impostazione `format`) |
| count | number | Numero di colori estratti |
## Note {#notes}
- Restituisce fino a `count` colori dominanti (predefinito 8, intervallo 2-16), ordinati per frequenza (dal più comune).
- L'immagine viene ridimensionata internamente a 100x100 pixel per l'analisi, quindi la palette rappresenta la distribuzione complessiva dei colori piuttosto che piccoli dettagli.
- I colori vengono estratti usando la quantizzazione median-cut, che divide ricorsivamente le popolazioni di pixel lungo il canale con l'intervallo più ampio.
- Il canale alfa viene rimosso prima dell'analisi, quindi le aree trasparenti non vengono considerate.
- Questo è un endpoint di sola lettura. Non produce un file di output scaricabile né un `jobId`.
- Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'analisi.
+80
View File
@@ -0,0 +1,80 @@
---
description: "Colora automaticamente foto in bianco e nero o in scala di grigi con il modello di IA DDColor."
i18n_source_hash: 688aa3abbdae
i18n_provenance: human
i18n_output_hash: 489459e4e69e
---
# Colorizzazione con IA {#ai-colorization}
Converti foto in bianco e nero o in scala di grigi a colori pieni usando l'IA (modello DDColor con fallback OpenCV DNN).
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/colorize`
**Elaborazione:** Asincrona (restituisce 202, esegui il polling di `/api/v1/jobs/{jobId}/progress` per lo stato tramite SSE)
**Bundle del modello:** `object-eraser-colorize` (1-2 GB)
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| file | file | Sì | - | File immagine (multipart) |
| intensity | number | No | `1.0` | Intensità del colore (0-1). Valori più bassi producono una colorizzazione più tenue |
| model | string | No | `"auto"` | Modello da usare: `auto`, `ddcolor`, `opencv` |
## Esempio di richiesta {#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"}'
```
## Risposta {#response}
### Risposta iniziale (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Avanzamento (SSE su `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Colorizing...","percent":55}
```
### Risultato finale (tramite 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"
}
}
```
## Note {#notes}
- Richiede l'installazione del bundle del modello `object-eraser-colorize` (1-2 GB).
- DDColor produce risultati di qualità superiore ma è più lento; OpenCV DNN è più veloce con qualità leggermente inferiore. `auto` usa DDColor quando disponibile con fallback su OpenCV.
- Il parametro `intensity` miscela tra la scala di grigi originale e il risultato colorizzato dall'IA. Usa 1.0 per il colore pieno, valori più bassi per un aspetto vintage parzialmente desaturato.
- Il formato di output corrisponde automaticamente al formato di input.
- Per i formati di output non visualizzabili in anteprima nel browser, viene generata un'anteprima WebP insieme all'output principale.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
+68
View File
@@ -0,0 +1,68 @@
---
description: "Confronta due immagini fianco a fianco con visualizzazione delle differenze a livello di pixel e punteggio di somiglianza."
i18n_source_hash: cc0a02bd75c6
i18n_provenance: human
i18n_output_hash: dde034d93fcb
---
# Confronto immagini {#image-compare}
Carica due immagini per calcolare una mappa delle differenze a livello di pixel e una percentuale numerica di somiglianza. L'output è un'immagine delle differenze che evidenzia in rosso le regioni cambiate.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/compare`
Accetta dati di form multipart con **due** file immagine. Non è necessario alcun campo di impostazioni.
## Parametri {#parameters}
Questo strumento non ha parametri configurabili. Carica esattamente due file immagine.
| Campo | Tipo | Obbligatorio | Descrizione |
|-------|------|----------|-------------|
| file (primo) | file | Sì | La prima immagine |
| file (secondo) | file | Sì | La seconda immagine |
## Esempio di richiesta {#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"
```
## Esempio di risposta {#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
}
```
## Campi della risposta {#response-fields}
| Campo | Tipo | Descrizione |
|-------|------|-------------|
| jobId | string | Identificatore del job per scaricare l'immagine delle differenze |
| similarity | number | Percentuale di somiglianza tra le due immagini (da 0 a 100) |
| dimensions | object | Larghezza e altezza usate per il confronto |
| downloadUrl | string | URL per scaricare l'immagine delle differenze generata |
| originalSize | number | Dimensione combinata di entrambe le immagini di input in byte |
| processedSize | number | Dimensione dell'immagine di output delle differenze in byte |
## Note {#notes}
- Entrambe le immagini vengono ridimensionate alle stesse dimensioni (il massimo di ciascun asse) prima del confronto.
- L'immagine delle differenze evidenzia le differenze in rosso con opacità proporzionale all'entità del cambiamento. I pixel identici o quasi identici (differenza < 10) vengono mostrati come versioni semitrasparenti dell'originale.
- La somiglianza è calcolata come l'inverso della differenza media dei pixel su tutti i pixel, espressa in percentuale.
- Una somiglianza del 100% significa che le immagini sono identiche a livello di pixel (alla risoluzione di confronto).
- L'output delle differenze è sempre in formato PNG indipendentemente dai formati di input.
- Entrambe le immagini vengono validate e decodificate (HEIC, RAW, PSD, SVG supportati) prima del confronto.
- L'orientamento EXIF viene applicato automaticamente su entrambe le immagini prima dell'elaborazione.
+87
View File
@@ -0,0 +1,87 @@
---
description: "Sovrapponi immagini con posizione, opacità e modalità di fusione per il compositing."
i18n_source_hash: c5d09eb13fde
i18n_provenance: human
i18n_output_hash: 8c43a20dfe1f
---
# Composizione immagini {#image-composition}
Sovrapponi un'immagine in overlay sopra un'immagine di base con posizione, opacità e modalità di fusione configurabili. Utile per comporre loghi, grafica o combinare più immagini.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/compose`
Accetta dati di form multipart con **due** file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| x | number | No | `0` | Offset orizzontale dell'overlay dall'angolo in alto a sinistra in pixel (min 0) |
| y | number | No | `0` | Offset verticale dell'overlay dall'angolo in alto a sinistra in pixel (min 0) |
| opacity | number | No | `100` | Percentuale di opacità dell'overlay (da 0 a 100) |
| blendMode | string | No | `"over"` | Modalità di fusione del compositing |
### Modalità di fusione {#blend-modes}
| Valore | Descrizione |
|-------|-------------|
| `over` | Overlay normale (predefinito) |
| `multiply` | Scurisci moltiplicando i valori dei pixel |
| `screen` | Schiarisci invertendo, moltiplicando e invertendo di nuovo |
| `overlay` | Combina multiply e screen in base alla luminosità della base |
| `darken` | Mantieni il pixel più scuro di ciascun livello |
| `lighten` | Mantieni il pixel più chiaro di ciascun livello |
| `hard-light` | Overlay a forte contrasto |
| `soft-light` | Overlay a contrasto tenue |
| `difference` | Differenza assoluta tra i livelli |
| `exclusion` | Simile a difference ma con contrasto minore |
### Campi dei file {#file-fields}
| Nome del campo | Obbligatorio | Descrizione |
|------------|----------|-------------|
| file | Sì | L'immagine di base/sfondo |
| overlay | Sì | L'immagine in overlay/primo piano |
## Esempio di richiesta {#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"}'
```
Usando la modalità di fusione 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"}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/background.jpg",
"originalSize": 3200000,
"processedSize": 3450000
}
```
## Note {#notes}
- Entrambe le immagini vengono validate e decodificate (HEIC, RAW, PSD, SVG supportati) prima del compositing.
- L'overlay viene posizionato alle coordinate esatte in pixel specificate da `x` e `y`. Non viene ridimensionato per adattarsi.
- Se l'opacità è inferiore a 100, una maschera alfa viene applicata all'overlay prima della fusione.
- L'overlay può estendersi oltre i confini dell'immagine di base (verrà ritagliato).
- L'orientamento EXIF viene applicato automaticamente su entrambe le immagini prima dell'elaborazione.
- Le dimensioni di output corrispondono alle dimensioni dell'immagine di base.
+62
View File
@@ -0,0 +1,62 @@
---
description: "Riduci la dimensione del file immagine per livello di qualità o verso una dimensione file di destinazione."
i18n_source_hash: af4685da7e64
i18n_provenance: human
i18n_output_hash: 5518fb5e2f68
---
# Comprimi {#compress}
Riduci la dimensione del file immagine specificando un livello di qualità o una dimensione file di destinazione in kilobyte. Lo strumento usa una ricerca binaria iterativa per raggiungere con precisione le dimensioni di destinazione.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/compress`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| mode | string | No | `"quality"` | Modalità di compressione: `quality` o `targetSize` |
| quality | number | No | `80` | Livello di qualità (1-100). Usato quando la modalità è `quality`. |
| targetSizeKb | number | No | - | Dimensione file di destinazione in kilobyte. Usata quando la modalità è `targetSize`. |
## Esempio di richiesta {#example-request}
Comprimi a qualità 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}'
```
Comprimi a una dimensione di destinazione di 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}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 204800
}
```
## Note {#notes}
- In modalità `quality`, valori più bassi producono file più piccoli con più artefatti di compressione. Un valore di 80 è un buon predefinito per l'uso web.
- In modalità `targetSize`, il motore esegue una compressione iterativa per avvicinarsi il più possibile alla destinazione senza superarla.
- Il formato di output corrisponde al formato di input. La compressione si applica alla codifica nativa del formato (es. qualità JPEG per i file JPEG, qualità WebP per i file WebP).
- Se la qualità predefinita (80) è accettabile, puoi omettere completamente il parametro `quality`.
@@ -0,0 +1,64 @@
---
description: "Ridimensionamento con seam carving che aggiunge o rimuove pixel lungo i percorsi di minore importanza per preservare i contenuti chiave e i volti."
i18n_source_hash: f383b28ab62a
i18n_provenance: human
i18n_output_hash: 1872983e96e1
---
# Ridimensionamento consapevole del contenuto {#content-aware-resize}
Ridimensionamento con seam carving che rimuove o aggiunge in modo intelligente pixel lungo i percorsi di minore importanza visiva, preservando i contenuti importanti e, opzionalmente, proteggendo i volti.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/content-aware-resize`
**Elaborazione:** Sincrona (restituisce il risultato direttamente)
**Bundle del modello:** Nessuno richiesto per il funzionamento di base. La protezione dei volti usa il bundle `face-detection` (200-300 MB) se abilitata.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| file | file | Sì | - | File immagine (multipart) |
| width | number | No | - | Larghezza di destinazione in pixel |
| height | number | No | - | Altezza di destinazione in pixel |
| protectFaces | boolean | No | `false` | Rileva e proteggi i volti dalla rimozione delle seam |
| blurRadius | number | No | `4` | Raggio di sfocatura di pre-elaborazione per il calcolo dell'energia (0-20) |
| sobelThreshold | number | No | `2` | Soglia di rilevamento dei bordi Sobel (1-20). Valori più alti rendono l'algoritmo più aggressivo |
| square | boolean | No | `false` | Ridimensiona a un quadrato (usa la dimensione minore) |
È necessario specificare almeno uno tra `width`, `height` o `square`.
## Esempio di richiesta {#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}'
```
## Risposta (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
}
```
## Note {#notes}
- Questa route personalizzata attualmente restituisce una risposta sincrona 200.
- Usa la libreria di seam carving `caire` per il ridimensionamento consapevole del contenuto.
- Riduce solo le dimensioni (rimuove le seam). Non può espandere un'immagine oltre la sua dimensione originale.
- L'opzione `protectFaces` usa il rilevamento dei volti con IA per contrassegnare le regioni dei volti come ad alta energia, impedendo alle seam di attraversare i volti.
- `blurRadius` controlla lo smoothing prima del calcolo della mappa di energia. Valori più alti rendono la mappa di energia più uniforme, il che può aiutare con le immagini rumorose.
- `sobelThreshold` influisce su quanto aggressivamente vengono rilevati i bordi. Valori più bassi preservano bordi più sottili.
- L'output è sempre in formato PNG.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
+84
View File
@@ -0,0 +1,84 @@
---
description: "Converti immagini tra formati, inclusi formati moderni come AVIF, JXL e HEIC."
i18n_source_hash: 562f8270e8c3
i18n_provenance: human
i18n_output_hash: cc7a9af253e2
---
# Converti {#convert}
Converti immagini tra formati. Supporta i formati web comuni oltre a formati specializzati come HEIC, JXL, BMP, ICO, JP2, QOI e PSD.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/convert`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| format | string | Sì | - | Formato di destinazione: `jpg`, `png`, `webp`, `avif`, `tiff`, `gif`, `heic`, `heif`, `jxl`, `bmp`, `ico`, `jp2`, `qoi`, `psd`, `ppm`, `eps`, `tga` |
| quality | number | No | - | Qualità di output (1-100). Si applica ai formati con perdita come jpg, webp, avif, heic. |
## Formati di output supportati {#supported-output-formats}
| Formato | Tipo | Note |
|--------|------|-------|
| jpg | Con perdita | JPEG, migliore compatibilità |
| png | Senza perdita | Supporta la trasparenza |
| webp | Entrambi | Formato web moderno, buona compressione |
| avif | Con perdita | Formato di nuova generazione, compressione eccellente |
| tiff | Entrambi | Flussi di lavoro per stampa/editoria |
| gif | Senza perdita | Limitato a 256 colori |
| heic / heif | Con perdita | Formato dell'ecosistema Apple |
| jxl | Entrambi | JPEG XL, formato di nuova generazione |
| bmp | Senza perdita | Bitmap non compressa |
| ico | Senza perdita | Formato icona di Windows |
| jp2 | Con perdita | JPEG 2000 |
| qoi | Senza perdita | Formato Quite OK Image |
| psd | A livelli | Adobe Photoshop (richiede ImageMagick) |
| ppm | Senza perdita | Portable Pixmap (PPM/PGM/PBM) |
| eps | Vettoriale | Encapsulated PostScript |
| tga | Senza perdita | Formato immagine Targa |
## Esempio di richiesta {#example-request}
Converti in 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}'
```
Converti in PNG (senza perdita):
```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"}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.webp",
"originalSize": 2450000,
"processedSize": 680000
}
```
## Note {#notes}
- L'estensione del nome del file di output viene aggiornata automaticamente per corrispondere al formato di destinazione.
- Gli input SVG vengono rasterizzati a 300 DPI prima della conversione.
- La conversione PSD richiede che ImageMagick sia installato sul server.
- BMP, EPS, ICO, JP2, JXL, PPM, QOI e TGA usano encoder CLI specializzati e bypassano l'elaborazione di Sharp.
- La codifica HEIC/HEIF usa la libreria di codifica HEIC di sistema.
- I formati di input sono ampi: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC, RAW (CR2, NEF, ARW, ecc.), PSD, SVG, BMP e altri.
+62
View File
@@ -0,0 +1,62 @@
---
description: "Ritaglia immagini specificando una regione con posizione e dimensioni."
i18n_source_hash: aab38ccd7c53
i18n_provenance: human
i18n_output_hash: 7f9ff6b77a1f
---
# Ritaglia {#crop}
Ritaglia immagini definendo una regione rettangolare usando posizione e dimensione. Supporta unità sia in pixel che in percentuale.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/crop`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| left | number | Sì | - | Offset X della regione di ritaglio (dal bordo sinistro) |
| top | number | Sì | - | Offset Y della regione di ritaglio (dal bordo superiore) |
| width | number | Sì | - | Larghezza della regione di ritaglio |
| height | number | Sì | - | Altezza della regione di ritaglio |
| unit | string | No | `"px"` | Unità per i valori: `px` o `percent` |
## Esempio di richiesta {#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}'
```
Ritaglia usando valori percentuali:
```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"}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 1200000
}
```
## Note {#notes}
- La regione di ritaglio deve rientrare nei confini dell'immagine. Se la regione si estende oltre l'immagine, la richiesta fallirà.
- Quando si usa l'unità `percent`, i valori rappresentano percentuali delle dimensioni dell'immagine (es. `left: 10` significa 10% dal bordo sinistro).
- Il formato di output corrisponde al formato di input.
- L'orientamento EXIF viene applicato automaticamente prima del ritaglio, quindi le coordinate corrispondono all'orientamento visivamente corretto.
+50
View File
@@ -0,0 +1,50 @@
---
description: "Applica un effetto duotone a due colori con colori personalizzati per ombre e luci."
i18n_source_hash: ab99c4f0152c
i18n_provenance: human
i18n_output_hash: 6461bdb15907
---
# Duotone {#duotone}
Applica un effetto duotone a due colori a un'immagine. L'immagine viene convertita in scala di grigi, quindi mappata su un gradiente tra il colore delle ombre (toni scuri) e il colore delle luci (toni chiari).
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/duotone`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| shadow | string | No | `"#1e3a8a"` | Colore esadecimale delle ombre (applicato ai toni scuri) |
| highlight | string | No | `"#fbbf24"` | Colore esadecimale delle luci (applicato ai toni chiari) |
| intensity | integer | No | `100` | Intensità dell'effetto (0-100); 0 restituisce l'originale, 100 applica il duotone completo |
## Esempio di richiesta {#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}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 1870000
}
```
## Note {#notes}
- Il formato di output corrisponde al formato di input. Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
- Un valore di `intensity` inferiore a 100 miscela il risultato duotone con l'immagine originale, consentendo effetti più tenui.
- Combinazioni duotone popolari includono blu navy/oro, verde acqua/corallo e viola/rosa.
+108
View File
@@ -0,0 +1,108 @@
---
description: "Modifica i campi di metadati EXIF, IPTC, GPS e XMP nelle immagini senza ricodificare i pixel."
i18n_source_hash: a37746db11c3
i18n_provenance: human
i18n_output_hash: 9b741b767435
---
# Modifica metadati {#edit-metadata}
Modifica i campi di metadati dell'immagine inclusi EXIF, IPTC, coordinate GPS, date e parole chiave. Usa ExifTool internamente, quindi i metadati vengono scritti in-place senza ricodificare i pixel, preservando la piena qualità dell'immagine.
## Endpoint API {#api-endpoints}
### Modifica metadati {#edit-metadata-1}
`POST /api/v1/tools/image/edit-metadata`
Scrive i campi di metadati nell'immagine e restituisce il file modificato.
### Ispeziona metadati {#inspect-metadata}
`POST /api/v1/tools/image/edit-metadata/inspect`
Restituisce i metadati completi dall'immagine tramite ExifTool come JSON. Non modifica l'immagine.
## Parametri (Modifica) {#parameters-edit}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| title | string | No | - | Titolo dell'immagine (XMP/EXIF) |
| author | string | No | - | Nome dell'autore |
| artist | string | No | - | Nome dell'artista (tag EXIF Artist) |
| copyright | string | No | - | Nota di copyright |
| imageDescription | string | No | - | Descrizione dell'immagine (EXIF) |
| software | string | No | - | Tag del software |
| dateTime | string | No | - | Valore EXIF DateTime |
| dateTimeOriginal | string | No | - | Valore EXIF DateTimeOriginal |
| setAllDates | string | No | - | Imposta tutti i campi data contemporaneamente |
| dateShift | string | No | - | Sposta tutte le date di un offset (formato: `+HH:MM` o `-HH:MM`) |
| clearGps | boolean | No | `false` | Rimuovi tutti i dati GPS |
| gpsLatitude | number | No | - | Imposta la latitudine GPS (da -90 a 90) |
| gpsLongitude | number | No | - | Imposta la longitudine GPS (da -180 a 180) |
| gpsAltitude | number | No | - | Imposta l'altitudine GPS in metri |
| keywords | string[] | No | - | Parole chiave/tag da aggiungere o impostare |
| keywordsMode | string | No | `"add"` | Come gestire le parole chiave: `add` (aggiungi) o `set` (sostituisci) |
| fieldsToRemove | string[] | No | `[]` | Elenco di nomi specifici di campi di metadati da rimuovere |
| iptcTitle | string | No | - | IPTC Object Name |
| iptcHeadline | string | No | - | IPTC Headline |
| iptcCity | string | No | - | IPTC City |
| iptcState | string | No | - | IPTC Province/State |
| iptcCountry | string | No | - | IPTC Country |
## Esempio di richiesta {#example-request}
Imposta autore e copyright:
```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"}'
```
Imposta le coordinate 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}'
```
Rimuovi il GPS e aggiungi parole chiave:
```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"}'
```
Ispeziona i metadati:
```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"
```
## Esempio di risposta (Modifica) {#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
}
```
## Note {#notes}
- Questo strumento richiede che ExifTool sia installato sul server. È incluso nell'immagine Docker.
- I metadati vengono scritti in-place, quindi non si verifica alcuna ricodifica dei pixel. La variazione di dimensione del file è minima (solo i byte dei metadati).
- Il parametro `dateShift` sposta tutti i campi data dell'offset specificato, utile per correggere errori di fuso orario (es. `+02:00` o `-05:30`).
- Se non viene richiesta alcuna modifica (tutti i parametri omessi o vuoti), il file originale viene restituito invariato.
- Formati supportati: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC/HEIF.
- Per i formati non visualizzabili in anteprima nel browser (HEIF, TIFF), la risposta include un campo `previewUrl` con un'anteprima WebP.
+85
View File
@@ -0,0 +1,85 @@
---
description: "Ripristina e nitidizza i volti sfocati o di bassa qualità nelle immagini con i modelli di IA GFPGAN e CodeFormer."
i18n_source_hash: 7f9f6af8ebda
i18n_provenance: human
i18n_output_hash: 54c3c08941c0
---
# Miglioramento dei volti {#face-enhancement}
Ripristina e migliora i volti nelle immagini usando modelli di IA (GFPGAN/CodeFormer).
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/enhance-faces`
**Elaborazione:** Asincrona (restituisce 202, esegui il polling di `/api/v1/jobs/{jobId}/progress` per lo stato tramite SSE)
**Bundle dei modelli:** `upscale-enhance` (5-6 GB) e `face-detection` (200-300 MB)
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| file | file | Sì | - | File immagine (multipart) |
| model | string | No | `"auto"` | Modello da usare: `auto`, `gfpgan`, `codeformer` |
| strength | number | No | `0.8` | Intensità del miglioramento (0-1). Valori più alti producono un miglioramento più forte |
| onlyCenterFace | boolean | No | `false` | Migliora solo il volto più centrale/prominente |
| sensitivity | number | No | `0.5` | Sensibilità del rilevamento dei volti (0-1) |
## Esempio di richiesta {#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}'
```
## Risposta {#response}
### Risposta iniziale (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Avanzamento (SSE su `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Enhancing faces...","percent":60}
```
### Risultato finale (tramite 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"
}
}
```
## Note {#notes}
- Richiede sia il bundle del modello `upscale-enhance` (5-6 GB) sia il bundle del modello `face-detection` (200-300 MB).
- GFPGAN produce un miglioramento più aggressivo; CodeFormer preserva meglio l'identità. `auto` seleziona il modello migliore per l'input.
- L'output è sempre in formato PNG per la massima qualità.
- Un'anteprima WebP viene generata insieme all'output a piena risoluzione per una visualizzazione più rapida nel frontend.
- Il parametro `strength` miscela il volto migliorato con l'originale. Usa valori più bassi (0.3-0.5) per miglioramenti tenui, valori più alti (0.7-1.0) per un ripristino più forte.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
+79
View File
@@ -0,0 +1,79 @@
---
description: "Rimuovi oggetti indesiderati dalle immagini con l'inpainting IA (LaMa), guidato da una maschera della regione da cancellare."
i18n_source_hash: 8e2e42a5e4f9
i18n_provenance: human
i18n_output_hash: 0d2755e07356
---
# Gomma per oggetti {#object-eraser}
Rimuovi oggetti indesiderati dalle immagini usando l'inpainting IA (modello LaMa). Accetta un'immagine e una maschera che indica la regione da cancellare.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/erase-object`
**Elaborazione:** Asincrona (restituisce 202, esegui il polling di `/api/v1/jobs/{jobId}/progress` per lo stato tramite SSE)
**Bundle del modello:** `object-eraser-colorize` (1-2 GB)
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| file | file | Sì | - | File immagine di origine (multipart) |
| mask | file | Sì | - | Immagine maschera (bianco = area da cancellare, nero = mantieni). Deve essere caricata con il fieldname `mask` |
| format | string | No | `"auto"` | Formato di output: `auto`, `png`, `jpg`, `jpeg`, `webp`, `tiff`, `gif`, `avif`, `heic`, `heif`, `jxl` |
| quality | integer | No | `95` | Qualità di output (1-100) |
## Esempio di richiesta {#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"
```
## Risposta {#response}
### Risposta iniziale (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Avanzamento (SSE su `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Inpainting...","percent":70}
```
### Risultato finale (tramite 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
}
}
```
## Note {#notes}
- Richiede l'installazione del bundle del modello `object-eraser-colorize` (1-2 GB).
- La maschera deve avere le stesse dimensioni dell'immagine di origine. I pixel bianchi indicano le aree da cancellare; l'IA le riempie con contenuto plausibile.
- Usa LaMa (Large Mask Inpainting) per una rimozione degli oggetti di alta qualità.
- Per i formati di output non visualizzabili in anteprima nel browser, viene generata un'anteprima WebP insieme all'output principale.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
+93
View File
@@ -0,0 +1,93 @@
---
description: "Genera tutte le dimensioni standard di favicon e icone app da un'immagine sorgente."
i18n_source_hash: 3a6451a94b7a
i18n_provenance: human
i18n_output_hash: c2733bdc1752
---
# Generatore di Favicon {#favicon-generator}
Genera un set completo di file favicon e icone app da un'immagine sorgente. Produce tutte le dimensioni standard necessarie per browser, dispositivi Apple e Android, insieme a un web manifest e a uno snippet HTML.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/favicon`
Accetta dati di form multipart con uno o più file immagine e un campo JSON `settings` opzionale.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| background | string | No | - | Colore di sfondo esadecimale (es. `"#ffffff"`). Quando impostato, l'icona viene appiattita su questo colore. |
| padding | integer | No | `0` | Percentuale di padding attorno al contenuto dell'icona (da 0 a 40) |
| radius | integer | No | `0` | Percentuale del raggio degli angoli per icone arrotondate (da 0 a 50) |
| sizes | integer[] | No | - | Limita l'output a dimensioni specifiche in pixel (es. `[16, 32, 180]`). Ometti per generare tutte le dimensioni standard. |
| themeColor | string | No | `"#ffffff"` | Colore del tema esadecimale per il web manifest |
## File Generati {#generated-files}
Per ogni immagine di input vengono prodotti i seguenti file:
| File | Dimensione | Scopo |
|------|------|---------|
| `favicon-16x16.png` | 16x16 | Icona della scheda del browser |
| `favicon-32x32.png` | 32x32 | Icona della scheda del browser (HiDPI) |
| `favicon-48x48.png` | 48x48 | Scorciatoia desktop |
| `apple-touch-icon.png` | 180x180 | Schermata home iOS |
| `android-chrome-192x192.png` | 192x192 | Schermata home Android |
| `android-chrome-512x512.png` | 512x512 | Schermata di avvio Android |
| `favicon.ico` | 32x32 | Formato ICO legacy |
| `manifest.json` | - | Web app manifest con riferimenti alle icone |
| `favicon-snippet.html` | - | Tag link HTML pronti all'uso |
## Richiesta di Esempio {#example-request}
Singola immagine sorgente con angoli arrotondati e padding:
```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"}'
```
Più immagini sorgente (ognuna ottiene il proprio set in una sottocartella):
```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"
```
## Risposta di Esempio {#example-response}
La risposta è un file ZIP trasmesso direttamente in streaming. Gli header della risposta sono:
```
Content-Type: application/zip
Content-Disposition: attachment; filename="favicons-a1b2c3d4.zip"
```
## Snippet HTML Incluso {#html-snippet-included}
Lo ZIP include un file `favicon-snippet.html` che puoi incollare nell'`<head>` del tuo HTML:
```html
<!-- Favicons -->
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="48x48" href="/favicon-48x48.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="manifest" href="/manifest.json">
```
## Note {#notes}
- Le immagini sorgente vengono ridimensionate usando la modalità di adattamento `cover`, il che significa che vengono ritagliate per riempire ogni dimensione quadrata. Per risultati ottimali, usa un'immagine sorgente quadrata.
- Quando vengono caricati più file, ognuno ottiene la propria sottocartella nello ZIP (nominata in base al file sorgente).
- Per il caricamento di un singolo file, tutti gli output si trovano nella radice dello ZIP senza sottocartella.
- I file che non superano la validazione o la decodifica vengono saltati, e un `skipped-files.txt` viene incluso nello ZIP per spiegare i problemi.
- Formati di input supportati: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC, SVG, RAW, PSD e altri.
- L'orientamento EXIF viene applicato automaticamente prima del ridimensionamento.
+115
View File
@@ -0,0 +1,115 @@
---
description: "Rileva immagini duplicate e quasi duplicate usando l'hashing percettivo."
i18n_source_hash: 4e1f4413f90f
i18n_provenance: human
i18n_output_hash: fcd167818bf0
---
# Trova Duplicati {#find-duplicates}
Carica più immagini per rilevare duplicati e quasi duplicati usando l'hashing percettivo (dHash). Raggruppa le immagini simili, identifica la versione di migliore qualità in ogni gruppo e calcola il potenziale risparmio di spazio.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/find-duplicates`
Accetta dati di form multipart con più file immagine e un campo JSON `settings` opzionale.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| threshold | number | No | `8` | Distanza di Hamming massima per considerare le immagini come duplicate (da 0 a 20). Più basso = corrispondenza più rigorosa |
### Campi File {#file-fields}
Carica almeno 2 file immagine nella richiesta multipart (tutti usando il nome di campo `file` o qualsiasi nome di campo per le parti file).
## Richiesta di Esempio {#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}'
```
## Risposta di Esempio {#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": []
}
```
## Campi della Risposta {#response-fields}
| Campo | Tipo | Descrizione |
|-------|------|-------------|
| totalImages | number | Numero di immagini analizzate con successo |
| duplicateGroups | array | Gruppi di immagini duplicate |
| uniqueImages | number | Numero di immagini non appartenenti ad alcun gruppo di duplicati |
| spaceSaveable | number | Totale dei byte che potrebbero essere risparmiati rimuovendo i duplicati non migliori |
| skippedFiles | array | File che non è stato possibile elaborare (con nome file e motivo) |
### Oggetto Gruppo di Duplicati {#duplicate-group-object}
| Campo | Tipo | Descrizione |
|-------|------|-------------|
| groupId | number | Identificatore del gruppo |
| files | array | Immagini in questo gruppo di duplicati |
### Oggetto File (all'interno di un gruppo) {#file-object-within-a-group}
| Campo | Tipo | Descrizione |
|-------|------|-------------|
| filename | string | Nome file originale |
| similarity | number | Percentuale di somiglianza rispetto all'immagine di riferimento (la prima del gruppo) |
| width | number | Larghezza dell'immagine in pixel |
| height | number | Altezza dell'immagine in pixel |
| fileSize | number | Dimensione del file in byte |
| format | string | Formato dell'immagine |
| isBest | boolean | Se questa è la versione di qualità più alta (più pixel, file più grande) |
| thumbnail | string o null | Miniatura JPEG in Base64 (larga 200px) per l'anteprima |
## Note {#notes}
- Usa un dHash a 128 bit (64 bit di riga + 64 bit di colonna) per il rilevamento della somiglianza percettiva. Questo intercetta i duplicati anche attraverso ridimensionamenti, ricompressioni e modifiche minori.
- La soglia rappresenta la distanza di Hamming massima tra gli hash. Il valore predefinito di 8 intercetta i quasi duplicati evitando i falsi positivi. Usa 0 per soli duplicati identici a livello di pixel, oppure 15-20 per una corrispondenza molto larga.
- L'immagine "migliore" in ogni gruppo è quella con più pixel (larghezza x altezza), con la dimensione del file come criterio di spareggio.
- Sono richieste almeno 2 immagini. I file che non superano la validazione o la decodifica vengono segnalati in `skippedFiles` invece di far fallire l'intera richiesta.
- Le miniature sono anteprime JPEG larghe 200px codificate come data URI.
- Sono supportati tutti i formati comuni (HEIC, RAW, PSD, SVG decodificati automaticamente).
+147
View File
@@ -0,0 +1,147 @@
---
description: "Ridimensiona, ottimizza, cambia velocità, inverti, ruota ed estrai fotogrammi da GIF animate in un unico strumento."
i18n_source_hash: 5e525e80db92
i18n_provenance: human
i18n_output_hash: 5f9277240963
---
# Strumenti GIF {#gif-tools}
Ridimensiona, ottimizza, cambia velocità, inverti, estrai fotogrammi e ruota GIF animate. Offre più modalità operative in un unico strumento.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/gif-tools`
## Parametri {#parameters}
### Parametri Comuni {#common-parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| mode | string | No | `"resize"` | Modalità operativa: `resize`, `optimize`, `speed`, `reverse`, `extract`, `rotate` |
| loop | number | No | 0 | Numero di ripetizioni per la GIF di output (0 = infinito, 1-100 = ripetizioni finite) |
### Parametri della Modalità Resize {#resize-mode-parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| width | integer | No | - | Larghezza target in pixel (da 1 a 16384) |
| height | integer | No | - | Altezza target in pixel (da 1 a 16384) |
| percentage | number | No | - | Scala per percentuale (da 1 a 500). Sovrascrive width/height se impostato. |
### Parametri della Modalità Optimize {#optimize-mode-parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| colors | number | No | 256 | Numero massimo di colori nella palette (da 2 a 256) |
| dither | number | No | 1.0 | Intensità del dithering (da 0 a 1, dove 0 disabilita il dithering) |
| effort | number | No | 7 | Livello di impegno dell'ottimizzazione (da 1 a 10, più alto = più lento ma più piccolo) |
### Parametri della Modalità Speed {#speed-mode-parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| speedFactor | number | No | 1.0 | Moltiplicatore di velocità (da 0.1 a 10). Valori > 1 accelerano, < 1 rallentano. |
### Parametri della Modalità Extract {#extract-mode-parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| extractMode | string | No | `"single"` | Modalità di estrazione: `single`, `range`, `all` |
| frameNumber | number | No | 0 | Indice del fotogramma da estrarre in modalità `single` (in base 0) |
| frameStart | number | No | 0 | Indice del fotogramma iniziale per la modalità `range` (in base 0) |
| frameEnd | number | No | - | Indice del fotogramma finale per la modalità `range` (in base 0, incluso) |
| extractFormat | string | No | `"png"` | Formato per i fotogrammi estratti: `png`, `webp` |
### Parametri della Modalità Rotate {#rotate-mode-parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| angle | number | No | - | Angolo di rotazione: `90`, `180` o `270` gradi |
| flipH | boolean | No | `false` | Capovolgi orizzontalmente |
| flipV | boolean | No | `false` | Capovolgi verticalmente |
## Richieste di Esempio {#example-requests}
### Resize {#resize}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools \
-F "file=@animation.gif" \
-F 'settings={"mode":"resize","percentage":50}'
```
### Optimize {#optimize}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools \
-F "file=@large.gif" \
-F 'settings={"mode":"optimize","colors":128,"effort":9}'
```
### Speed Up {#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}'
```
### Estrai Singolo Fotogramma {#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"}'
```
## Risposta di Esempio {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/animation.gif",
"originalSize": 2345678,
"processedSize": 1234567
}
```
## Sotto-rotta Info {#info-sub-route}
`POST /api/v1/tools/image/gif-tools/info`
Restituisce i metadati di una GIF animata senza elaborarla.
### Richiesta Info {#info-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/gif-tools/info \
-F "file=@animation.gif"
```
### Risposta 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
}
```
## Note {#notes}
- Usa la factory `createToolRoute` standard per l'endpoint di elaborazione principale.
- L'endpoint info richiede solo il caricamento di un file (nessuna impostazione necessaria).
- In modalità `resize`, se viene fornito `percentage` ha la priorità su `width`/`height`. Il ridimensionamento usa `fit: inside` per mantenere le proporzioni.
- In modalità `speed`, i ritardi dei fotogrammi vengono divisi per il fattore di velocità. Il ritardo minimo per fotogramma è di 20ms (limitazione delle specifiche GIF).
- In modalità `reverse`, è disponibile anche il parametro `speedFactor` per regolare simultaneamente la velocità durante l'inversione.
- In modalità `extract` con `range` o `all`, l'output è un file ZIP contenente i singoli fotogrammi.
- In modalità `rotate`, ogni fotogramma viene elaborato individualmente e riassemblato in un'animazione.
- Il parametro `loop` controlla quante volte la GIF di output viene ripetuta. Usa 0 per il loop infinito.
- Il campo `duration` nella risposta info è la durata totale dell'animazione in millisecondi.
+51
View File
@@ -0,0 +1,51 @@
---
description: "Converti GIF animate in WebP e viceversa, preservando tutti i fotogrammi."
i18n_source_hash: 20946e5001cb
i18n_provenance: human
i18n_output_hash: e571530ed5df
---
# Convertitore GIF/WebP {#gif-webp-converter}
Converti file GIF animati in WebP e viceversa, preservando tutti i fotogrammi e la temporizzazione dell'animazione. Le animazioni WebP sono in genere più piccole del 25-35% rispetto alle GIF equivalenti.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/gif-webp`
Accetta dati di form multipart con un file GIF o WebP e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| quality | integer | No | `80` | Qualità dell'output per la codifica WebP (1-100) |
| lossless | boolean | No | `false` | Usa la compressione WebP senza perdita |
| resizePercent | integer | No | `100` | Scala l'output per percentuale (10-100) |
## Richiesta di Esempio {#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}'
```
## Risposta di Esempio {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/animation.webp",
"originalSize": 3500000,
"processedSize": 2200000
}
```
## Note {#notes}
- Sono accettati solo file `.gif` e `.webp`. Altri formati immagine non sono supportati da questo strumento.
- La direzione della conversione è automatica: l'input GIF produce output WebP, e l'input WebP produce output GIF.
- Le opzioni `quality` e `lossless` si applicano solo durante la codifica in WebP. Durante la conversione in GIF, l'output usa la palette GIF standard.
- Usa `resizePercent` per ridurre le dimensioni (e la dimensione del file) di animazioni di grandi dimensioni.
+65
View File
@@ -0,0 +1,65 @@
---
description: "Genera un grafico dell'istogramma RGB con statistiche per canale da un'immagine."
i18n_source_hash: 57aa610206a5
i18n_provenance: human
i18n_output_hash: 3543c0e34ca7
---
# Istogramma {#histogram}
Genera un grafico dell'istogramma RGB da un'immagine. Restituisce un'immagine PNG dell'istogramma insieme a statistiche per canale e dati grezzi dell'istogramma a 256 bin nel JSON della risposta.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/histogram`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| scale | string | No | `"linear"` | Scala dell'asse Y: `linear` o `log` |
## Richiesta di Esempio {#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"}'
```
## Risposta di Esempio {#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 }
}
```
## Note {#notes}
- Il `downloadUrl` punta a un grafico dell'istogramma PNG renderizzato che mostra le distribuzioni R, G, B e di luminanza.
- `bins` contiene array grezzi di 256 valori per ogni canale (rosso, verde, blu, luminanza), adatti al rendering di visualizzazioni personalizzate.
- `stats` fornisce media, mediana e deviazione standard per ogni canale.
- `mean` e `max` sono campi abbreviati retrocompatibili.
- Usa la scala `log` quando l'istogramma è dominato da pochi picchi e vuoi vedere il dettaglio nei bin più bassi.
- Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'analisi.
+81
View File
@@ -0,0 +1,81 @@
---
description: "Cattura pagine web o snippet HTML come immagini di alta qualità con emulazione dei dispositivi."
i18n_source_hash: 1e49d070ea2e
i18n_provenance: human
i18n_output_hash: 148b86ef52ef
---
# HTML in Immagine {#html-to-image}
Cattura un URL di una pagina web o contenuto HTML grezzo come immagine screenshot. Supporta l'emulazione dei dispositivi (desktop, tablet, mobile), la cattura dell'intera pagina e più formati di output.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/html-to-image`
Accetta un **corpo JSON** (non multipart). Non è necessario alcun caricamento di file.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| url | string | Condizionale | - | URL da catturare (deve essere un URL valido) |
| html | string | Condizionale | - | Contenuto HTML grezzo da renderizzare (da 1 a 5.000.000 caratteri) |
| format | string | No | `"png"` | Formato di output: `jpg`, `png`, `webp` |
| quality | number | No | `90` | Qualità dell'output per formati con perdita (da 1 a 100) |
| fullPage | boolean | No | `false` | Cattura l'intera pagina scorrevole, non solo il viewport |
| devicePreset | string | No | `"desktop"` | Emulazione del dispositivo: `desktop`, `tablet`, `mobile`, `custom` |
| viewportWidth | number | No | `1280` | Larghezza personalizzata del viewport in pixel (da 320 a 3840, usata quando devicePreset è `custom`) |
| viewportHeight | number | No | `720` | Altezza personalizzata del viewport in pixel (da 320 a 2160, usata quando devicePreset è `custom`) |
Deve essere fornito `url` oppure `html`, ma non entrambi.
### Preset dei Dispositivi {#device-presets}
| Preset | Larghezza | Altezza | UA Mobile |
|--------|-------|--------|-----------|
| `desktop` | 1280 | 720 | No |
| `tablet` | 768 | 1024 | No |
| `mobile` | 375 | 812 | Sì |
| `custom` | (specificato dall'utente) | (specificato dall'utente) | No |
## Richiesta di Esempio {#example-request}
Cattura una pagina web:
```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"}'
```
Renderizza contenuto 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"}'
```
## Risposta di Esempio {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/screenshot.png",
"originalSize": 0,
"processedSize": 145000
}
```
## Note {#notes}
- Richiede che Chromium sia installato sul server. Restituisce HTTP 503 se il servizio del browser non è disponibile.
- Gli URL vengono validati contro attacchi SSRF (gli indirizzi di rete privati/interni sono bloccati).
- Questo endpoint è soggetto a un limite di 120 richieste all'ora.
- `originalSize` è sempre 0 poiché questo strumento genera immagini da URL/HTML.
- Il nome file di output è `screenshot.<format>`.
- Se il caricamento della pagina richiede troppo tempo, la richiesta restituisce HTTP 504 (gateway timeout).
- Se il servizio del browser va in crash ripetutamente, viene temporaneamente disabilitato e restituisce HTTP 503 con codice `BROWSER_CRASHED`.
@@ -0,0 +1,99 @@
---
description: "Miglioramento automatico con un clic che analizza un'immagine e corregge esposizione, contrasto, bilanciamento del bianco, saturazione e nitidezza."
i18n_source_hash: 42b6ab956f91
i18n_provenance: human
i18n_output_hash: 2fc15ab32ee6
---
# Miglioramento Immagine {#image-enhancement}
Miglioramento automatico con un clic e analisi intelligente. Analizza l'immagine e applica correzioni di esposizione, contrasto, bilanciamento del bianco, saturazione, nitidezza e riduzione del rumore.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/image-enhancement`
**Elaborazione:** Sincrona (usa la factory `createToolRoute`, restituisce il risultato direttamente)
**Model bundle:** Nessuno richiesto per il miglioramento di base. Il bundle `upscale-enhance` (5-6 GB) viene usato solo quando `deepEnhance` è abilitato (per la rimozione del rumore tramite IA con SCUNet).
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| file | file | Sì | - | File immagine (multipart) |
| mode | string | No | `"auto"` | Modalità di miglioramento: `auto`, `portrait`, `landscape`, `low-light`, `food`, `document` |
| intensity | number | No | `50` | Intensità complessiva del miglioramento (0-100) |
| corrections | object | No | tutte `true` | Correzioni selettive da applicare (vedi sotto) |
| deepEnhance | boolean | No | `false` | Abilita la rimozione del rumore basata su IA (richiede lo strumento `noise-removal` installato) |
### Oggetto Corrections {#corrections-object}
| Campo | Tipo | Predefinito | Descrizione |
|-------|------|---------|-------------|
| exposure | boolean | `true` | Correzione automatica dell'esposizione |
| contrast | boolean | `true` | Correzione automatica del contrasto |
| whiteBalance | boolean | `true` | Correzione automatica del bilanciamento del bianco |
| saturation | boolean | `true` | Correzione automatica della saturazione |
| sharpness | boolean | `true` | Nitidezza automatica |
| denoise | boolean | `true` | Riduzione leggera del rumore |
## Richiesta di Esempio {#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}}'
```
## Risposta (200 OK) {#response-200-ok}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/{jobId}/photo.jpg",
"originalSize": 300000,
"processedSize": 310000
}
```
## Endpoint Analyze {#analyze-endpoint}
`POST /api/v1/tools/image/image-enhancement/analyze`
Analizza un'immagine e restituisce raccomandazioni di correzione senza applicarle.
### Parametri {#parameters-1}
| Parametro | Tipo | Obbligatorio | Descrizione |
|-----------|------|----------|-------------|
| file | file | Sì | File immagine (multipart) |
### Richiesta di Esempio {#example-request-1}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/image-enhancement/analyze \
-F "file=@photo.jpg"
```
### Risposta (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" }
}
}
```
## Note {#notes}
- Questo strumento usa la factory sincrona `createToolRoute`, quindi restituisce una risposta standard (non 202 asincrona).
- Il parametro `mode` regola come vengono ponderate le correzioni (es. la modalità ritratto è più delicata sui toni della pelle, la modalità paesaggio aumenta la saturazione).
- Quando `deepEnhance` è abilitato e lo strumento `noise-removal` (SCUNet) è installato, viene applicata un'ulteriore passata di riduzione del rumore tramite IA dopo le correzioni standard.
- L'endpoint analyze è utile per visualizzare in anteprima quali correzioni verrebbero applicate prima di confermare.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
+54
View File
@@ -0,0 +1,54 @@
---
description: "Aggiungi bordi a un'immagine per raggiungere le proporzioni target con uno sfondo a tinta unita, trasparente o sfocato."
i18n_source_hash: 796122da3dae
i18n_provenance: human
i18n_output_hash: 0840d4fa95db
---
# Riempimento Immagine {#image-pad}
Aggiungi bordi a un'immagine per raggiungere le proporzioni target aggiungendo attorno ad essa uno sfondo a tinta unita, trasparente o sfocato. Utile per adattare le immagini a proporzioni fisse per i social media o la stampa senza ritagliarle.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/image-pad`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| target | string | No | `"1:1"` | Proporzioni target: `16:9`, `9:16`, `1:1`, `4:3`, `3:4` o `custom` |
| ratioW | integer | No | `1` | Larghezza del rapporto personalizzato (1-100, usata quando target è `custom`) |
| ratioH | integer | No | `1` | Altezza del rapporto personalizzato (1-100, usata quando target è `custom`) |
| background | string | No | `"color"` | Modalità di sfondo: `color`, `transparent` o `blur` |
| color | string | No | `"#ffffff"` | Colore di sfondo esadecimale (quando background è `color`) |
| padding | integer | No | `0` | Padding aggiuntivo come percentuale del canvas (0-50) |
## Richiesta di Esempio {#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}'
```
## Risposta di Esempio {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 3100000
}
```
## Note {#notes}
- La modalità di sfondo `blur` crea una copia sfocata dell'immagine originale come riempimento, producendo un risultato visivamente coerente.
- Quando si usa lo sfondo `transparent`, l'output viene convertito in PNG per preservare il canale alpha.
- Il formato di output corrisponde al formato di input a meno che non sia coinvolta la trasparenza. Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
- Imposta `target` su `custom` e fornisci `ratioW` e `ratioH` per proporzioni arbitrarie (es. `ratioW: 3, ratioH: 2` per 3:2).
@@ -0,0 +1,96 @@
---
description: "Converti immagini in data URI Base64 per l'incorporamento in HTML, CSS e altro."
i18n_source_hash: ba4b8f3b4ece
i18n_provenance: human
i18n_output_hash: 753b30de9188
---
# Immagine in Base64 {#image-to-base64}
Converti una o più immagini in stringhe codificate in Base64 e data URI. Supporta la conversione facoltativa del formato, il controllo della qualità e il ridimensionamento. Utile per incorporare immagini direttamente in HTML, CSS, JSON o template di email.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/image-to-base64`
Accetta dati di form multipart con una o più immagini e un campo JSON `settings` opzionale.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| outputFormat | string | No | `"original"` | Converti prima della codifica: `original`, `jpeg`, `png`, `webp`, `avif`, `jxl` |
| quality | number | No | `80` | Qualità dell'output per formati con perdita (da 1 a 100) |
| maxWidth | number | No | `0` | Larghezza massima in pixel (0 = nessun ridimensionamento, non ingrandirà) |
| maxHeight | number | No | `0` | Altezza massima in pixel (0 = nessun ridimensionamento, non ingrandirà) |
## Richiesta di Esempio {#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}'
```
Più file:
```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"}'
```
## Risposta di Esempio {#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": []
}
```
## Campi della Risposta {#response-fields}
| Campo | Tipo | Descrizione |
|-------|------|-------------|
| results | array | Immagini convertite con successo |
| errors | array | Immagini che non è stato possibile elaborare (con nome file e messaggio di errore) |
### Oggetto Result {#result-object}
| Campo | Tipo | Descrizione |
|-------|------|-------------|
| filename | string | Nome file originale |
| mimeType | string | Tipo MIME dell'output codificato |
| width | number | Larghezza finale in pixel (dopo eventuale ridimensionamento) |
| height | number | Altezza finale in pixel (dopo eventuale ridimensionamento) |
| originalSize | number | Dimensione del file originale in byte |
| encodedSize | number | Dimensione della stringa Base64 in byte |
| overheadPercent | number | Differenza percentuale di dimensione rispetto all'originale (positivo = più grande, negativo = più piccolo) |
| base64 | string | Dati grezzi dell'immagine codificati in Base64 |
| dataUri | string | Data URI completo pronto per l'uso negli attributi `src` |
## Note {#notes}
- La codifica Base64 in genere aumenta la dimensione di circa il 33% rispetto al file binario. Il campo `overheadPercent` mostra la differenza effettiva.
- Quando `outputFormat` è `"original"`, i file HEIC/HEIF vengono convertiti in JPEG (poiché i browser non possono visualizzare HEIC nei data URI).
- Le opzioni `maxWidth` e `maxHeight` ridimensionano usando `fit: inside` con `withoutEnlargement`, quindi le immagini più piccole delle dimensioni specificate non vengono ingrandite.
- È possibile elaborare più file in una singola richiesta. Ogni file viene elaborato in modo indipendente, e i fallimenti non impediscono la riuscita degli altri file.
- I file SVG vengono passati direttamente come `image/svg+xml` senza ricodifica (a meno che non venga richiesta una conversione di formato).
- Questo è un endpoint di sola lettura. Non produce un file scaricabile né un `jobId`. I dati Base64 vengono restituiti direttamente nel corpo della risposta.
+119
View File
@@ -0,0 +1,119 @@
---
description: "Combina una o più immagini in un documento PDF con opzioni di formato pagina, orientamento e dimensione del file target."
i18n_source_hash: f659c7e7f56b
i18n_provenance: human
i18n_output_hash: 48b9e834e4cf
---
# Immagine in PDF {#image-to-pdf}
Combina una o più immagini in un documento PDF. Supporta più formati pagina, orientamenti, margini e il targeting facoltativo della dimensione del file tramite regolazione della qualità.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/image-to-pdf`
Accetta dati di form multipart con una o più immagini e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| pageSize | string | No | `"A4"` | Formato pagina: `A4`, `Letter`, `A3`, `A5` |
| orientation | string | No | `"portrait"` | Orientamento della pagina: `portrait` o `landscape` |
| margin | number | No | `20` | Margine della pagina in punti (0-500) |
| targetSize | object | No | - | Vincolo sulla dimensione del file target (vedi sotto) |
| collate | boolean | No | `true` | Combina tutte le immagini in un unico PDF. Se `false`, crea un PDF per immagine. |
### Oggetto Target Size {#target-size-object}
| Campo | Tipo | Obbligatorio | Descrizione |
|-------|------|----------|-------------|
| value | number | Sì | Valore della dimensione target |
| unit | string | Sì | Unità: `KB` o `MB` |
La dimensione target minima è 50 KB.
## Richiesta di Esempio {#example-request}
PDF multi-immagine di base:
```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}'
```
Con dimensione del file target:
```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"}}'
```
Un PDF per immagine:
```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}'
```
## Risposta di Esempio (Combinata) {#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
}
```
## Risposta di Esempio (Non Combinata) {#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
}
```
## Risposta di Esempio (Con Dimensione Target) {#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
}
}
```
## Note {#notes}
- Le immagini vengono centrate sulla pagina e scalate per adattarsi ai margini preservando le proporzioni. Le immagini non vengono mai ingrandite.
- Quando `collate` è `false`, ogni immagine diventa un file PDF separato, e il download è un archivio ZIP contenente tutti i PDF.
- La funzione di dimensione target usa una ricerca binaria iterativa sui livelli di qualità JPEG (10-95) per trovare la migliore qualità che rientra nel budget.
- Le immagini trasparenti vengono appiattite su bianco prima dell'incorporamento nel PDF.
- Formati di input supportati: JPEG, PNG, WebP, AVIF, TIFF, GIF, HEIC, RAW, PSD, SVG e altri.
- L'orientamento EXIF viene applicato automaticamente prima dell'incorporamento.
+92
View File
@@ -0,0 +1,92 @@
---
description: "Visualizza metadati dettagliati, proprietà e statistiche dell'istogramma per canale di un'immagine."
i18n_source_hash: 8a0f7a0b0153
i18n_provenance: human
i18n_output_hash: 7227ba3e7033
---
# Info Immagine {#image-info}
Strumento di analisi di sola lettura che restituisce metadati completi dell'immagine, incluse dimensioni, formato, spazio colore, presenza di EXIF/ICC/XMP e statistiche dell'istogramma per canale. Non produce un file di output elaborato.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/info`
Accetta dati di form multipart con un file immagine. Nessun campo di impostazioni necessario.
## Parametri {#parameters}
Questo strumento non ha parametri configurabili. Basta caricare il file immagine.
| Campo | Tipo | Obbligatorio | Descrizione |
|-------|------|----------|-------------|
| file | file | Sì | L'immagine da analizzare |
## Richiesta di Esempio {#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"
```
## Risposta di Esempio {#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 }
]
}
```
## Campi della Risposta {#response-fields}
| Campo | Tipo | Descrizione |
|-------|------|-------------|
| filename | string | Nome file sanificato |
| fileSize | number | Dimensione del file in byte |
| width | number | Larghezza dell'immagine in pixel |
| height | number | Altezza dell'immagine in pixel |
| format | string | Formato rilevato (jpeg, png, webp, ecc.) |
| channels | number | Numero di canali colore |
| hasAlpha | boolean | Se l'immagine ha un canale alpha |
| colorSpace | string | Spazio colore (srgb, cmyk, ecc.) |
| density | number o null | Risoluzione DPI/PPI |
| isProgressive | boolean | Se il JPEG usa la codifica progressiva |
| orientation | number o null | Valore di orientamento EXIF (1-8) |
| hasProfile | boolean | Se è incorporato un profilo ICC |
| hasExif | boolean | Se sono presenti metadati EXIF |
| hasIcc | boolean | Se è presente un profilo colore ICC |
| hasXmp | boolean | Se sono presenti metadati XMP |
| bitDepth | string o null | Bit per campione |
| pages | number | Numero di pagine (per formati multi-pagina come TIFF, GIF) |
| histogram | array | Statistiche per canale (min, max, media, deviazione standard) |
## Note {#notes}
- Questo è un endpoint di sola lettura. Non produce un file di output scaricabile né un `jobId`.
- Per le immagini in formato RAW (DNG, CR2, NEF, ARW, ecc.), ExifTool viene usato per estrarre le dimensioni reali del sensore e i flag dei metadati che Sharp non riesce a leggere direttamente.
- I file HEIC/HEIF vengono decodificati internamente in PNG per estrarre le statistiche dei pixel, poiché Sharp non riesce a decodificare i pixel HEVC.
- L'istogramma fornisce min/max/media/dev.std per canale, non una distribuzione completa a 256 bin.
- Il campo `density` riflette i metadati DPI incorporati, se presenti.
@@ -0,0 +1,62 @@
---
description: "Genera un piccolo segnaposto immagine a bassa qualità con data URI Base64."
i18n_source_hash: f8a27c8021f5
i18n_provenance: human
i18n_output_hash: b71af8bdf7b1
---
# Segnaposto LQIP {#lqip-placeholder}
Genera un piccolo segnaposto immagine a bassa qualità (LQIP) da un'immagine sorgente. Restituisce un piccolo file segnaposto insieme a un data URI Base64, un tag HTML `<img>` pronto all'uso e uno snippet CSS `background-image` per l'incorporamento immediato.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/lqip-placeholder`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| width | integer | No | `16` | Larghezza target in pixel (4-64) |
| blur | number | No | `2` | Raggio di sfocatura per la strategia di sfocatura (0-20) |
| strategy | string | No | `"blur"` | Strategia del segnaposto: `blur`, `pixelate` o `solid` |
| format | string | No | `"webp"` | Formato di output: `webp`, `png` o `jpeg` |
| quality | integer | No | `50` | Qualità dell'output (1-100) |
## Richiesta di Esempio {#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"}'
```
## Risposta di Esempio {#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;"
}
```
## Note {#notes}
- Il campo `dataUri` contiene il data URI completo, pronto per l'uso negli attributi `src` o nel CSS senza richieste aggiuntive.
- I campi `html` e `css` forniscono snippet pronti da copiare e incollare per i casi d'uso comuni.
- La strategia `blur` produce una miniatura morbida e sfocata. La strategia `pixelate` crea un mosaico a blocchi. La strategia `solid` restituisce un singolo colore mediato.
- Le dimensioni tipiche dei segnaposto sono di 200-500 byte, il che li rende adatti all'inserimento in linea direttamente nell'HTML.
- L'altezza viene calcolata automaticamente per preservare le proporzioni dell'immagine sorgente.
- Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
@@ -0,0 +1,92 @@
---
description: "Crea meme con template o immagini personalizzate, caselle di testo stilizzate e opzioni per i font."
i18n_source_hash: 0a4970112ca6
i18n_provenance: human
i18n_output_hash: e388bab0e131
---
# Meme Generator {#meme-generator}
Crea meme usando i template integrati o immagini personalizzate. Aggiungi testo con lo stile classico dei meme (testo in grassetto con contorno), diversi preset di layout e scelte di font.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/meme-generator`
Accetta uno tra:
- **Dati form multipart** con un file immagine e un campo JSON `settings` (modalità immagine personalizzata)
- **Corpo JSON** con un `templateId` (modalità template, senza bisogno di caricare un file)
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| templateId | string | No | - | ID del template di meme integrato. Se fornito, non serve caricare un'immagine |
| textLayout | string | No | `"top-bottom"` | Layout delle caselle di testo: `top-bottom`, `top-only`, `bottom-only`, `center`, `side-by-side` |
| textBoxes | array | No | `[]` | Array di oggetti casella di testo con i campi `id` e `text` |
| fontFamily | string | No | `"anton"` | Font: `anton`, `arial-black`, `comic-sans`, `montserrat`, `bebas-neue`, `permanent-marker`, `roboto` |
| fontSize | number | No | auto | Dimensione del font in pixel (da 8 a 200). Calcolata automaticamente se omessa |
| textColor | string | No | `"#ffffff"` | Colore di riempimento del testo |
| strokeColor | string | No | `"#000000"` | Colore del contorno del testo |
| textAlign | string | No | `"center"` | Allineamento del testo: `left`, `center`, `right` |
| allCaps | boolean | No | `true` | Converti il testo in maiuscolo |
### Text Boxes {#text-boxes}
Ogni voce nell'array `textBoxes` dovrebbe avere:
| Field | Type | Description |
|-------|------|-------------|
| id | string | Identificatore della casella corrispondente al layout (ad es. `"top"`, `"bottom"`, `"left"`, `"right"`, `"center"`) |
| text | string | Il testo del meme da visualizzare |
### Text Layout Box IDs {#text-layout-box-ids}
| Layout | Available Box IDs |
|--------|-------------------|
| `top-bottom` | `top`, `bottom` |
| `top-only` | `top` |
| `bottom-only` | `bottom` |
| `center` | `center` |
| `side-by-side` | `left`, `right` |
## Example Request {#example-request}
Immagine personalizzata con testo in alto e in basso:
```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}'
```
Usando un template integrato (corpo JSON, nessun file da caricare):
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/meme-generator \
-H "Authorization: Bearer si_your-api-key" \
-H "Content-Type: application/json" \
-d '{"templateId": "drake", "textBoxes": [{"id": "top", "text": "Manual testing"}, {"id": "bottom", "text": "Automated tests"}]}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/meme-drake.png",
"originalSize": 450000,
"processedSize": 520000
}
```
## Notes {#notes}
- È richiesto o un `templateId` o un file immagine caricato. Se si forniscono entrambi, viene usato il template.
- I template definiscono le posizioni delle proprie caselle di testo; il parametro `textLayout` viene ignorato quando si usano i template.
- Il testo viene renderizzato come SVG con contorni per ottenere il classico look dei meme.
- La dimensione del font viene calcolata automaticamente per adattarsi alla casella di testo se non impostata esplicitamente.
- Le caselle di testo vuote vengono ignorate (non avviene alcun rendering se tutte le caselle sono vuote).
- Il nome file di output include l'ID del template quando si usano i template (ad es. `meme-drake.png`).
- Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
+79
View File
@@ -0,0 +1,79 @@
---
description: "Rimozione di rumore e grana basata sull'AI con opzioni di qualità a più livelli."
i18n_source_hash: f0dfc876e0e0
i18n_provenance: human
i18n_output_hash: 535eedd06cac
---
# Noise Removal {#noise-removal}
Rimozione di rumore e grana basata sull'AI con opzioni di qualità a più livelli, che usa il sidecar Python (modello SCUNet).
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/noise-removal`
**Elaborazione:** Asincrona (restituisce 202, esegui il polling su `/api/v1/jobs/{jobId}/progress` per lo stato tramite SSE)
**Bundle del modello:** `upscale-enhance` (5-6 GB)
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| file | file | Yes | - | File immagine (multipart) |
| tier | string | No | `"balanced"` | Livello di qualità: `quick`, `balanced`, `quality`, `maximum` |
| strength | number | No | `50` | Intensità della riduzione del rumore (0-100) |
| detailPreservation | number | No | `50` | Quanto dettaglio preservare (0-100). Valori più alti mantengono più texture |
| colorNoise | number | No | `30` | Intensità della riduzione del rumore di colore (0-100) |
| format | string | No | `"original"` | Formato di output: `original`, `png`, `jpeg`, `webp`, `avif`, `jxl` |
| quality | number | No | `90` | Qualità di codifica dell'output (1-100) |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/noise-removal \
-F "file=@noisy-photo.jpg" \
-F 'settings={"tier":"quality","strength":60,"detailPreservation":70,"colorNoise":40}'
```
## Response {#response}
### Initial Response (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Progress (SSE at `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Denoising...","percent":65}
```
### Final Result (via SSE) {#final-result-via-sse}
```json
{
"phase": "complete",
"percent": 100,
"result": {
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/{jobId}/noisy-photo_denoised.jpg",
"originalSize": 500000,
"processedSize": 380000
}
}
```
## Notes {#notes}
- Richiede l'installazione del bundle del modello `upscale-enhance` (5-6 GB).
- I livelli di qualità bilanciano velocità e qualità: `quick` è il più veloce con una riduzione del rumore di base, `maximum` usa l'approccio multi-passaggio più accurato.
- Il parametro `detailPreservation` è cruciale per i soggetti con texture (tessuti, capelli, fogliame). Valori più alti impediscono al denoiser di attenuare i dettagli fini.
- Quando `format` è impostato su `"original"`, il formato di output corrisponde al formato del file di input.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
+65
View File
@@ -0,0 +1,65 @@
---
description: "Estrai testo dalle immagini usando il riconoscimento ottico dei caratteri basato sull'AI."
i18n_source_hash: 3d85d423b82c
i18n_provenance: human
i18n_output_hash: 7203514995bd
---
# OCR / Text Extraction {#ocr-text-extraction}
Estrai testo dalle immagini usando il riconoscimento ottico dei caratteri basato sull'AI. Supporta più lingue e livelli di qualità.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/ocr`
**Elaborazione:** Risposta JSON sincrona. Se viene fornito `clientJobId`, l'avanzamento viene riportato anche tramite SSE.
**Bundle del modello:** `ocr` (5-6 GB)
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| file | file | Yes | - | File immagine (multipart) |
| quality | string | No | `"balanced"` | Livello di qualità: `fast` (Tesseract), `balanced` (PaddleOCR v5), `best` (PaddleOCR VL) |
| language | string | No | `"auto"` | Suggerimento sulla lingua: `auto`, `en`, `de`, `fr`, `es`, `zh`, `ja`, `ko` |
| enhance | boolean | No | `true` | Pre-elabora l'immagine per una migliore accuratezza dell'OCR |
| engine | string | No | - | Deprecato. Usa `quality` al suo posto. Mappa `tesseract` a `fast`, `paddleocr` a `balanced` |
## Example Request {#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}'
```
## Response (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"
}
```
### Progress (SSE, optional) {#progress-sse-optional}
Se viene fornito un campo form `clientJobId`, gli eventi di avanzamento vengono trasmessi in streaming:
```
event: progress
data: {"phase":"processing","stage":"Recognizing text...","percent":50}
```
## Notes {#notes}
- Richiede l'installazione del bundle del modello `ocr` (5-6 GB).
- L'OCR restituisce direttamente il testo estratto anziché un URL di download dell'immagine.
- Usa una catena di fallback: se un livello di qualità più alto va in crash (ad es. un segfault di PaddleOCR), riprova automaticamente con il livello inferiore successivo.
- Se un livello restituisce testo vuoto senza andare in crash, ricade comunque sul livello successivo.
- I livelli di qualità si mappano sui motori: `fast` = Tesseract, `balanced` = PaddleOCR v5, `best` = PaddleOCR VL.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
@@ -0,0 +1,74 @@
---
description: "Ottimizza le immagini per il web con conversione di formato, controllo della qualità, ridimensionamento e rimozione dei metadati."
i18n_source_hash: c327bbbce768
i18n_provenance: human
i18n_output_hash: 4e01a6965381
---
# Optimize for Web {#optimize-for-web}
Ottimizza le immagini per la distribuzione sul web in un solo passaggio. Combina conversione di formato, regolazione della qualità, ridimensionamento opzionale, codifica progressiva e rimozione dei metadati.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/optimize-for-web`
Accetta dati form multipart con un file immagine e un campo JSON `settings`.
È disponibile anche un endpoint di anteprima in tempo reale su `POST /api/v1/tools/image/optimize-for-web/preview`, che restituisce l'immagine elaborata direttamente in formato binario (senza creare un workspace) per la regolazione dei parametri in tempo reale.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| format | string | No | `"webp"` | Formato di output: `webp`, `jpeg`, `avif`, `png`, `jxl` |
| quality | number | No | `80` | Qualità dell'output (1-100) |
| maxWidth | number | No | - | Larghezza massima in pixel. L'immagine viene ridotta se più larga. |
| maxHeight | number | No | - | Altezza massima in pixel. L'immagine viene ridotta se più alta. |
| progressive | boolean | No | `true` | Abilita la codifica progressiva/interlacciata |
| stripMetadata | boolean | No | `true` | Rimuovi i metadati EXIF, GPS, ICC e XMP |
## Example Request {#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}'
```
Ottimizza per AVIF con compressione aggressiva:
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/optimize-for-web \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@photo.jpg" \
-F 'settings={"format": "avif", "quality": 50, "maxWidth": 1200, "maxHeight": 800}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.webp",
"originalSize": 4500000,
"processedSize": 320000
}
```
### Preview Endpoint Response {#preview-endpoint-response}
L'endpoint di anteprima (`/api/v1/tools/image/optimize-for-web/preview`) restituisce l'immagine binaria direttamente con header informativi:
- `X-Original-Size` - Dimensione del file originale in byte
- `X-Processed-Size` - Dimensione del file elaborato in byte
- `X-Output-Filename` - Nome file di output codificato in URL
## Notes {#notes}
- Questo strumento è progettato come una pipeline di ottimizzazione all-in-one per le risorse web. Gestisce conversione di formato, regolazione della qualità, limitazione delle dimensioni massime e rimozione dei metadati in un unico passaggio.
- L'estensione del nome file di output viene aggiornata per corrispondere al formato scelto.
- La codifica JXL (JPEG XL) usa un encoder CLI specializzato. L'immagine viene prima elaborata come PNG, poi codificata in JXL.
- La codifica progressiva migliora il tempo di caricamento percepito per JPEG e PNG, consentendo ai browser di renderizzare un'anteprima a bassa qualità prima che l'immagine completa sia caricata.
- L'endpoint di anteprima è più leggero (nessuna creazione di workspace/job) ed è destinato all'interfaccia di regolazione dei parametri in tempo reale del frontend.
+173
View File
@@ -0,0 +1,173 @@
---
description: "Generatore di foto tessera e per documenti basato sull'AI con rilevamento del volto, rimozione dello sfondo e composizione su foglio di stampa."
i18n_source_hash: d4b4f4ced988
i18n_provenance: human
i18n_output_hash: e7ae0364beed
---
# Passport Photo {#passport-photo}
Generatore di foto tessera e per documenti basato sull'AI. Flusso di lavoro in due fasi: analisi (rilevamento del volto + rimozione dello sfondo) e poi generazione (ritaglio, ridimensionamento e composizione per la stampa).
## API Endpoints {#api-endpoints}
Questo strumento usa un flusso in due fasi con endpoint separati per l'analisi e la generazione.
**Bundle dei modelli:** `background-removal` e `face-detection`
---
### Phase 1: Analyze {#phase-1-analyze}
`POST /api/v1/tools/image/passport-photo/analyze`
Rileva i punti di riferimento del volto e rimuove lo sfondo. Restituisce i dati dei punti di riferimento e un'anteprima affinché il frontend possa mostrare un'anteprima del ritaglio.
#### Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| file | file | Yes | - | File immagine (multipart) |
| clientJobId | string | No | - | ID del job opzionale per il tracciamento dell'avanzamento tramite SSE |
#### Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/passport-photo/analyze \
-F "file=@headshot.jpg"
```
#### Response (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
}
```
#### Progress (SSE, optional) {#progress-sse-optional}
Se viene fornito `clientJobId`, l'avanzamento viene trasmesso in streaming (0-30% per il rilevamento del volto, 30-95% per la rimozione dello sfondo).
#### Error: No Face Detected (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."
}
```
---
### Phase 2: Generate {#phase-2-generate}
`POST /api/v1/tools/image/passport-photo/generate`
Ritaglia, ridimensiona e facoltativamente compone la foto su un foglio di stampa. Usa le immagini in cache dalla Fase 1 (nessuna riesecuzione dell'AI).
#### Parameters (JSON body) {#parameters-json-body}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| jobId | string | Yes | - | ID del job dalla Fase 1 |
| filename | string | Yes | - | Nome file originale dalla Fase 1 |
| countryCode | string | Yes | - | Codice paese per le specifiche del passaporto (ad es. `US`, `GB`, `IN`) |
| documentType | string | No | `"passport"` | Tipo di documento (dalle specifiche del paese) |
| bgColor | string | No | `"#FFFFFF"` | Colore di sfondo in esadecimale |
| printLayout | string | No | `"none"` | Layout della carta da stampa: `none`, `4x6`, `a4` |
| maxFileSizeKb | number | No | `0` | Vincolo di dimensione massima del file in KB (0 = nessun limite) |
| dpi | number | No | `300` | DPI di output (72-1200) |
| customWidthMm | number | No | - | Larghezza personalizzata della foto in mm (sovrascrive le specifiche del paese) |
| customHeightMm | number | No | - | Altezza personalizzata della foto in mm (sovrascrive le specifiche del paese) |
| zoom | number | No | `1` | Fattore di zoom (0.5-3). Valori > 1 ritagliano più stretto |
| adjustX | number | No | `0` | Regolazione della posizione orizzontale |
| adjustY | number | No | `0` | Regolazione della posizione verticale |
| landmarks | object | Yes | - | Oggetto dei punti di riferimento dalla risposta della Fase 1 |
| imageWidth | number | Yes | - | Larghezza dell'immagine dalla risposta della Fase 1 |
| imageHeight | number | Yes | - | Altezza dell'immagine dalla risposta della Fase 1 |
#### Example Request {#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
}'
```
#### Response (200 OK) {#response-200-ok-1}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/{jobId}/headshot_passport.jpg",
"dimensions": {
"widthMm": 51,
"heightMm": 51,
"widthPx": 602,
"heightPx": 602,
"dpi": 300
},
"spec": {
"country": "United States",
"countryCode": "US",
"documentType": "passport",
"documentLabel": "Passport"
},
"printDownloadUrl": "/api/v1/download/{jobId}/headshot_passport_print_4x6.jpg"
}
```
---
### Base Route {#base-route}
`POST /api/v1/tools/image/passport-photo`
Restituisce indicazioni su quale sotto-endpoint corretto usare.
```json
{
"error": "Use /api/v1/tools/image/passport-photo/analyze or /generate"
}
```
## Notes {#notes}
- Richiede l'installazione dei bundle dei modelli `background-removal` e `face-detection`.
- La Fase 1 esegue l'AI (punti di riferimento del volto + rimozione dello sfondo) e memorizza i risultati in cache. La Fase 2 è pura manipolazione dell'immagine con Sharp (veloce, senza bisogno di AI).
- I punti di riferimento vengono restituiti come coordinate normalizzate (intervallo 0-1 relativo alle dimensioni dell'immagine).
- Il campo `preview` nella risposta di analisi è un PNG codificato in base64 (max 800px di larghezza) per una visualizzazione rapida.
- Le specifiche dei paesi includono le dimensioni del documento, i rapporti di altezza della testa e il posizionamento della linea degli occhi in base ai requisiti ufficiali delle foto per il passaporto.
- L'opzione `printLayout` genera un foglio composto su carta 4x6\" o A4 con margini di 2mm tra le foto.
- Quando è impostato `maxFileSizeKb`, l'output viene compresso iterativamente per rientrare nel limite di dimensione.
+69
View File
@@ -0,0 +1,69 @@
---
description: "Applica un effetto di pixelatura all'intera immagine o a una regione specifica."
i18n_source_hash: a3ad29841f7b
i18n_provenance: human
i18n_output_hash: 0758bb867dc1
---
# Pixelate {#pixelate}
Applica un effetto di pixelatura a un'intera immagine o a una specifica regione rettangolare. Utile per oscurare contenuti sensibili come volti, targhe o informazioni personali.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/pixelate`
Accetta dati form multipart con un file immagine e un campo JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| blockSize | integer | No | `12` | Dimensione del blocco di pixel (2-128); valori più grandi producono una pixelatura più grossolana |
| region | object | No | - | Limita la pixelatura a un rettangolo (vedi sotto) |
### Region Object {#region-object}
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| left | integer | Yes | Offset a sinistra in pixel (>= 0) |
| top | integer | Yes | Offset in alto in pixel (>= 0) |
| width | integer | Yes | Larghezza della regione in pixel (>= 1) |
| height | integer | Yes | Altezza della regione in pixel (>= 1) |
## Example Request {#example-request}
Pixela l'intera immagine:
```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}'
```
Pixela una regione specifica:
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/pixelate \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@photo.jpg" \
-F 'settings={"blockSize": 16, "region": {"left": 100, "top": 50, "width": 200, "height": 150}}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2380000
}
```
## Notes {#notes}
- Quando `region` è omesso, l'intera immagine viene pixelata.
- Le coordinate della regione sono in pixel relative all'angolo in alto a sinistra dell'immagine. La regione deve rientrare nei limiti dell'immagine.
- Il formato di output corrisponde al formato di input. Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
+76
View File
@@ -0,0 +1,76 @@
---
description: "Genera codici QR con colori personalizzati e livelli di correzione degli errori."
i18n_source_hash: 096ef4d90da5
i18n_provenance: human
i18n_output_hash: e05c559949e1
---
# QR Code Generator {#qr-code-generator}
Genera immagini di codici QR da testo o URL con dimensione configurabile, livello di correzione degli errori e colori personalizzati di primo piano e sfondo.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/qr-generate`
Accetta un **corpo JSON** (non multipart). Non serve caricare alcun file.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| text | string | Yes | - | Contenuto da codificare nel codice QR (da 1 a 2000 caratteri) |
| size | number | No | `400` | Larghezza/altezza dell'immagine di output in pixel (da 100 a 10000) |
| errorCorrection | string | No | `"M"` | Livello di correzione degli errori: `L` (7%), `M` (15%), `Q` (25%), `H` (30%) |
| foreground | string | No | `"#000000"` | Colore di primo piano/modulo del codice QR in esadecimale (`#RRGGBB`) |
| background | string | No | `"#FFFFFF"` | Colore di sfondo del codice QR in esadecimale (`#RRGGBB`) |
| logoDataUri | string | No | - | Immagine del logo come data URI (`data:image/png;base64,...` o `data:image/jpeg;base64,...`, max 700 KB). Centrata sul codice QR al 22% della dimensione del QR. Forza la correzione degli errori a `H` |
### Error Correction Levels {#error-correction-levels}
| Level | Recovery | Use Case |
|-------|----------|----------|
| `L` | ~7% | Massima densità di dati |
| `M` | ~15% | Bilanciato (predefinito) |
| `Q` | ~25% | Adatto per codici stampati |
| `H` | ~30% | Ideale per codici con logo in sovraimpressione |
## Example Request {#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"}'
```
Codice QR personalizzato con colori custom:
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/qr-generate \
-H "Authorization: Bearer si_your-api-key" \
-H "Content-Type: application/json" \
-d '{"text": "Hello World", "size": 300, "foreground": "#1a365d", "background": "#f7fafc"}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/qrcode.png",
"originalSize": 0,
"processedSize": 4520
}
```
## Notes {#notes}
- Questo endpoint accetta JSON, non dati form multipart, poiché non serve caricare alcuna immagine.
- L'output è sempre un'immagine PNG.
- Il nome file di output è sempre `qrcode.png`.
- `originalSize` è sempre 0 poiché questo strumento genera immagini da zero.
- Attorno al codice QR è inclusa una zona di silenzio (margine) di 2 moduli.
- La lunghezza massima del testo è 2000 caratteri. La capacità effettiva dipende dal livello di correzione degli errori e dalla codifica dei caratteri.
- Livelli di correzione degli errori più alti consentono al codice QR di rimanere scansionabile anche se parzialmente oscurato, ma riducono la capacità di dati.
- Quando viene fornito un `logoDataUri`, la correzione degli errori viene automaticamente forzata a `H` (30%) affinché il codice QR rimanga scansionabile nonostante il logo occluda il centro.
@@ -0,0 +1,79 @@
---
description: "Rilevamento e correzione degli occhi rossi causati dal flash della fotocamera basati sull'AI."
i18n_source_hash: 647c6ff1ef7c
i18n_provenance: human
i18n_output_hash: e0978efab8d1
---
# Red Eye Removal {#red-eye-removal}
Rilevamento e correzione degli occhi rossi causati dal flash della fotocamera basati sull'AI.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/red-eye-removal`
**Elaborazione:** Asincrona (restituisce 202, esegui il polling su `/api/v1/jobs/{jobId}/progress` per lo stato tramite SSE)
**Bundle del modello:** `face-detection` (200-300 MB)
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| file | file | Yes | - | File immagine (multipart) |
| sensitivity | number | No | `50` | Sensibilità del rilevamento degli occhi rossi (0-100). Valori più alti rilevano occhi rossi più sottili |
| strength | number | No | `70` | Intensità della correzione (0-100). Quanto aggressivamente neutralizzare il rosso |
| format | string | No | - | Formato di output (override opzionale) |
| quality | number | No | `90` | Qualità dell'output (1-100) |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/red-eye-removal \
-F "file=@flash-photo.jpg" \
-F 'settings={"sensitivity":60,"strength":80}'
```
## Response {#response}
### Initial Response (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Progress (SSE at `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Detecting red eyes...","percent":40}
```
### Final Result (via SSE) {#final-result-via-sse}
```json
{
"phase": "complete",
"percent": 100,
"result": {
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/{jobId}/flash-photo_redeye_fixed.png",
"originalSize": 280000,
"processedSize": 290000,
"facesDetected": 2,
"eyesCorrected": 4
}
}
```
## Notes {#notes}
- Richiede l'installazione del bundle del modello `face-detection` (200-300 MB).
- Prima rileva i volti, poi individua le regioni degli occhi all'interno di ogni volto e infine identifica e corregge i pixel degli occhi rossi.
- Il conteggio `facesDetected` indica quanti volti sono stati trovati; `eyesCorrected` è il numero totale di singoli occhi a cui sono stati corretti gli occhi rossi.
- L'output è sempre PNG per la massima preservazione della qualità.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
@@ -0,0 +1,136 @@
---
description: "Rimozione dello sfondo basata sull'AI con effetti opzionali (sfocatura, ombra, gradiente, sfondo personalizzato)."
i18n_source_hash: 326a91284529
i18n_provenance: human
i18n_output_hash: 48bebed76372
---
# Remove Background {#remove-background}
Rimozione dello sfondo basata sull'AI con effetti opzionali (sfocatura, ombra, gradiente, sfondo personalizzato).
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/remove-background`
**Elaborazione:** Asincrona (restituisce 202, esegui il polling su `/api/v1/jobs/{jobId}/progress` per lo stato tramite SSE)
**Bundle del modello:** `background-removal` (4-5 GB)
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| file | file | Yes | - | File immagine (multipart) |
| model | string | No | - | Variante del modello AI da usare |
| backgroundType | string | No | `"transparent"` | Uno tra: `transparent`, `color`, `gradient`, `blur`, `image` |
| backgroundColor | string | No | - | Colore esadecimale per lo sfondo pieno |
| gradientColor1 | string | No | - | Primo colore del gradiente |
| gradientColor2 | string | No | - | Secondo colore del gradiente |
| gradientAngle | number | No | - | Angolo del gradiente in gradi |
| blurEnabled | boolean | No | - | Abilita l'effetto di sfocatura dello sfondo |
| blurIntensity | number | No | - | Intensità della sfocatura (0-100) |
| shadowEnabled | boolean | No | - | Abilita l'ombra esterna sul soggetto |
| shadowOpacity | number | No | - | Opacità dell'ombra (0-100) |
| outputFormat | string | No | - | Formato di output: `png`, `webp`, o `avif` |
| edgeRefine | integer | No | - | Livello di rifinitura dei bordi (0-3) |
| decontaminate | boolean | No | - | Rimuovi lo sbordamento di colore dai bordi |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/remove-background \
-F "file=@photo.jpg" \
-F 'settings={"backgroundType":"transparent","edgeRefine":2,"outputFormat":"png"}'
```
## Response {#response}
### Initial Response (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Progress (SSE at `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Removing background...","percent":50}
```
### Final Result (via SSE) {#final-result-via-sse}
```json
{
"phase": "complete",
"percent": 100,
"result": {
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/{jobId}/photo_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"
}
}
```
## Effects Endpoint (Phase 2) {#effects-endpoint-phase-2}
`POST /api/v1/tools/image/remove-background/effects`
Riapplica gli effetti di sfondo senza rieseguire il modello AI. Usa la maschera in cache e l'originale dalla Fase 1.
### Parameters {#parameters-1}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| settings | JSON | Yes | - | JSON con le impostazioni degli effetti (vedi sotto) |
| backgroundImage | file | No | - | Immagine di sfondo personalizzata (quando backgroundType è `image`) |
#### Settings JSON fields {#settings-json-fields}
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| jobId | string | Yes | ID del job dalla Fase 1 |
| filename | string | Yes | Nome file originale dalla Fase 1 |
| backgroundType | string | No | `transparent`, `color`, `gradient`, `blur`, `image` |
| backgroundColor | string | No | Colore esadecimale per lo sfondo pieno |
| gradientColor1 | string | No | Primo colore del gradiente |
| gradientColor2 | string | No | Secondo colore del gradiente |
| gradientAngle | number | No | Angolo del gradiente in gradi |
| blurEnabled | boolean | No | Abilita la sfocatura dello sfondo |
| blurIntensity | number | No | Intensità della sfocatura (0-100) |
| shadowEnabled | boolean | No | Abilita l'ombra esterna |
| shadowOpacity | number | No | Opacità dell'ombra (0-100) |
| outputFormat | string | No | `png`, `webp`, o `avif` |
### Example Request {#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"}'
```
### Response (200 OK) {#response-200-ok}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/{jobId}/photo_nobg.png",
"processedSize": 195000
}
```
## Notes {#notes}
- Richiede l'installazione del bundle del modello `background-removal` (4-5 GB).
- La Fase 1 memorizza in cache la maschera trasparente e l'immagine originale, così la Fase 2 (effetti) può riapplicare istantaneamente sfondi diversi senza rieseguire il modello AI.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
- La rotazione EXIF viene corretta automaticamente prima dell'elaborazione.
+62
View File
@@ -0,0 +1,62 @@
---
description: "Sostituisci un colore specifico in un'immagine con un altro colore o rendilo trasparente."
i18n_source_hash: df55ac451ecb
i18n_provenance: human
i18n_output_hash: 79e69513b3f6
---
# Replace & Invert Color {#replace-invert-color}
Sostituisci i pixel che corrispondono a un colore di origine con un colore di destinazione, oppure rendili trasparenti. Usa la distanza euclidea nello spazio RGB con tolleranza configurabile per una fusione fluida ai confini dei colori.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/replace-color`
Accetta dati form multipart con un file immagine e un campo JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| sourceColor | string | No | `"#FF0000"` | Colore esadecimale da cercare (formato: `#RRGGBB`) |
| targetColor | string | No | `"#00FF00"` | Colore esadecimale con cui sostituire (formato: `#RRGGBB`) |
| makeTransparent | boolean | No | `false` | Rendi trasparenti i pixel corrispondenti invece di sostituirli con il colore di destinazione |
| tolerance | number | No | `30` | Tolleranza di corrispondenza dei colori (da 0 a 255). Valori più alti fanno corrispondere una gamma più ampia di colori simili |
## Example Request {#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}'
```
Rendi trasparente uno sfondo verde:
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/replace-color \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@greenscreen.png" \
-F 'settings={"sourceColor": "#00FF00", "makeTransparent": true, "tolerance": 50}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.png",
"originalSize": 2450000,
"processedSize": 2100000
}
```
## Notes {#notes}
- La corrispondenza dei colori usa la distanza euclidea nello spazio RGB, scalata da `tolerance * sqrt(3)`.
- La fusione della sostituzione è proporzionale alla distanza dei colori: i pixel più vicini al colore di origine ricevono più colore di destinazione, creando transizioni fluide.
- Quando `makeTransparent` è `true`, l'output viene forzato a PNG (o WebP/AVIF) se il formato di input non supporta i canali alfa (ad es. JPEG).
- Una tolleranza di 0 fa corrispondere solo il colore di origine esatto. Valori più alti (50+) faranno corrispondere una gamma più ampia di tonalità simili.
- Il formato di output corrisponde al formato di input a meno che non sia necessaria la trasparenza e il formato di input non supporti il canale alfa.
+72
View File
@@ -0,0 +1,72 @@
---
description: "Ridimensiona le immagini per pixel, percentuale o con modalità di adattamento."
i18n_source_hash: 00d1bffa4d38
i18n_provenance: human
i18n_output_hash: ebde5f2f8019
---
# Resize {#resize}
Ridimensiona le immagini specificando dimensioni esatte in pixel, un fattore di scala percentuale o una modalità di adattamento che controlla come l'immagine si adatta alle dimensioni target.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/resize`
Accetta dati form multipart con un file immagine e un campo JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| width | integer | No | - | Larghezza target in pixel (max 16383) |
| height | integer | No | - | Altezza target in pixel (max 16383) |
| fit | string | No | `"contain"` | Come l'immagine si adatta alle dimensioni: `contain`, `cover`, `fill`, `inside`, `outside` |
| withoutEnlargement | boolean | No | `false` | Impedisci l'ingrandimento se l'immagine è più piccola del target |
| percentage | number | No | - | Scala per percentuale (ad es. 50 per la metà della dimensione) |
Deve essere fornito almeno uno tra `width`, `height` o `percentage`.
### Fit Modes {#fit-modes}
- **contain** - Ridimensiona per rientrare nelle dimensioni, preservando il rapporto d'aspetto (può lasciare spazio vuoto)
- **cover** - Ridimensiona per coprire le dimensioni, preservando il rapporto d'aspetto (può ritagliare)
- **fill** - Deforma per corrispondere esattamente alle dimensioni (ignora il rapporto d'aspetto)
- **inside** - Come `contain`, ma riduce soltanto, non ingrandisce mai
- **outside** - Come `cover`, ma riduce soltanto, non ingrandisce mai
## Example Request {#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"}'
```
Ridimensiona per percentuale:
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/resize \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@photo.jpg" \
-F 'settings={"percentage": 50}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 980000
}
```
## Notes {#notes}
- La dimensione massima è 16383 pixel su entrambi gli assi (limite di Sharp/libvips).
- Il formato di output corrisponde al formato di input. Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
- L'orientamento EXIF viene applicato automaticamente prima del ridimensionamento.
- Il flag `withoutEnlargement` è utile per l'elaborazione in batch dove alcune immagini potrebbero già essere più piccole del target.
+96
View File
@@ -0,0 +1,96 @@
---
description: "Ripara graffi, strappi e danni sulle vecchie foto con una pipeline AI per restauro, miglioramento dei volti e colore."
i18n_source_hash: 3de13284216c
i18n_provenance: human
i18n_output_hash: e8d0a6e10925
---
# Photo Restoration {#photo-restoration}
Ripara graffi, strappi e danni sulle vecchie foto usando una pipeline AI multi-passaggio. Combina riparazione dei graffi, miglioramento dei volti, riduzione del rumore e colorizzazione opzionale.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/restore-photo`
**Elaborazione:** Asincrona (restituisce 202, esegui il polling su `/api/v1/jobs/{jobId}/progress` per lo stato tramite SSE)
**Bundle del modello:** `photo-restoration` (4-5 GB)
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| file | file | Yes | - | File immagine (multipart) |
| scratchRemoval | boolean | No | `true` | Rimuovi graffi e danni superficiali |
| faceEnhancement | boolean | No | `true` | Migliora i volti nella foto restaurata |
| fidelity | number | No | `0.7` | Fedeltà del miglioramento dei volti (0-1). Valori più alti preservano di più le caratteristiche originali |
| denoise | boolean | No | `true` | Applica la riduzione del rumore al risultato restaurato |
| denoiseStrength | number | No | `25` | Intensità della riduzione del rumore (0-100) |
| colorize | boolean | No | `false` | Colorizza la foto restaurata (per immagini in scala di grigi) |
| colorizeStrength | number | No | `85` | Intensità della colorizzazione (0-100) |
## Example Request {#example-request}
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/restore-photo \
-F "file=@damaged-old-photo.jpg" \
-F 'settings={"scratchRemoval":true,"faceEnhancement":true,"fidelity":0.6,"colorize":true}'
```
## Response {#response}
### Initial Response (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Progress (SSE at `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Removing scratches...","percent":30}
```
```
event: progress
data: {"phase":"processing","stage":"Enhancing faces...","percent":60}
```
### Final Result (via SSE) {#final-result-via-sse}
```json
{
"phase": "complete",
"percent": 100,
"result": {
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/{jobId}/damaged-old-photo_restored.jpg",
"previewUrl": "/api/v1/download/{jobId}/preview.webp",
"originalSize": 200000,
"processedSize": 350000,
"width": 1200,
"height": 900,
"steps": ["scratch_removal", "face_enhancement", "denoise", "colorize"],
"scratchCoverage": 12.5,
"facesEnhanced": 2,
"isGrayscale": true,
"colorized": true
}
}
```
## Notes {#notes}
- Richiede l'installazione del bundle del modello `photo-restoration` (4-5 GB).
- La pipeline esegue più passaggi AI in sequenza: riparazione dei graffi, miglioramento dei volti (GFPGAN), riduzione del rumore e facoltativamente colorizzazione.
- L'array `steps` nel risultato mostra quali passaggi di elaborazione sono stati effettivamente eseguiti.
- `scratchCoverage` è una percentuale stimata dell'area dell'immagine che presentava danni da graffi.
- `fidelity` controlla quanto fortemente vengono migliorati i volti rispetto alla conservazione dell'aspetto originale. Valori più bassi producono un miglioramento più aggressivo; valori più alti sono più conservativi.
- L'opzione `colorize` rileva automaticamente se l'immagine è in scala di grigi. Il flag `isGrayscale` nel risultato conferma questo rilevamento.
- Il formato di output corrisponde automaticamente al formato di input.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR, HDR e AVIF tramite decodifica automatica.
+71
View File
@@ -0,0 +1,71 @@
---
description: "Ruota le immagini di qualsiasi angolo e capovolgile orizzontalmente o verticalmente."
i18n_source_hash: af2581d7cd8d
i18n_provenance: human
i18n_output_hash: caf0161dab05
---
# Rotate & Flip {#rotate-flip}
Ruota le immagini di un angolo arbitrario e/o capovolgile orizzontalmente o verticalmente. Le operazioni di rotazione e capovolgimento possono essere combinate in un'unica richiesta.
## API Endpoint {#api-endpoint}
`POST /api/v1/tools/image/rotate`
Accetta dati form multipart con un file immagine e un campo JSON `settings`.
## Parameters {#parameters}
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| angle | number | No | `0` | Angolo di rotazione in gradi (in senso orario). Accetta qualsiasi valore numerico. |
| horizontal | boolean | No | `false` | Capovolgi l'immagine orizzontalmente (specchio) |
| vertical | boolean | No | `false` | Capovolgi l'immagine verticalmente |
## Example Request {#example-request}
Ruota di 90 gradi in senso orario:
```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}'
```
Capovolgi orizzontalmente:
```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}'
```
Ruota e capovolgi insieme:
```bash
curl -X POST http://localhost:1349/api/v1/tools/image/rotate \
-H "Authorization: Bearer si_your-api-key" \
-F "file=@photo.jpg" \
-F 'settings={"angle": 45, "vertical": true}'
```
## Example Response {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2480000
}
```
## Notes {#notes}
- La rotazione viene applicata per prima, poi le operazioni di capovolgimento.
- Le rotazioni non a 90 gradi (ad es. 45 gradi) ingrandiscono la tela per adattarsi all'immagine ruotata, con riempimento trasparente o nero a seconda del formato di output.
- Valori comuni: 90, 180, 270 per rotazioni di un quarto di giro.
- L'orientamento EXIF viene applicato automaticamente prima dell'elaborazione, quindi la rotazione è relativa all'orientamento visivo.
+71
View File
@@ -0,0 +1,71 @@
---
description: "Aumenta la nitidezza delle immagini con metodi adattivo, maschera di contrasto o passa-alto, con riduzione del rumore opzionale."
i18n_source_hash: ccb60af9faae
i18n_provenance: human
i18n_output_hash: 6d9118872bed
---
# Nitidezza {#sharpening}
Strumento avanzato per la nitidezza con tre metodi: adattivo (intelligente, sensibile ai bordi), maschera di contrasto (raggio/quantità classici) e passa-alto (enfasi sulla texture). Include una riduzione del rumore integrata per prevenire artefatti dovuti alla nitidezza.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/sharpening`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| method | string | No | `"adaptive"` | Algoritmo di nitidezza: `adaptive`, `unsharp-mask`, `high-pass` |
| sigma | number | No | `1.0` | Adattivo: sigma gaussiana (da 0.5 a 10) |
| m1 | number | No | `1.0` | Adattivo: nitidezza delle aree piatte (da 0 a 10) |
| m2 | number | No | `3.0` | Adattivo: nitidezza delle aree frastagliate (da 0 a 20) |
| x1 | number | No | `2.0` | Adattivo: soglia piatto/frastagliato (da 0 a 10) |
| y2 | number | No | `12` | Adattivo: nitidezza massima delle aree piatte (da 0 a 50) |
| y3 | number | No | `20` | Adattivo: nitidezza massima delle aree frastagliate (da 0 a 50) |
| amount | number | No | `100` | Maschera di contrasto: quantità di nitidezza (da 0 a 1000) |
| radius | number | No | `1.0` | Maschera di contrasto: raggio di sfocatura in pixel (da 0.1 a 5) |
| threshold | number | No | `0` | Maschera di contrasto: differenza minima di luminosità per applicare la nitidezza (da 0 a 255) |
| strength | number | No | `50` | Passa-alto: intensità del filtro (da 0 a 100) |
| kernelSize | number | No | `3` | Passa-alto: dimensione del kernel di convoluzione (3 o 5) |
| denoise | string | No | `"off"` | Riduzione del rumore prima della nitidezza: `off`, `light`, `medium`, `strong` |
## Esempio di richiesta {#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}'
```
Maschera di contrasto con soglia per proteggere le aree uniformi:
```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}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2510000
}
```
## Note {#notes}
- Vengono usati solo i parametri pertinenti al metodo scelto. Per esempio, `amount`, `radius` e `threshold` vengono ignorati quando `method` è `adaptive`.
- Il metodo adattivo usa la nitidezza adattiva integrata di Sharp con comportamento configurabile per le aree piatte/frastagliate.
- L'opzione `denoise` applica la riduzione del rumore prima della nitidezza per evitare l'amplificazione di rumore/grana.
- La nitidezza passa-alto estrae i dettagli fini sottraendo una versione sfocata dall'originale, per poi riunire il risultato.
- Il formato di output corrisponde al formato di input. Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
+96
View File
@@ -0,0 +1,96 @@
---
description: "Ritaglio intelligente basato su soggetto, volti ed entropia che inquadra le immagini in modo intelligente usando Sharp e il rilevamento dei volti con IA."
i18n_source_hash: acbe1439c6d8
i18n_provenance: human
i18n_output_hash: f83f7a8ae90e
---
# Ritaglio intelligente {#smart-crop}
Ritaglio intelligente basato su soggetto, volti o rifilatura. Usa le strategie attention/entropy di Sharp e il rilevamento dei volti con IA per un'inquadratura intelligente.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/smart-crop`
**Elaborazione:** Asincrona (restituisce 202, interroga `/api/v1/jobs/{jobId}/progress` per lo stato tramite SSE)
**Bundle del modello:** `face-detection` (200-300 MB) - richiesto solo per la modalità `face`
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| file | file | Sì | - | File immagine (multipart) |
| mode | string | No | `"subject"` | Modalità di ritaglio: `subject`, `face`, `trim`. (I valori legacy `attention` e `content` corrispondono a `subject` e `trim`) |
| strategy | string | No | `"attention"` | Strategia per la modalità soggetto: `attention` o `entropy` |
| width | integer | No | - | Larghezza target in pixel |
| height | integer | No | - | Altezza target in pixel |
| padding | integer | No | `0` | Percentuale di margine attorno al soggetto (0-50) |
| facePreset | string | No | `"head-shoulders"` | Preset di inquadratura del volto: `closeup`, `head-shoulders`, `upper-body`, `half-body` |
| sensitivity | number | No | `0.5` | Sensibilità del rilevamento dei volti (0-1) |
| threshold | integer | No | `30` | Soglia della modalità rifilatura per il rilevamento dello sfondo (0-255) |
| padToSquare | boolean | No | `false` | Aggiunge margine al risultato rifilato per renderlo quadrato |
| padColor | string | No | `"#ffffff"` | Colore di sfondo per il margine |
| targetSize | integer | No | - | Dimensione target per l'output con margine (pixel) |
| quality | integer | No | - | Qualità dell'output (1-100) |
## Esempio di richiesta {#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"}'
```
## Risposta {#response}
### Risposta iniziale (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Avanzamento (SSE su `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","percent":50}
```
### Risultato finale (tramite 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
}
}
```
## Modalità {#modes}
### Modalità soggetto {#subject-mode}
Usa la strategia attention o entropy di Sharp per individuare la regione visivamente più interessante e ritaglia attorno ad essa.
### Modalità volto {#face-mode}
Rileva i volti con l'IA, poi inquadra il ritaglio attorno ai volti rilevati usando il `facePreset` specificato. Se non viene rilevato alcun volto, ripiega sulla modalità soggetto (strategia attention).
### Modalità rifilatura {#trim-mode}
Rimuove i bordi/lo sfondo uniformi dall'immagine. Facoltativamente aggiunge un margine al risultato per renderlo quadrato con un colore di sfondo e una dimensione target specificati.
## Note {#notes}
- Questo strumento usa la factory `createToolRoute` con `executionHint: "long"`, quindi restituisce 202 con avanzamento tramite SSE.
- La modalità volto richiede il bundle del modello `face-detection` (200-300 MB).
- Le modalità soggetto e rifilatura funzionano senza alcun bundle di modello IA.
- Il `facePreset` determina quanto strettamente il ritaglio inquadra i volti rilevati: `closeup` è il più stretto, `half-body` è il più ampio.
- Se non vengono specificate larghezza/altezza, il valore predefinito è 1080x1080.
+49
View File
@@ -0,0 +1,49 @@
---
description: "Divide un'immagine in tessere a griglia per righe e colonne o per dimensione in pixel, restituite come archivio ZIP."
i18n_source_hash: 57a2e11e7cce
i18n_provenance: human
i18n_output_hash: 1f01741aaff9
---
# Divisione immagine {#image-splitting}
Divide una singola immagine in tessere a griglia per numero di colonne/righe o per dimensioni specifiche in pixel. Restituisce un archivio ZIP contenente tutte le tessere.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/split`
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| columns | integer | No | 3 | Numero di colonne in cui dividere (da 1 a 100) |
| rows | integer | No | 3 | Numero di righe in cui dividere (da 1 a 100) |
| tileWidth | integer | No | - | Larghezza della tessera in pixel (min 10). Sovrascrive `columns` quando sono impostati sia `tileWidth` sia `tileHeight`. |
| tileHeight | integer | No | - | Altezza della tessera in pixel (min 10). Sovrascrive `rows` quando sono impostati sia `tileWidth` sia `tileHeight`. |
| outputFormat | string | No | `"original"` | Formato di output per le tessere: `original`, `png`, `jpg`, `webp`, `avif`, `jxl` |
| quality | number | No | 90 | Qualità dell'output per i formati con perdita (da 1 a 100) |
## Esempio di richiesta {#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
```
## Esempio di risposta {#example-response}
La risposta viene trasmessa direttamente come file ZIP con `Content-Type: application/zip`. Il nome del file segue lo schema `split-<jobId>.zip`.
Ogni tessera all'interno dello ZIP è denominata `<originalBaseName>_r<row>_c<col>.<ext>` (ad esempio `photo_r1_c1.png`, `photo_r2_c3.webp`).
## Note {#notes}
- Accetta un singolo file immagine.
- Supporta i formati di input HEIC, RAW, PSD e SVG (decodificati automaticamente).
- Quando vengono forniti sia `tileWidth` sia `tileHeight`, hanno la priorità su `columns`/`rows`. Le dimensioni della griglia vengono calcolate come `ceil(imageWidth / tileWidth)` e `ceil(imageHeight / tileHeight)`.
- Le tessere di bordo (colonna più a destra, riga inferiore) possono essere più piccole della dimensione specificata se le dimensioni dell'immagine non sono divisibili in modo uniforme.
- La dimensione massima della griglia è limitata a 100x100 (10.000 tessere).
- La risposta trasmette lo ZIP direttamente, quindi non c'è un corpo di risposta JSON. Usa `--output` con curl per salvare il file.
+69
View File
@@ -0,0 +1,69 @@
---
description: "Combina più immagini in un'unica griglia sprite sheet con metadati per fotogramma."
i18n_source_hash: 1938d7fb100d
i18n_provenance: human
i18n_output_hash: 2a9d044ac3b7
---
# Sprite Sheet {#sprite-sheet}
Combina più immagini in un'unica griglia sprite sheet. Ogni immagine viene ridimensionata per corrispondere alle dimensioni della prima immagine e posizionata nella griglia. Restituisce l'immagine sprite sheet insieme ai metadati di coordinate per fotogramma.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/sprite-sheet`
Accetta dati di form multipart con due o più file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| columns | integer | No | `4` | Numero di colonne nella griglia (1-16) |
| padding | integer | No | `0` | Margine tra le celle in pixel (0-64) |
| background | string | No | `"#ffffff"` | Colore di sfondo esadecimale |
| format | string | No | `"png"` | Formato di output: `png`, `webp` o `jpeg` |
| quality | integer | No | `90` | Qualità dell'output (1-100) |
## Esempio di richiesta {#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"}'
```
## Esempio di risposta {#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
}
```
## Note {#notes}
- Accetta da 2 a 64 immagini. Tutte le immagini vengono ridimensionate per corrispondere alle dimensioni della prima immagine caricata.
- L'array `frames` fornisce le coordinate esatte in pixel di ciascun fotogramma nell'output, adatte per definizioni di sprite CSS o mappe di fotogrammi di motori di gioco.
- Il numero di righe viene calcolato automaticamente in base al numero di immagini e al valore `columns`.
- Usa il parametro `padding` per aggiungere spaziatura tra le celle. Il colore `background` è visibile nelle aree di margine e in qualsiasi cella finale vuota.
- Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
+63
View File
@@ -0,0 +1,63 @@
---
description: "Unisce le immagini affiancate, impilate o in griglia con controllo su allineamento, spazi, bordi e modalità di ridimensionamento."
i18n_source_hash: 39333210505a
i18n_provenance: human
i18n_output_hash: bf3eaa505310
---
# Unisci / Combina {#stitch-combine}
Unisce più immagini affiancate, impilate verticalmente o disposte in una griglia. Supporta allineamento, spazio, bordo, raggio degli angoli e diverse modalità di ridimensionamento.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/stitch`
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| direction | string | No | `"horizontal"` | Direzione del layout: `horizontal`, `vertical`, `grid` |
| gridColumns | integer | No | 2 | Numero di colonne quando la direzione è `grid` (da 2 a 100) |
| resizeMode | string | No | `"fit"` | Come vengono ridimensionate le immagini: `fit`, `original`, `stretch`, `crop` |
| alignment | string | No | `"center"` | Allineamento trasversale: `start`, `center`, `end` |
| gap | number | No | 0 | Spazio tra le immagini in pixel (da 0 a 1000) |
| border | number | No | 0 | Larghezza del bordo esterno in pixel (da 0 a 500) |
| cornerRadius | number | No | 0 | Raggio degli angoli applicato all'output finale (da 0 a 500) |
| backgroundColor | string | No | `"#FFFFFF"` | Colore di sfondo/bordo in esadecimale (ad esempio `#FF0000`) |
| format | string | No | `"png"` | Formato di output: `png`, `jpeg`, `webp`, `avif`, `jxl` |
| quality | number | No | 90 | Qualità dell'output (da 1 a 100) |
## Esempio di richiesta {#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"}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/stitch.png",
"originalSize": 1234567,
"processedSize": 987654
}
```
## Note {#notes}
- Richiede almeno 2 immagini. Carica più file immagine nella richiesta multipart.
- Supporta i formati di input HEIC, RAW, PSD e SVG (decodificati automaticamente).
- Modalità di ridimensionamento:
- `fit` - Scala le immagini per corrispondere alla dimensione minima lungo l'asse di unione.
- `original` - Mantiene le dimensioni originali (può produrre bordi irregolari).
- `stretch` - Forza le immagini a corrispondere alla dimensione minima senza preservare le proporzioni.
- `crop` - Ritaglia le immagini con copertura per corrispondere alla dimensione minima.
- In modalità `grid`, le celle vengono dimensionate secondo le dimensioni mediane di tutte le immagini.
- Il `cornerRadius` viene applicato all'intero output finale, non alle singole immagini.
- La dimensione della tela è limitata dalla configurazione del server `MAX_CANVAS_PIXELS` per evitare l'esaurimento della memoria.
+113
View File
@@ -0,0 +1,113 @@
---
description: "Rimuove i metadati EXIF, GPS, ICC e XMP dalle immagini per privacy e file di dimensioni più ridotte."
i18n_source_hash: e89147734fd0
i18n_provenance: human
i18n_output_hash: 5276921c50db
---
# Rimuovi metadati {#remove-metadata}
Rimuove i metadati EXIF, GPS, i profili colore ICC e i metadati XMP dalle immagini. Utile per la privacy (rimozione di coordinate GPS, informazioni sulla fotocamera) e per ridurre le dimensioni del file.
## Endpoint API {#api-endpoints}
### Rimuovi metadati {#strip-metadata}
`POST /api/v1/tools/image/strip-metadata`
Elabora l'immagine e restituisce una versione ripulita con i metadati selezionati rimossi.
### Ispeziona metadati {#inspect-metadata}
`POST /api/v1/tools/image/strip-metadata/inspect`
Restituisce i metadati analizzati come JSON senza modificare l'immagine. Utile per visualizzare in anteprima quali metadati esistono prima della rimozione.
## Parametri (Rimozione) {#parameters-strip}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| stripExif | boolean | No | `false` | Rimuove i dati EXIF (impostazioni della fotocamera, date, ecc.) |
| stripGps | boolean | No | `false` | Rimuove solo i dati GPS/di posizione |
| stripIcc | boolean | No | `false` | Rimuove il profilo colore ICC |
| stripXmp | boolean | No | `false` | Rimuove i metadati XMP (Adobe, IPTC) |
| stripAll | boolean | No | `true` | Rimuove tutti i metadati in una volta |
Quando `stripAll` è `true`, sovrascrive i singoli flag e rimuove tutto.
## Esempio di richiesta {#example-request}
Rimuovi tutti i metadati:
```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}'
```
Rimuovi solo i dati GPS (mantieni informazioni sulla fotocamera e profilo colore):
```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}'
```
Ispeziona i metadati senza modificare:
```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"
```
## Esempio di risposta (Rimozione) {#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
}
```
## Esempio di risposta (Ispezione) {#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"
}
}
```
## Note {#notes}
- L'immagine viene ricodificata nel suo formato originale dopo la rimozione. JPEG usa mozjpeg alla qualità 90, PNG usa il livello di compressione 9, WebP usa la qualità 85.
- La rimozione dei profili ICC può causare lievi variazioni di colore se l'immagine era contrassegnata con un profilo non sRGB. Usa `stripIcc: false` se la precisione del colore è importante.
- L'endpoint di ispezione analizza le coordinate GPS in valori decimali di latitudine/longitudine (con prefisso underscore) per comodità.
- Formati di input supportati: JPEG, PNG, WebP, AVIF, TIFF, GIF.
+85
View File
@@ -0,0 +1,85 @@
---
description: "Converte i file SVG in PNG, JPEG, WebP, AVIF, TIFF, GIF, HEIF o JXL a risoluzione e DPI personalizzati, con supporto batch."
i18n_source_hash: cf36830f8797
i18n_provenance: human
i18n_output_hash: fe5acfd165cb
---
# SVG in raster {#svg-to-raster}
Converte i file SVG in formati immagine raster (PNG, JPEG, WebP, AVIF, TIFF, GIF, HEIF o JXL) a risoluzione e DPI personalizzati. Supporta anche la conversione batch di più SVG.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/svg-to-raster`
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| width | integer | No | - | Larghezza target in pixel (da 1 a 65536). Mantiene le proporzioni se è impostata una sola dimensione. |
| height | integer | No | - | Altezza target in pixel (da 1 a 65536). Mantiene le proporzioni se è impostata una sola dimensione. |
| dpi | integer | No | 300 | DPI di rendering, controlla la densità di rasterizzazione di base (da 36 a 2400) |
| quality | number | No | 90 | Qualità dell'output per i formati con perdita (da 1 a 100) |
| backgroundColor | string | No | `"#00000000"` | Colore di sfondo in esadecimale (6 o 8 caratteri, 8 caratteri include l'alfa) |
| outputFormat | string | No | `"png"` | Formato di output: `png`, `jpg`, `webp`, `avif`, `tiff`, `gif`, `heif`, `jxl` |
## Esempio di richiesta {#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"}'
```
## Esempio di risposta {#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
}
```
## Endpoint batch {#batch-endpoint}
`POST /api/v1/tools/image/svg-to-raster/batch`
Converte più file SVG in un'unica richiesta. Restituisce un archivio ZIP.
### Parametri batch aggiuntivi {#additional-batch-parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| clientJobId | string | No | - | ID processo opzionale fornito dal client per il tracciamento dell'avanzamento (max 128 caratteri) |
### Esempio di richiesta batch {#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}'
```
### Risposta batch {#batch-response}
L'endpoint batch trasmette un file ZIP direttamente con le intestazioni:
- `Content-Type: application/zip`
- `X-Job-Id: <jobId>`
- `X-File-Results: <url-encoded JSON mapping of index to filename>`
## Note {#notes}
- Accetta solo file SVG e SVGZ (verifica il contenuto, non solo l'estensione). I file SVGZ vengono decompressi automaticamente.
- Il contenuto SVG viene sanificato prima del rendering per prevenire XSS e il caricamento di risorse esterne.
- L'impostazione `dpi` controlla la densità con cui l'SVG viene rasterizzato. Un DPI più alto produce dimensioni in pixel maggiori dallo stesso viewport SVG.
- Quando vengono forniti sia `width` sia `height`, l'immagine viene ridimensionata usando `fit: inside` (mantiene le proporzioni entro i limiti).
- Nella risposta è incluso un `previewUrl` per i formati che i browser non possono visualizzare in modo nativo (TIFF, HEIF). L'anteprima è una miniatura WebP di 1200px.
- Lo sfondo `#00000000` predefinito è completamente trasparente. Impostalo su `#FFFFFF` per uno sfondo bianco (utile con l'output JPEG che non supporta la trasparenza).
- L'elaborazione batch rispetta la configurazione del server `MAX_BATCH_SIZE` e usa worker concorrenti per le prestazioni.
- L'avanzamento delle operazioni batch può essere tracciato tramite SSE su `/api/v1/jobs/:jobId/progress`.
+66
View File
@@ -0,0 +1,66 @@
---
description: "Aggiunge sovrapposizioni di testo stilizzate con ombre esterne e riquadri di sfondo."
i18n_source_hash: 9f8e697188fc
i18n_provenance: human
i18n_output_hash: 2b43a5b19484
---
# Sovrapposizione di testo {#text-overlay}
Aggiunge testo stilizzato alle immagini con ombra esterna e riquadro di sfondo semitrasparente opzionali. Adatto per titoli, didascalie o annotazioni sulle foto.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/text-overlay`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| text | string | Sì | - | Testo da sovrapporre (da 1 a 500 caratteri) |
| fontSize | number | No | `48` | Dimensione del carattere in pixel (da 8 a 200) |
| color | string | No | `"#FFFFFF"` | Colore del testo in formato esadecimale (`#RRGGBB`) |
| position | string | No | `"bottom"` | Posizionamento verticale: `top`, `center`, `bottom` |
| backgroundBox | boolean | No | `false` | Mostra un rettangolo di sfondo semitrasparente dietro il testo |
| backgroundColor | string | No | `"#000000"` | Colore del riquadro di sfondo in formato esadecimale (`#RRGGBB`) |
| shadow | boolean | No | `true` | Applica un'ombra esterna dietro il testo |
## Esempio di richiesta {#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}'
```
Con un riquadro di sfondo:
```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"}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2470000
}
```
## Note {#notes}
- Il testo è sempre centrato orizzontalmente all'interno dell'immagine.
- L'ombra esterna usa uno scostamento di 2px con sfocatura di 3px al 70% di opacità nera.
- Il riquadro di sfondo copre l'intera larghezza dell'immagine al 70% di opacità, con altezza proporzionale alla dimensione del carattere (1.8x).
- Il testo viene renderizzato tramite composizione SVG, quindi viene usato il carattere sans-serif predefinito del sistema.
- I caratteri speciali XML nel testo vengono sottoposti a escape in modo sicuro.
- Il formato di output corrisponde al formato di input. Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
@@ -0,0 +1,78 @@
---
description: "Corregge i PNG con falsa trasparenza usando il matting con IA (BiRefNet) per produrre un vero canale alfa, con pulizia dei bordi tramite defringe."
i18n_source_hash: 7eb748b80f93
i18n_provenance: human
i18n_output_hash: b19550da1f33
---
# Correzione trasparenza PNG {#png-transparency-fixer}
Corregge i PNG con falsa trasparenza in un clic. Usa il matting con IA (modello BiRefNet HR Matting) per produrre una vera trasparenza alfa, con post-elaborazione defringe per ripulire i bordi.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/transparency-fixer`
**Elaborazione:** Asincrona (restituisce 202, interroga `/api/v1/jobs/{jobId}/progress` per lo stato tramite SSE)
**Bundle del modello:** `background-removal` (4-5 GB)
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| file | file | Sì | - | File immagine (multipart) |
| defringe | number | No | `30` | Intensità del defringe (0-100). Rimuove i pixel di frangia semitrasparenti attorno ai bordi |
| outputFormat | string | No | `"png"` | Formato di output: `png` o `webp` |
| removeWatermark | boolean | No | `false` | Applica la pre-elaborazione di rimozione della filigrana (filtro mediano) |
## Esempio di richiesta {#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"}'
```
## Risposta {#response}
### Risposta iniziale (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Avanzamento (SSE su `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Processing transparency...","percent":50}
```
### Risultato finale (tramite 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"
}
}
```
## Note {#notes}
- Richiede l'installazione del bundle del modello `background-removal` (4-5 GB).
- Usa `birefnet-hr-matting` come modello principale per un matting alfa di alta qualità. Ripiega su `birefnet-general` se il modello HR esaurisce la memoria.
- L'opzione `defringe` rimuove i pixel di frangia semitrasparenti che il matting con IA a volte lascia attorno a capelli, pelo e bordi fini. Funziona sfocando il canale alfa e azzerando i pixel a bassa confidenza.
- L'opzione `removeWatermark` applica una fase di pre-elaborazione con filtro mediano. È una riduzione di base della filigrana, non uno strumento dedicato alla rimozione della filigrana.
- Produce in output solo PNG o WebP lossless (entrambi supportano la trasparenza alfa).
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
+83
View File
@@ -0,0 +1,83 @@
---
description: "Ingrandisce le immagini da 2x a 4x con la super-risoluzione IA Real-ESRGAN preservando i dettagli fini."
i18n_source_hash: 150032e99476
i18n_provenance: human
i18n_output_hash: d6389ef7853e
---
# Ingrandimento immagine {#image-upscaling}
Miglioramento con super-risoluzione IA usando Real-ESRGAN. Ingrandisce le immagini da 2x a 4x preservando i dettagli.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/upscale`
**Elaborazione:** Asincrona (restituisce 202, interroga `/api/v1/jobs/{jobId}/progress` per lo stato tramite SSE)
**Bundle del modello:** `upscale-enhance` (5-6 GB)
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| file | file | Sì | - | File immagine (multipart) |
| scale | number | No | `2` | Fattore di ingrandimento (ad esempio 2, 3, 4) |
| model | string | No | `"auto"` | Modello da usare (ad esempio `auto`, nomi di modelli specifici) |
| faceEnhance | boolean | No | `false` | Applica il miglioramento dei volti durante l'ingrandimento |
| denoise | number | No | `0` | Intensità di riduzione del rumore (0 = disattivata) |
| format | string | No | `"auto"` | Formato di output: `auto`, `png`, `jpg`, `webp`, `tiff`, `gif`, `avif`, `heic`, `heif`, `jxl` |
| quality | number | No | `95` | Qualità dell'output (1-100) |
## Esempio di richiesta {#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"}'
```
## Risposta {#response}
### Risposta iniziale (202 Accepted) {#initial-response-202-accepted}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"async": true
}
```
### Avanzamento (SSE su `/api/v1/jobs/{jobId}/progress`) {#progress-sse-at-api-v1-jobs-jobid-progress}
```
event: progress
data: {"phase":"processing","stage":"Upscaling...","percent":60}
```
### Risultato finale (tramite 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"
}
}
```
## Note {#notes}
- Richiede l'installazione del bundle del modello `upscale-enhance` (5-6 GB).
- Usa Real-ESRGAN quando disponibile; ripiega sull'interpolazione Lanczos se il modello IA non è disponibile.
- L'opzione `faceEnhance` applica il ripristino dei volti GFPGAN durante l'ingrandimento per una migliore qualità dei volti.
- Per i formati di output non visualizzabili in anteprima dal browser (HEIC, JXL, TIFF), viene generata un'anteprima WebP insieme all'output principale.
- Supporta i formati di input HEIC/HEIF, RAW, TGA, PSD, EXR e HDR tramite decodifica automatica.
+64
View File
@@ -0,0 +1,64 @@
---
description: "Converte le immagini raster in SVG con vettorizzazione in bianco e nero (potrace) e a colori multi-livello."
i18n_source_hash: f3e4777188ad
i18n_provenance: human
i18n_output_hash: e3dbdbed33ea
---
# Immagine in SVG {#image-to-svg}
Vettorizza le immagini raster in SVG usando algoritmi di tracciamento. Supporta il tracciamento in bianco e nero (potrace) e la vettorizzazione a colori multi-livello.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/vectorize`
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| colorMode | string | No | `"bw"` | Modalità di tracciamento: `bw` (bianco e nero) o `color` (livelli multi-colore) |
| threshold | number | No | 128 | Soglia di luminosità per la modalità B&N (da 0 a 255). I pixel al di sotto diventano neri. |
| colorPrecision | number | No | 6 | Precisione della quantizzazione del colore per la modalità a colori (da 1 a 16). Valori più alti producono livelli di colore più distinti. |
| layerDifference | number | No | 6 | Differenza minima di colore tra i livelli in modalità a colori (da 1 a 128) |
| filterSpeckle | number | No | 4 | Area minima per le forme tracciate in pixel (da 1 a 256). Rimuove rumore/macchioline. |
| pathMode | string | No | `"spline"` | Levigatura del tracciato: `none` (frastagliato), `polygon` (segmenti dritti), `spline` (curve morbide) |
| cornerThreshold | number | No | 60 | Soglia di angolo per il rilevamento degli angoli in modalità a colori (da 0 a 180 gradi) |
| invert | boolean | No | `false` | Inverte l'immagine prima del tracciamento (scambia bianco/nero) |
## Esempio di richiesta {#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"}'
```
### Vettorizzazione a colori {#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}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/logo.svg",
"originalSize": 45678,
"processedSize": 12345
}
```
## Note {#notes}
- L'output è sempre un file SVG indipendentemente dal formato di input.
- Supporta i formati di input HEIC, RAW, PSD e SVG (decodificati automaticamente in raster prima del tracciamento).
- La modalità B&N usa l'algoritmo potrace. L'immagine viene prima convertita in scala di grigi, poi soglizzata in bianco/nero puro prima del tracciamento.
- La modalità a colori usa un approccio multi-livello: l'immagine viene quantizzata in livelli di colore, ciascuno tracciato separatamente e impilato nell'output SVG.
- Valori più bassi di `filterSpeckle` preservano più dettagli ma producono file SVG più grandi con più tracciati.
- L'impostazione `pathMode` influisce notevolmente sulla dimensione del file: `none` produce il maggior numero di tracciati, `spline` produce l'output più morbido (e di solito più piccolo).
- Per risultati ottimali con loghi e icone, usa la modalità B&N con un input pulito ad alto contrasto. Per fotografie o illustrazioni, usa la modalità a colori con `colorPrecision` più alta.
+55
View File
@@ -0,0 +1,55 @@
---
description: "Aggiunge un effetto vignettatura con intensità, colore e posizione regolabili."
i18n_source_hash: 0b9795fea2eb
i18n_provenance: human
i18n_output_hash: 2cd9e87de6d2
---
# Vignettatura {#vignette}
Aggiunge un effetto vignettatura che scurisce o tinge i bordi di un'immagine. Supporta intensità, colore, raggio, morbidezza, rotondità e posizione del centro regolabili.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/vignette`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| strength | number | No | `0.5` | Opacità della vignettatura (0.1-1) |
| color | string | No | `"#000000"` | Colore esadecimale della vignettatura |
| radius | integer | No | `70` | Raggio esterno come percentuale della semi-diagonale (0-100) |
| softness | integer | No | `50` | Morbidezza della sfumatura (0-100); valori più alti producono una dissolvenza più graduale |
| roundness | integer | No | `100` | Forma: 100 = cerchio, 0 = ellisse conforme alle proporzioni dell'immagine |
| centerX | integer | No | `50` | Posizione orizzontale del centro in percentuale (0-100) |
| centerY | integer | No | `50` | Posizione verticale del centro in percentuale (0-100) |
## Esempio di richiesta {#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}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2410000
}
```
## Note {#notes}
- Un `radius` più piccolo scurisce una porzione maggiore dell'immagine; un raggio più grande confina la vignettatura ai bordi estremi.
- Usa un `color` non nero (ad esempio toni bianchi o seppia) per effetti di vignettatura creativi.
- Regolare `centerX` e `centerY` ti permette di posizionare l'area libera fuori centro, utile per attirare l'attenzione su un soggetto che non si trova al centro dell'inquadratura.
- Il formato di output corrisponde al formato di input. Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.
@@ -0,0 +1,61 @@
---
description: "Sovrappone un logo o un'immagine come filigrana con posizione, opacità e scala configurabili."
i18n_source_hash: c73ab0ef8ab9
i18n_provenance: human
i18n_output_hash: 136675af1018
---
# Filigrana immagine {#image-watermark}
Sovrappone un logo o un'immagine secondaria come filigrana su un'immagine di base. La filigrana viene scalata in relazione alla larghezza dell'immagine di base e posizionata in un angolo o al centro.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/watermark-image`
Accetta dati di form multipart con **due** file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| position | string | No | `"bottom-right"` | Posizionamento della filigrana: `center`, `top-left`, `top-right`, `bottom-left`, `bottom-right` |
| opacity | number | No | `50` | Percentuale di opacità della filigrana (da 0 a 100) |
| scale | number | No | `25` | Larghezza della filigrana come percentuale della larghezza dell'immagine principale (da 1 a 100) |
### Campi dei file {#file-fields}
| Nome del campo | Obbligatorio | Descrizione |
|------------|----------|-------------|
| file | Sì | L'immagine principale/di base |
| watermark | Sì | L'immagine della filigrana/del logo |
## Esempio di richiesta {#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}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2520000
}
```
## Note {#notes}
- Entrambe le immagini vengono validate e decodificate (HEIC, RAW, PSD, SVG supportati).
- La filigrana viene ridimensionata proporzionalmente in modo che la sua larghezza sia pari al `scale`% della larghezza dell'immagine principale.
- L'opacità viene applicata tramite una maschera alfa composta con fusione `dest-in`.
- Le posizioni agli angoli usano un margine di 20px dal bordo dell'immagine.
- Se l'immagine della filigrana ha trasparenza (ad esempio un logo PNG), questa viene preservata durante la composizione.
- L'orientamento EXIF viene applicato automaticamente su entrambe le immagini prima dell'elaborazione.
@@ -0,0 +1,65 @@
---
description: "Aggiunge filigrane di testo con posizione, opacità, rotazione e ripetizione a mosaico configurabili."
i18n_source_hash: b80f12f410e4
i18n_provenance: human
i18n_output_hash: 543a5613c780
---
# Filigrana di testo {#text-watermark}
Aggiunge una sovrapposizione di filigrana di testo alle immagini. Supporta il posizionamento singolo agli angoli/al centro o la ripetizione a mosaico sull'intera immagine, con dimensione del carattere, colore, opacità e rotazione configurabili.
## Endpoint API {#api-endpoint}
`POST /api/v1/tools/image/watermark-text`
Accetta dati di form multipart con un file immagine e un campo JSON `settings`.
## Parametri {#parameters}
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| text | string | Sì | - | Testo della filigrana (da 1 a 500 caratteri) |
| fontSize | number | No | `48` | Dimensione del carattere in pixel (da 8 a 1000) |
| color | string | No | `"#000000"` | Colore del testo in formato esadecimale (`#RRGGBB`) |
| opacity | number | No | `50` | Percentuale di opacità del testo (da 0 a 100) |
| position | string | No | `"center"` | Posizionamento: `center`, `top-left`, `top-right`, `bottom-left`, `bottom-right`, `tiled` |
| rotation | number | No | `0` | Angolo di rotazione del testo in gradi (da -360 a 360) |
## Esempio di richiesta {#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}'
```
Filigrana a mosaico sull'intera immagine:
```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}'
```
## Esempio di risposta {#example-response}
```json
{
"jobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"downloadUrl": "/api/v1/download/a1b2c3d4-e5f6-7890-abcd-ef1234567890/photo.jpg",
"originalSize": 2450000,
"processedSize": 2480000
}
```
## Note {#notes}
- La filigrana viene renderizzata come testo SVG e composta sull'immagine, preservando la qualità dell'output.
- La modalità a mosaico spazia gli elementi di testo in base alla dimensione del carattere (spaziatura orizzontale 6x, verticale 4x), con un limite massimo di 500 elementi.
- Per le posizioni agli angoli, il margine dal bordo è pari alla dimensione del carattere.
- Il carattere usato è il carattere sans-serif predefinito del sistema.
- I caratteri speciali XML nel testo (`&`, `<`, `>`, `"`, `'`) vengono sottoposti a escape in modo sicuro.
- Il formato di output corrisponde al formato di input. Gli input HEIC, RAW, PSD e SVG vengono decodificati automaticamente prima dell'elaborazione.