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 -- 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, height y viewBox
  • Las áreas transparentes se componen sobre un fondo blanco (HEIC no admite transparencia)
  • La calidad de salida se fija al máximo (100)
Nota sobre transparencia: HEIC no admite transparencia. Las áreas transparentes del SVG aparecerán blancas en la salida HEIC.

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.