API de SVG a PNG#
La API de SVG a PNG rasteriza una imagen SVG a formato PNG con una sola solicitud a POST /v1/convert/svg-to-png. Sube un archivo .svg como multipart/form-data y el SVG se renderiza a píxeles usando CairoSVG, conservando la transparencia en la salida PNG. Los parámetros opcionales width y height establecen las dimensiones de salida en píxeles. La respuesta son bytes PNG sin procesar de forma predeterminada, o metadatos JSON con una URL de descarga prefirmada cuando direct_download=false.
Endpoint#
POST /v1/convert/svg-to-png
Content-Type: multipart/form-data
Entrada aceptada: archivos .svg
Formato de salida: .png (image/png)
Autenticación#
Requiere una clave de API privada o un token JWT de una clave pública.
X-API-Key: sk_your_private_key
O:
Authorization: Bearer <jwt_token>
Parámetros de la solicitud#
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
file |
file | Sí | -- | El archivo de imagen .svg a convertir. |
output_filename |
string |
No | Nombre del archivo de entrada | Nombre de archivo de salida personalizado. La extensión .png se añade automáticamente. |
direct_download |
boolean |
No | true |
Cuando es true, devuelve los bytes de la imagen sin procesar. Cuando es false, devuelve metadatos JSON con una URL de descarga prefirmada. |
width |
integer |
No | Tamaño propio del SVG | Ancho de salida en píxeles (1-10000). Cuando se omite height, el alto se deriva de la relación de aspecto del SVG. |
height |
integer |
No | Tamaño propio del SVG | Alto de salida en píxeles (1-10000). Cuando se omite width, el ancho se deriva de la relación de aspecto del SVG. |
Detalles de la conversión#
- Usa CairoSVG para renderizar el SVG directamente a PNG
- De forma predeterminada, la resolución de salida la determinan los propios atributos
width,heightyviewBoxdel SVG (96 DPI por defecto); los parámetroswidth/heightde la solicitud la sobrescriben - La transparencia se conserva en la salida PNG
- Si el SVG no tiene dimensiones explícitas, CairoSVG usa sus propios valores predeterminados
width y/o height (en píxeles, 1-10000) para establecer el tamaño de salida. Una sola dimensión escala la imagen proporcionalmente según la relación de aspecto del SVG; ambas juntas fijan el tamaño exacto del lienzo (lo que puede cambiar la relación de aspecto). Las solicitudes que superan 25,000,000 píxeles de salida en total se rechazan con 400. Sin estos parámetros, los propios atributos de tamaño del SVG deciden la resolución.
Respuesta#
Descarga directa (direct_download=true, predeterminado)#
HTTP 200 OK
Content-Type: image/png
Content-Disposition: inline; filename="icon_20260405_123456789.png"
Devuelve los bytes de la imagen sin procesar.
Respuesta con metadatos (direct_download=false)#
{
"presigned_url": "https://spaces.example.com/...",
"object_key": "env/files/{project_id}/svg-to-png/icon_20260405_123456789.png",
"filename": "icon_20260405_123456789.png",
"file_size": 45678,
"conversion_time_seconds": 0.5
}
Ejemplos de código#
Python#
import requests
with open("icon.svg", "rb") as f:
response = requests.post(
"https://api.enconvert.com/v1/convert/svg-to-png",
headers={"X-API-Key": "sk_your_private_key"},
files={"file": ("icon.svg", f)}
)
with open("icon_20260405_123456789.png", "wb") as out:
out.write(response.content)
Node.js#
const form = new FormData();
form.append("file", fs.createReadStream("icon.svg"));
const response = await fetch("https://api.enconvert.com/v1/convert/svg-to-png", {
method: "POST",
headers: { "X-API-Key": "sk_your_private_key" },
body: form
});
fs.writeFileSync("icon_20260405_123456789.png", Buffer.from(await response.arrayBuffer()));
PHP#
$ch = curl_init("https://api.enconvert.com/v1/convert/svg-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("icon.svg")]
]);
$output = curl_exec($ch);
curl_close($ch);
file_put_contents("icon_20260405_123456789.png", $output);
Go#
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "icon.svg")
file, _ := os.Open("icon.svg")
io.Copy(part, file)
writer.Close()
req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/svg-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)
Respuestas de error#
| Estado | Condición |
|---|---|
400 Bad Request |
El archivo no es un archivo .svg |
400 Bad Request |
La conversión de la imagen falló (archivo corrupto o no compatible) |
400 Bad Request |
width/height fuera de rango (1-10000) o total de píxeles de salida superior a 25,000,000 |
401 Unauthorized |
Falta la clave de API/token JWT o no es válida |
402 Payment Required |
Se agotó la cuota mensual de ops |
402 Payment Required |
Se alcanzó el límite de almacenamiento |
413 Payload Too Large |
El archivo supera el tamaño máximo permitido por tu plan |
Límites#
| Límite | Valor |
|---|---|
| Tamaño máximo de archivo | Según el plan (Founding: 5 MB) |
| Calidad de salida | Máxima (no configurable) |
| Tamaño máximo de salida | 10000 px por dimensión, 25,000,000 px en total |
| Conversiones mensuales | Según el plan |
Preguntas frecuentes#
¿Cómo rasterizo un SVG a PNG con una API REST?#
Envía una solicitud POST a /v1/convert/svg-to-png con tu archivo .svg como multipart/form-data, autenticada mediante X-API-Key o un token JWT Authorization: Bearer. CairoSVG renderiza el SVG directamente a PNG y devuelve los bytes sin procesar.
¿Cómo controlo la resolución de salida del PNG?#
Pasa los campos de formulario width y/o height (en píxeles, hasta 10000 por dimensión). Una sola dimensión escala la salida proporcionalmente según la relación de aspecto del SVG; ambas dimensiones fijan el tamaño exacto de salida. Sin ellos, los propios atributos width, height y viewBox del SVG deciden la resolución.
¿Se conserva la transparencia al convertir SVG a PNG?#
Sí. La transparencia se conserva en la salida PNG.
¿Qué ocurre si mi SVG no tiene dimensiones explícitas?#
Si el SVG no tiene dimensiones explícitas, CairoSVG usa sus propios valores predeterminados para determinar el tamaño de salida.
¿Puedo obtener una URL de descarga prefirmada en lugar de los bytes PNG sin procesar?#
Sí. Configura direct_download=false y la API devuelve JSON con presigned_url, filename, file_size y conversion_time_seconds.