API de HEIC a PNG#

La API de HEIC a PNG convierte una imagen HEIC/HEIF a formato PNG con una sola solicitud a POST /v1/convert/heic-to-png. Sube un archivo .heic o .heif como multipart/form-data y recibe un PNG sin pérdida con fidelidad de color completa como bytes sin procesar, o configura direct_download=false para obtener metadatos JSON con una URL de descarga prefirmada.


Endpoint#

POST /v1/convert/heic-to-png

Content-Type: multipart/form-data

Entrada aceptada: archivos .heic or .heif

Formato de salida: .png (image/png)


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 a convertir.
output_filename string No Nombre del archivo de entrada Nombre de archivo de salida personalizado. La extensión .png 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-heif para la decodificación HEIC y Pillow para la codificación PNG
  • Los datos de color se conservan sin pérdida en la salida PNG
  • Los modos de color que no son RGBA/RGB se convierten a RGBA
  • La salida PNG usa compresión sin pérdida

Respuesta#

Descarga directa (direct_download=true, predeterminado)#

HTTP 200 OK
Content-Type: image/png
Content-Disposition: inline; filename="photo_20260405_123456789.png"

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}/heic-to-png/photo_20260405_123456789.png",
    "filename": "photo_20260405_123456789.png",
    "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-png",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("photo.heic", f)}
    )

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

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

PHP#

$ch = curl_init("https://api.enconvert.com/v1/convert/heic-to-png");
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.png", $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-png", 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 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 HEIC a PNG con una API REST?#

Envía una solicitud POST a /v1/convert/heic-to-png con tu archivo .heic o .heif en un cuerpo multipart/form-data, autenticada mediante X-API-Key o un token JWT Authorization: Bearer. El PNG convertido se devuelve como bytes de imagen sin procesar de forma predeterminada.

¿La conversión de HEIC a PNG es sin pérdida?#

Sí. Los datos de color se conservan sin pérdida y la salida PNG usa compresión sin pérdida. La decodificación usa pillow-heif y la codificación usa Pillow.

¿La API acepta archivos HEIF además de HEIC?#

Sí. El endpoint acepta tanto archivos .heic como .heif; cualquier otro formato se rechaza con 400 Bad Request.

¿Puedo obtener una URL de descarga en lugar de los bytes PNG 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 402 Payment Required?#

Una respuesta 402 Payment Required significa que se agotó la cuota mensual de ops o se alcanzó el límite de almacenamiento de tu plan.