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 | Sí | -- | 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.