# Conversion d’images

Vectorisez une image en SVG ou exportez en PNG, PDF, TIFF et PPTX, y compris les diagrammes de flux.

Source : https://scifig.ai/fr/docs/api/image-conversions

## Corps JSON

`POST /images/conversions`. Portée requise : `figures:generate`.

| Champ | Type | Obligatoire | Valeur par défaut | Règles |
| --- | --- | --- | --- | --- |
| image | string | oui | — | Un `file_id` de PNG ou JPEG ou le résultat SVG d’un diagramme de flux, jusqu’à 20 MB ; `svg` accepte aussi WebP |
| format | string | oui | — | `svg`, `png`, `pdf`, `tiff` ou `pptx` |
| vector_mode | string | non | `editable_text` | Uniquement pour `svg` : `editable_text` ou `full_vector` |
| dpi | integer | non | 300 | Pas pour `svg` : 300, 600 ou 1000 |
| width | integer | non | 2048 | Uniquement pour les sources SVG de diagrammes de flux : grand côté en pixels, 256–4096, au plus 4,194,304 pixels au total |

## Vectorisation SVG

- Coûte 150 crédits et exige une offre payante ; utilise le même outil de vectorisation que la modification dans le canevas du site. La source est une image PNG, JPEG ou WebP.
- `editable_text` conserve le texte sous forme de texte SVG modifiable ; `full_vector` trace tous les éléments, texte compris, sous forme de chemins.
- La vectorisation s’exécute comme une tâche. Les crédits ne sont réservés qu’une fois l’exécution acceptée, et les `credits` de la tâche sont relus dans le registre comptable. Une vectorisation échouée est remboursée et renvoie `TASK_FAILED` pour cette clé.
- Convertir une image déjà vectorisée renvoie le SVG précédent, sans frais pour cette tâche.
- Si l’outil de vectorisation est temporairement indisponible avant le démarrage, la réponse est `503 SERVICE_UNAVAILABLE` avec `Retry-After` : réessayez avec la même clé.

## PNG, PDF, TIFF et PPTX

- Gratuit, jusqu’à 200 conversions par compte et par jour. Elles se terminent immédiatement : la réponse est une tâche `succeeded`.
- Une conversion ne compte dans le quota quotidien qu’après validation de toutes ses entrées, et une fois par Idempotency-Key : répéter la même clé ne compte pas à nouveau. Au-delà du quota, la réponse est `429 RATE_LIMITED` avec `details.reason = DAILY_CONVERSION_LIMIT` et `Retry-After` jusqu’à la réinitialisation de la fenêtre quotidienne.
- La source est une image PNG ou JPEG ou le résultat SVG d’un diagramme de flux ; WebP n’est pas accepté : `UNSUPPORTED_SOURCE_FORMAT`.
- Un fichier dont le résultat encodé dépasserait 24 MiB est refusé avec `400 INVALID_REQUEST` et `OUTPUT_TOO_LARGE` ; convertissez une image plus petite.
- `dpi` est inscrit dans le fichier et définit la taille physique des pages PDF et PPTX ; les pixels ne sont pas rééchantillonnés. Pour obtenir plus de pixels, [agrandissez](/fr/docs/api/image-upscales) d’abord l’image.
- PNG et TIFF exigent une source PNG ; PDF et PPTX acceptent aussi JPEG. TIFF utilise la compression Deflate sans perte.
- Le PPTX contient une diapositive avec l’image, pas des formes modifiables.

## Exportation de diagrammes de flux

Le résultat SVG d’un diagramme de flux peut être converti en PNG, PDF, TIFF ou PPTX. Le serveur le rend avec les polices Arial et Noto, avec `width` pixels sur le grand côté : 2048 par défaut, au plus 4096 et 4,194,304 pixels au total ; un graphique carré ne peut donc dépasser 2048 px. Une demande plus grande renvoie `400 INVALID_REQUEST` avec `RENDER_TOO_LARGE`. Les textes que les polices ne peuvent pas afficher sont refusés avec `400 INVALID_REQUEST` et `SVG_NOT_RENDERABLE`, plutôt que dessinés sous forme de cases vides. Si le moteur de rendu échoue, la réponse est `503 SERVICE_UNAVAILABLE` avec `SVG_RENDERER_UNAVAILABLE` et `Retry-After` : réessayez avec la même clé. Les autres fichiers SVG ne peuvent pas servir d’entrées.

## cURL

```bash
curl -X POST https://scifig.ai/api/v1/images/conversions \
  -H "Authorization: Bearer $SCIFIG_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Prefer: wait=25" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "<file_id>",
    "format": "pdf",
    "dpi": 600
  }'
```

## JavaScript

```javascript
const response = await fetch('https://scifig.ai/api/v1/images/conversions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SCIFIG_API_KEY}`,
    'Idempotency-Key': crypto.randomUUID(),
    Prefer: 'wait=25',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "image": "<file_id>",
    "format": "pdf",
    "dpi": 600
  }),
});
const result = await response.json();
console.log(response.status, result);
```

## Python

```python
import os
import uuid

import requests

headers = {
    "Authorization": f"Bearer {os.environ['SCIFIG_API_KEY']}",
    "Idempotency-Key": str(uuid.uuid4()),
    "Prefer": "wait=25",
}
response = requests.post(
    "https://scifig.ai/api/v1/images/conversions",
    headers=headers,
    json={
        "image": "<file_id>",
        "format": "pdf",
        "dpi": 600
    },
    timeout=60,
)
print(response.status_code, response.json())
```
