---
seo_title: API HEIC vers PNG : Convertir HEIC/HEIF en PNG | EnConvert
meta_desc: Convertissez HEIC en PNG via une API REST. POST /v1/convert/heic-to-png accepte les fichiers .heic ou .heif et renvoie un PNG sans perte, en octets ou via URL.
keywords: api heic vers png, convertir heic en png api, api heif vers png, api rest heic vers png, heic vers png python, heic vers png node js, api décodage heic, conversion heic png sans perte
---

# API HEIC vers PNG

L'API HEIC vers PNG convertit une image HEIC/HEIF au format PNG en une seule requête vers `POST /v1/convert/heic-to-png`. Envoyez un fichier `.heic` ou `.heif` en multipart/form-data et recevez un PNG sans perte, avec une fidélité chromatique complète, sous forme d'octets bruts, ou définissez `direct_download=false` pour obtenir des métadonnées JSON avec une URL de téléchargement présignée.

---

## Point de terminaison

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

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

**Entrée acceptée :** fichiers `.heic or .heif`

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

---

## 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 `.heic or .heif` à convertir. |
| `output_filename` | `string` | Non | Nom du fichier d'entrée | Nom de fichier de sortie personnalisé. L'extension `.png` 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-heif** pour le décodage HEIC et **Pillow** pour l'encodage PNG
- Les données chromatiques sont préservées sans perte dans le PNG produit
- Les modes colorimétriques autres que RGBA/RGB sont convertis en RGBA
- Le PNG produit utilise une compression sans perte

---

## Réponse

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

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

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}/heic-to-png/photo_20260405_123456789.png",
    "filename": "photo_20260405_123456789.png",
    "file_size": 45678,
    "conversion_time_seconds": 0.5
}
```

---

## Exemples de code

### Python

```python
import requests

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

with open("photo_20260405_123456789.png", "wb") as out:
    out.write(response.content)
```

### Node.js

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

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

fs.writeFileSync("photo_20260405_123456789.png", Buffer.from(await response.arrayBuffer()));
```

### PHP

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

### Go

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

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/heic-to-png", 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 `.heic or .heif` |
| `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 HEIC en PNG avec une API REST ?

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

### La conversion de HEIC en PNG est-elle sans perte ?

Oui. Les données chromatiques sont préservées sans perte et le PNG produit utilise une compression sans perte. Le décodage utilise pillow-heif et l'encodage utilise Pillow.

### L'API accepte-t-elle les fichiers HEIF en plus du HEIC ?

Oui. Ce point de terminaison accepte à la fois les fichiers `.heic` et `.heif` ; tout autre format est rejeté avec `400 Bad Request`.

### Puis-je obtenir une URL de téléchargement au lieu des octets PNG 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`.

### Pourquoi l'API renvoie-t-elle 402 Payment Required ?

Une réponse `402 Payment Required` signifie que le quota mensuel d'ops ou la limite de stockage de votre forfait a été atteint.
