---
seo_title: API da PNG a WebP: Converti Immagini PNG in WebP | EnConvert
meta_desc: Converti PNG in WebP con una API REST. POST /v1/convert/png-to-webp preserva il canale alfa e restituisce byte WebP grezzi o un URL presigned a qualità 100.
keywords: convertire png in webp, api png to webp, png to webp rest api, png to webp con trasparenza, png to webp python, png to webp node js, api conversione immagini webp, webp qualità 100 api
---

# API da PNG a WebP

L'API da PNG a WebP converte un'immagine PNG in formato WebP con una singola richiesta a `POST /v1/convert/png-to-webp`. Carica un file `.png` come multipart/form-data e ricevi i byte WebP grezzi in risposta, oppure imposta `direct_download=false` per ottenere metadati JSON con un URL di download presigned. La trasparenza (canale alfa) viene preservata nell'output WebP.

---

## Endpoint

```
POST /v1/convert/png-to-webp
```

**Content-Type:** `multipart/form-data`

**Input accettato:** file `.png`

**Formato di output:** `.webp` (`image/webp`)

---

## Autenticazione

Richiede una chiave API privata oppure un token JWT generato da una chiave pubblica.

```
X-API-Key: sk_your_private_key
```

Oppure:

```
Authorization: Bearer <jwt_token>
```

---

## Parametri della richiesta

| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|-----------|------|----------|---------|-------------|
| `file` | file | Sì | -- | Il file immagine `.png` da convertire. |
| `output_filename` | `string` | No | Nome del file di input | Nome file di output personalizzato. L'estensione `.webp` viene aggiunta automaticamente. |
| `direct_download` | `boolean` | No | `true` | Se `true`, restituisce i byte grezzi dell'immagine. Se `false`, restituisce metadati JSON con un URL di download presigned. |

---

## Dettagli della conversione

- Usa **Pillow** per la conversione diretta del formato
- Se il PNG ha un canale alfa (RGBA), viene **preservato** nell'output WebP
- Le modalità diverse da RGBA/RGB vengono convertite in RGBA
- La qualità di output è impostata al massimo (100)
- WebP supporta sia la compressione lossy che lossless; questa conversione usa qualità 100 per un output quasi senza perdita


---

## Risposta

### Download diretto (`direct_download=true`, predefinito)

```
HTTP 200 OK
Content-Type: image/webp
Content-Disposition: inline; filename="image_20260405_123456789.webp"
```

Restituisce i byte grezzi dell'immagine.

### Risposta con metadati (`direct_download=false`)

```json
{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/png-to-webp/image_20260405_123456789.webp",
    "filename": "image_20260405_123456789.webp",
    "file_size": 45678,
    "conversion_time_seconds": 0.5
}
```

---

## Esempi di codice

### Python

```python
import requests

with open("image.png", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/png-to-webp",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("image.png", f)}
    )

with open("image_20260405_123456789.webp", "wb") as out:
    out.write(response.content)
```

### Node.js

```javascript
const form = new FormData();
form.append("file", fs.createReadStream("image.png"));

const response = await fetch("https://api.enconvert.com/v1/convert/png-to-webp", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

fs.writeFileSync("image_20260405_123456789.webp", Buffer.from(await response.arrayBuffer()));
```

### PHP

```php
$ch = curl_init("https://api.enconvert.com/v1/convert/png-to-webp");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: sk_your_private_key"],
    CURLOPT_POSTFIELDS => ["file" => new CURLFile("image.png")]
]);
$output = curl_exec($ch);
curl_close($ch);
file_put_contents("image_20260405_123456789.webp", $output);
```

### Go

```go
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "image.png")
file, _ := os.Open("image.png")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/png-to-webp", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_your_private_key")
resp, _ := http.DefaultClient.Do(req)
```

---

## Risposte di errore

| Stato | Condizione |
|--------|-----------|
| `400 Bad Request` | Il file non è un file `.png` |
| `400 Bad Request` | Conversione dell'immagine non riuscita (file corrotto o non supportato) |
| `401 Unauthorized` | Chiave API / token JWT mancante o non valido |
| `402 Payment Required` | Quota mensile di ops esaurita |
| `402 Payment Required` | Limite di storage raggiunto |
| `413 Payload Too Large` | Il file supera la dimensione massima prevista dal piano |

---

## Limiti

| Limite | Valore |
|-------|-------|
| Dimensione massima del file | Dipende dal piano (Founding: 5 MB) |
| Qualità di output | Massima (non configurabile) |
| Conversioni mensili | Dipende dal piano |

---

## Domande frequenti

### Come converto PNG in WebP con una API REST?

Invia una richiesta `POST` a `/v1/convert/png-to-webp` con il tuo file `.png` in un body `multipart/form-data`, autenticandoti tramite `X-API-Key` o un token JWT `Authorization: Bearer`. Per impostazione predefinita il WebP convertito viene restituito come byte grezzi dell'immagine.

### La trasparenza del PNG viene preservata quando converto in WebP?

Sì. Se il PNG ha un canale alfa (RGBA), viene preservato nell'output WebP; le modalità diverse da RGBA/RGB vengono prima convertite in RGBA.

### L'output WebP è lossy o lossless?

WebP supporta sia la compressione lossy che lossless; questa conversione usa qualità 100 per un output quasi senza perdita. L'impostazione della qualità non è configurabile.

### Posso ottenere un URL di download invece dei byte WebP grezzi?

Sì. Imposta `direct_download=false` e l'API restituisce metadati JSON con `presigned_url`, `filename`, `file_size` e `conversion_time_seconds`.

### Qual è la dimensione massima del file PNG che posso caricare?

La dimensione massima del file dipende dal piano (5 MB nel piano Founding). I file più grandi vengono rifiutati con `413 Payload Too Large`.
