---
seo_title: API PNG vers WebP : Convertir des images en WebP | EnConvert
meta_desc: Convertissez PNG en WebP via une API REST. POST /v1/convert/png-to-webp préserve le canal alpha et renvoie des octets WebP ou une URL présignée en qualité 100.
keywords: api png vers webp, convertir png en webp api, api rest png vers webp, png vers webp avec transparence, png vers webp python, png vers webp node js, api conversion image webp, qualité webp 100 api
---

# API PNG vers WebP

L'API PNG vers WebP convertit une image PNG au format WebP en une seule requête vers `POST /v1/convert/png-to-webp`. Envoyez un fichier `.png` en multipart/form-data et recevez les octets WebP bruts en retour, ou définissez `direct_download=false` pour obtenir des métadonnées JSON avec une URL de téléchargement présignée. La transparence (canal alpha) est préservée dans la sortie WebP.

---

## Point de terminaison

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

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

**Entrée acceptée :** fichiers `.png`

**Format de sortie :** `.webp` (`image/webp`)

---

## Authentification

Nécessite soit une clé API privée, soit un jeton JWT issu d'une clé publique.

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

Ou :

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

---

## Paramètres de la requête

| Paramètre | Type | Requis | Par défaut | Description |
|-----------|------|----------|---------|-------------|
| `file` | file | Oui | -- | Le fichier image `.png` à convertir. |
| `output_filename` | `string` | Non | Nom du fichier d'entrée | Nom de fichier de sortie personnalisé. L'extension `.webp` est ajoutée automatiquement. |
| `direct_download` | `boolean` | Non | `true` | Lorsque la valeur est `true`, renvoie les octets bruts de l'image. Lorsqu'elle est `false`, renvoie des métadonnées JSON avec une URL de téléchargement présignée. |

---

## Détails de la conversion

- Utilise **Pillow** pour la conversion directe de format
- Si le PNG possède un canal alpha (RGBA), il est **préservé** dans la sortie WebP
- Les modes autres que RGBA/RGB sont convertis en RGBA
- La qualité de sortie est réglée au maximum (100)
- WebP prend en charge la compression avec et sans perte ; cette conversion utilise la qualité 100 pour une sortie quasi sans perte

---

## Réponse

### Téléchargement direct (`direct_download=true`, par défaut)

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

Renvoie les octets bruts de l'image.

### Réponse de métadonnées (`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
}
```

---

## Exemples de code

### 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)
```

---

## Réponses d'erreur

| Statut | Condition |
|--------|-----------|
| `400 Bad Request` | Le fichier n'est pas un fichier `.png` |
| `400 Bad Request` | La conversion de l'image a échoué (fichier corrompu ou non pris en charge) |
| `401 Unauthorized` | Clé API / jeton JWT manquant ou invalide |
| `402 Payment Required` | Quota mensuel d'ops épuisé |
| `402 Payment Required` | Limite de stockage atteinte |
| `413 Payload Too Large` | Le fichier dépasse la taille maximale autorisée par le forfait |

---

## Limites

| Limite | Valeur |
|-------|-------|
| Taille maximale de fichier | Selon le forfait (Founding : 5 MB) |
| Qualité de sortie | Maximale (non configurable) |
| Conversions mensuelles | Selon le forfait |

---

## Questions fréquentes

### Comment convertir PNG en WebP avec une API REST ?

Envoyez une requête `POST` à `/v1/convert/png-to-webp` avec votre fichier `.png` dans un corps `multipart/form-data`, authentifiée via `X-API-Key` ou un jeton JWT `Authorization: Bearer`. Le WebP converti est renvoyé par défaut sous forme d'octets bruts.

### La transparence du PNG est-elle préservée lors de la conversion en WebP ?

Oui. Si le PNG possède un canal alpha (RGBA), il est préservé dans la sortie WebP ; les modes autres que RGBA/RGB sont d'abord convertis en RGBA.

### La sortie WebP est-elle avec ou sans perte ?

WebP prend en charge la compression avec et sans perte ; cette conversion utilise la qualité 100 pour une sortie quasi sans perte. Le réglage de qualité n'est pas configurable.

### Puis-je obtenir une URL de téléchargement au lieu des octets WebP bruts ?

Oui. Définissez `direct_download=false` et l'API renvoie des métadonnées JSON avec `presigned_url`, `filename`, `file_size` et `conversion_time_seconds`.

### Quelle est la taille maximale d'un fichier PNG que je peux envoyer ?

La taille de fichier maximale dépend de votre forfait (5 MB pour le forfait Founding). Les fichiers plus volumineux sont rejetés avec `413 Payload Too Large`.
