API de PNG a HEIC#
La API de PNG a HEIC convierte una imagen PNG a formato HEIC (High Efficiency Image Container) con una sola solicitud a POST /v1/convert/png-to-heic. Sube un archivo .png como multipart/form-data y recibe los bytes HEIC sin procesar, o configura direct_download=false para obtener metadatos JSON con una URL de descarga prefirmada. Como HEIC no admite transparencia, las áreas transparentes del PNG se combinan sobre un fondo blanco.
Endpoint#
POST /v1/convert/png-to-heic
Content-Type: multipart/form-data
Entrada aceptada: archivos .png
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 .png 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 de la imagen sin procesar. Cuando es false, devuelve metadatos JSON con una URL de descarga prefirmada. |
Detalles de la conversión#
- Usa Pillow con pillow-heif para la codificación HEIC
- Si el PNG tiene un canal alfa (RGBA), las áreas transparentes se combinan sobre un fondo blanco
- 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="image_20260405_123456789.heic"
Devuelve los bytes de la imagen sin procesar.
Respuesta con metadatos (direct_download=false)#
{
"presigned_url": "https://spaces.example.com/...",
"object_key": "env/files/{project_id}/png-to-heic/image_20260405_123456789.heic",
"filename": "image_20260405_123456789.heic",
"file_size": 45678,
"conversion_time_seconds": 0.5
}
Ejemplos de código#
Python#
import requests
with open("image.png", "rb") as f:
response = requests.post(
"https://api.enconvert.com/v1/convert/png-to-heic",
headers={"X-API-Key": "sk_your_private_key"},
files={"file": ("image.png", f)}
)
with open("image_20260405_123456789.heic", "wb") as out:
out.write(response.content)
Node.js#
const form = new FormData();
form.append("file", fs.createReadStream("image.png"));
const response = await fetch("https://api.enconvert.com/v1/convert/png-to-heic", {
method: "POST",
headers: { "X-API-Key": "sk_your_private_key" },
body: form
});
fs.writeFileSync("image_20260405_123456789.heic", Buffer.from(await response.arrayBuffer()));
PHP#
$ch = curl_init("https://api.enconvert.com/v1/convert/png-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("image.png")]
]);
$output = curl_exec($ch);
curl_close($ch);
file_put_contents("image_20260405_123456789.heic", $output);
Go#
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "image.png")
file, _ := os.Open("image.png")
io.Copy(part, file)
writer.Close()
req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/png-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 .png |
400 Bad Request |
La conversión de la imagen falló (archivo corrupto o no compatible) |
401 Unauthorized |
Falta la clave de API/token JWT o no es válida |
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 tu 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 PNG a HEIC con una API REST?#
Envía una solicitud POST a /v1/convert/png-to-heic con tu archivo .png en un cuerpo multipart/form-data, autenticada mediante X-API-Key o un token JWT Authorization: Bearer. El HEIC convertido se devuelve como bytes de imagen sin procesar de forma predeterminada.
¿Qué ocurre con la transparencia del PNG al convertir a HEIC?#
HEIC no admite transparencia, así que si el PNG tiene un canal alfa (RGBA), las áreas transparentes se combinan sobre un fondo blanco en la salida HEIC.
¿Puedo controlar la calidad de salida del HEIC?#
No. La calidad de salida se fija al máximo (100) y no es configurable. La codificación usa Pillow con pillow-heif.
¿Puedo obtener una URL de descarga en lugar de los bytes HEIC sin procesar?#
Sí. Configura direct_download=false y la API devuelve metadatos JSON con presigned_url, filename, file_size y conversion_time_seconds.
¿Por qué la API devuelve 413 Payload Too Large?#
El archivo subido supera el tamaño máximo de archivo de tu plan (5 MB en el plan Founding).