API de SVG a JPEG#
Rasteriza imágenes SVG a JPEG mediante programación con POST /v1/convert/svg-to-jpeg. El endpoint renderiza el SVG a píxeles usando CairoSVG, compone las áreas transparentes sobre un fondo blanco y devuelve un JPEG. Los parámetros opcionales width y height establecen las dimensiones de salida en píxeles. Las respuestas devuelven bytes de imagen sin procesar para descarga directa o metadatos JSON con una URL de descarga firmada.
Endpoint#
POST /v1/convert/svg-to-jpeg
Content-Type: multipart/form-data
Entrada aceptada: archivos .svg
Formato de salida: .jpeg (image/jpeg)
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 solicitud#
| Parámetro | Tipo | Obligatorio | Valor predeterminado | Descripción |
|---|---|---|---|---|
file |
archivo | 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 .jpeg se añade automáticamente. |
direct_download |
boolean |
No | true |
Cuando es true, devuelve bytes de imagen sin procesar. Cuando es false, devuelve metadatos JSON con una URL de descarga firmada. |
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 a un PNG intermedio, y luego Pillow para convertir a JPEG
- De forma predeterminada, la resolución de salida está determinada por los atributos propios del SVG
width,heightyviewBox(96 DPI por defecto); los parámetroswidth/heightde la solicitud la sobrescriben - Si el SVG no tiene dimensiones explícitas, CairoSVG usa sus propios valores predeterminados
- Las áreas transparentes se componen sobre un fondo blanco
- La calidad de salida está fijada al máximo (100)
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, valor predeterminado)#
HTTP 200 OK
Content-Type: image/jpeg
Content-Disposition: inline; filename="icon_20260405_123456789.jpeg"
Devuelve bytes de imagen sin procesar.
Respuesta de metadatos (direct_download=false)#
{
"presigned_url": "https://spaces.example.com/...",
"object_key": "env/files/{project_id}/svg-to-jpeg/icon_20260405_123456789.jpeg",
"filename": "icon_20260405_123456789.jpeg",
"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-jpeg",
headers={"X-API-Key": "sk_your_private_key"},
files={"file": ("icon.svg", f)}
)
with open("icon_20260405_123456789.jpeg", "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-jpeg", {
method: "POST",
headers: { "X-API-Key": "sk_your_private_key" },
body: form
});
fs.writeFileSync("icon_20260405_123456789.jpeg", Buffer.from(await response.arrayBuffer()));
PHP#
$ch = curl_init("https://api.enconvert.com/v1/convert/svg-to-jpeg");
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.jpeg", $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-jpeg", 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 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 |
Clave de API o token JWT faltante o inválido |
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 de archivo del 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 convierto un SVG a JPG con una API REST?#
Envía una solicitud POST multipart/form-data a /v1/convert/svg-to-jpeg con tu archivo .svg en el campo file, autenticada mediante X-API-Key o un token JWT Bearer. CairoSVG renderiza el SVG a un PNG intermedio, y luego Pillow lo convierte a JPEG.
¿Cómo controlo la resolución de salida al rasterizar un SVG?#
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 atributos propios del SVG width, height y viewBox deciden la resolución.
¿Qué ocurre con las áreas transparentes del SVG?#
JPEG no admite transparencia, por lo que las áreas transparentes se componen sobre un fondo blanco en la salida.
¿Puedo obtener una URL de descarga en lugar de bytes de imagen sin procesar?#
Sí. Establece direct_download=false y la API devuelve metadatos JSON que incluyen presigned_url, object_key, filename, file_size y conversion_time_seconds.