API de SVG a WebP#

Convierte SVG a WebP con el endpoint POST /v1/convert/svg-to-webp. El SVG se renderiza mediante CairoSVG y luego se codifica como WebP con la máxima calidad, conservando la transparencia. Los parámetros opcionales width y height establecen las dimensiones de salida en píxeles. Las respuestas devuelven bytes WebP brutos de forma predeterminada, o metadatos JSON con una URL de descarga prefirmada cuando direct_download=false.


Endpoint#

POST /v1/convert/svg-to-webp

Content-Type: multipart/form-data

Entrada aceptada: archivos .svg

Formato de salida: .webp (image/webp)


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 .webp 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.
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 la codificación WebP
  • De forma predeterminada, la resolución de salida la determinan los atributos propios del SVG width, height y viewBox; los parámetros width/height de la solicitud la sobrescriben
  • La transparencia se conserva en la salida WebP
  • La calidad de salida se fija al máximo (100)
Nota sobre resolución: Pasa 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/webp
Content-Disposition: inline; filename="icon_20260405_123456789.webp"

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-webp/icon_20260405_123456789.webp",
    "filename": "icon_20260405_123456789.webp",
    "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-webp",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("icon.svg", f)}
    )

with open("icon_20260405_123456789.webp", "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-webp", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

fs.writeFileSync("icon_20260405_123456789.webp", Buffer.from(await response.arrayBuffer()));

PHP#

$ch = curl_init("https://api.enconvert.com/v1/convert/svg-to-webp");
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.webp", $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-webp", 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)
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á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)
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 WebP con una API REST?#

Envía una solicitud POST multipart/form-data a /v1/convert/svg-to-webp con el SVG en el campo file, autenticada mediante X-API-Key o un Bearer JWT. La respuesta devuelve bytes WebP brutos de forma predeterminada, o configura direct_download=false para recibir JSON con una URL de descarga prefirmada.

¿La conversión de SVG a WebP conserva la transparencia?#

Sí. La transparencia del SVG se conserva en la salida WebP.

¿Cómo obtengo un WebP de mayor resolución a partir de mi 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.

¿Puedo configurar la calidad del WebP en este endpoint?#

No. La calidad de salida está fijada al máximo (100) y no es configurable.