API de HEIC a WebP#

Convierte HEIC a WebP con el endpoint POST /v1/convert/heic-to-webp, que convierte una imagen HEIC/HEIF a un archivo WebP de alta calidad. Si el HEIC tiene canal alfa, se conserva en la salida WebP. 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/heic-to-webp

Content-Type: multipart/form-data

Entrada aceptada: archivos .heic or .heif

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 .heic or .heif 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.

Detalles de la conversión#

  • Usa pillow-heif para la decodificación HEIC y Pillow para la codificación WebP
  • Si el HEIC tiene canal alfa, se conserva en la salida WebP
  • La calidad de salida se fija al máximo (100)
  • WebP normalmente logra tamaños de archivo más pequeños que JPEG con una calidad equivalente

Respuesta#

Descarga directa (direct_download=true, predeterminado)#

HTTP 200 OK
Content-Type: image/webp
Content-Disposition: inline; filename="photo_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}/heic-to-webp/photo_20260405_123456789.webp",
    "filename": "photo_20260405_123456789.webp",
    "file_size": 45678,
    "conversion_time_seconds": 0.5
}

Ejemplos de código#

Python#

import requests

with open("photo.heic", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/heic-to-webp",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("photo.heic", f)}
    )

with open("photo_20260405_123456789.webp", "wb") as out:
    out.write(response.content)

Node.js#

const form = new FormData();
form.append("file", fs.createReadStream("photo.heic"));

const response = await fetch("https://api.enconvert.com/v1/convert/heic-to-webp", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

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

PHP#

$ch = curl_init("https://api.enconvert.com/v1/convert/heic-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("photo.heic")]
]);
$output = curl_exec($ch);
curl_close($ch);
file_put_contents("photo_20260405_123456789.webp", $output);

Go#

body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "photo.heic")
file, _ := os.Open("photo.heic")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/heic-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 .heic or .heif
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 una imagen HEIC a WebP con una API REST?#

Envía una solicitud POST multipart/form-data a /v1/convert/heic-to-webp con el archivo .heic o .heif 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 HEIC a WebP conserva el canal alfa?#

Sí. Si el HEIC tiene canal alfa, se conserva en la salida WebP. La decodificación usa pillow-heif y la codificación usa Pillow.

¿Es WebP más pequeño que JPEG para la misma imagen?#

WebP normalmente logra tamaños de archivo más pequeños que JPEG con una calidad equivalente. Este endpoint codifica con la máxima calidad (100), que no es configurable.

¿Por qué el endpoint de HEIC a WebP 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 que superan el tamaño máximo de tu plan devuelven 413 Payload Too Large.