API PNG vers SVG#
L'API PNG vers SVG intègre une image PNG dans un conteneur SVG en une seule requête vers POST /v1/convert/png-to-svg. Les données du PNG sont encodées en base64 et placées comme data URI à l'intérieur d'un élément SVG <image>, les dimensions et le viewBox du SVG correspondant aux dimensions en pixels de l'image d'origine. Il ne s'agit pas de vectorisation : la sortie est une image matricielle encapsulée dans du SVG. Les réponses renvoient directement les octets du SVG, ou des métadonnées JSON avec une URL de téléchargement présignée lorsque direct_download=false.
Point de terminaison#
POST /v1/convert/png-to-svg
Content-Type : multipart/form-data
Entrée acceptée : fichiers .png
Format de sortie : .svg (image/svg+xml)
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 .svg 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#
- Le PNG est encodé en base64 et intégré à l'intérieur d'un élément SVG
<image>sous forme de data URI - Les dimensions et le viewBox du SVG correspondent aux dimensions en pixels de l'image d'origine
- La transparence du PNG est préservée dans les données intégrées
- Il ne s'agit PAS de vectorisation -- la sortie contient l'intégralité des données de l'image matricielle, et non des tracés vectoriels
Réponse#
Téléchargement direct (direct_download=true, par défaut)#
HTTP 200 OK
Content-Type: image/svg+xml
Content-Disposition: inline; filename="image_20260405_123456789.svg"
Renvoie les octets bruts de l'image.
Réponse de métadonnées (direct_download=false)#
{
"presigned_url": "https://spaces.example.com/...",
"object_key": "env/files/{project_id}/png-to-svg/image_20260405_123456789.svg",
"filename": "image_20260405_123456789.svg",
"file_size": 45678,
"conversion_time_seconds": 0.5
}
Exemples de code#
Python#
import requests
with open("image.png", "rb") as f:
response = requests.post(
"https://api.enconvert.com/v1/convert/png-to-svg",
headers={"X-API-Key": "sk_your_private_key"},
files={"file": ("image.png", f)}
)
with open("image_20260405_123456789.svg", "wb") as out:
out.write(response.content)
Node.js#
const form = new FormData();
form.append("file", fs.createReadStream("image.png"));
const response = await fetch("https://api.enconvert.com/v1/convert/png-to-svg", {
method: "POST",
headers: { "X-API-Key": "sk_your_private_key" },
body: form
});
fs.writeFileSync("image_20260405_123456789.svg", Buffer.from(await response.arrayBuffer()));
PHP#
$ch = curl_init("https://api.enconvert.com/v1/convert/png-to-svg");
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.svg", $output);
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-svg", 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#
L'API PNG vers SVG vectorise-t-elle mon image ?#
Non. Ce point de terminaison intègre le PNG matriciel dans un conteneur SVG sous forme de data URI base64 dans un élément SVG <image>. Il ne trace pas l'image et ne la convertit pas en tracés vectoriels.
Pourquoi mon fichier SVG de sortie est-il plus volumineux que le PNG d'entrée ?#
Le PNG est encodé en base64 lors de son intégration dans le SVG, ce qui ajoute environ 33 % de surcharge : le fichier de sortie est donc plus volumineux que l'entrée.
La transparence du PNG est-elle préservée lors de l'intégration dans le SVG ?#
Oui. La transparence du PNG est préservée dans les données intégrées, et les dimensions ainsi que le viewBox du SVG correspondent aux dimensions en pixels de l'image d'origine.
Comment convertir PNG en SVG avec une API REST ?#
Envoyez une requête POST à /v1/convert/png-to-svg avec votre fichier .png en multipart/form-data, authentifiée via X-API-Key ou un jeton JWT Authorization: Bearer. Vous récupérez les octets SVG, ou une presigned_url en JSON lorsque direct_download=false.
Pourquoi l'API renvoie-t-elle 400 Bad Request ?#
Une réponse 400 Bad Request signifie que le fichier envoyé n'est pas un fichier .png, ou que la conversion de l'image a échoué parce que le fichier est corrompu ou non pris en charge.