API de SVG a HEIC#
Convierte SVG a HEIC con el endpoint POST /v1/convert/svg-to-heic. El SVG se renderiza mediante CairoSVG y luego se codifica como HEIC con la máxima calidad, componiendo las áreas transparentes sobre un fondo blanco. Las respuestas devuelven bytes HEIC brutos de forma predeterminada, o metadatos JSON con una URL de descarga prefirmada cuando direct_download=false.
Endpoint#
POST /v1/convert/svg-to-heic
Content-Type: multipart/form-data
Entrada aceptada: archivos .svg
Formato de salida: .heic (image/heic)
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 que se va a convertir. |
output_filename |
string |
No | Nombre del archivo de entrada | Nombre de archivo de salida personalizado. La extensión .heic se añade automáticamente. |
direct_download |
boolean |
No | true |
Cuando es true, devuelve los bytes brutos de la imagen. Cuando es false, devuelve metadatos JSON con una URL de descarga prefirmada. |
Detalles de la conversión#
- Usa CairoSVG para renderizar el SVG a un PNG intermedio, y luego Pillow con pillow-heif para la codificación HEIC
- La resolución de salida la determinan los atributos propios del SVG
width,heightyviewBox - Las áreas transparentes se componen sobre un fondo blanco (HEIC no admite transparencia)
- La calidad de salida se fija al máximo (100)
Respuesta#
Descarga directa (direct_download=true, predeterminado)#
HTTP 200 OK
Content-Type: image/heic
Content-Disposition: inline; filename="icon_20260405_123456789.heic"
Devuelve los bytes brutos de la imagen.
Respuesta con metadatos (direct_download=false)#
{
"presigned_url": "https://spaces.example.com/...",
"object_key": "env/files/{project_id}/svg-to-heic/icon_20260405_123456789.heic",
"filename": "icon_20260405_123456789.heic",
"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-heic",
headers={"X-API-Key": "sk_your_private_key"},
files={"file": ("icon.svg", f)}
)
with open("icon_20260405_123456789.heic", "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-heic", {
method: "POST",
headers: { "X-API-Key": "sk_your_private_key" },
body: form
});
fs.writeFileSync("icon_20260405_123456789.heic", Buffer.from(await response.arrayBuffer()));
PHP#
$ch = curl_init("https://api.enconvert.com/v1/convert/svg-to-heic");
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.heic", $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-heic", 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 dañado o no compatible) |
401 Unauthorized |
Falta la clave de API/token JWT o no es vá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 permitido por el 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) |
| Conversiones mensuales | Según el plan |
Preguntas frecuentes#
¿Cómo convierto un SVG a HEIC con una API REST?#
Envía una solicitud POST multipart/form-data a /v1/convert/svg-to-heic con el SVG en el campo file, autenticada mediante X-API-Key o un Bearer JWT. La respuesta devuelve bytes HEIC brutos de forma predeterminada, o configura direct_download=false para recibir JSON con una URL de descarga prefirmada.
¿La conversión de SVG a HEIC conserva la transparencia?#
No. HEIC no admite transparencia, por lo que las áreas transparentes del SVG se componen sobre un fondo blanco en la salida HEIC.
¿Cómo se determina la resolución de salida al convertir SVG a HEIC?#
La resolución de salida la determinan los atributos propios del SVG width, height y viewBox. El SVG se renderiza a un PNG intermedio con CairoSVG y luego se codifica a HEIC con Pillow y pillow-heif.
¿Por qué el endpoint de SVG a HEIC devuelve un error 402?#
402 Payment Required significa que se agotó la cuota mensual de ops o se alcanzó el límite de almacenamiento de tu plan. Los archivos con un tamaño excesivo devuelven 413 Payload Too Large, y los archivos SVG no válidos o dañados devuelven 400 Bad Request.