API de PNG a WebP#

La API de PNG a WebP convierte una imagen PNG a formato WebP con una sola solicitud a POST /v1/convert/png-to-webp. Sube un archivo .png como multipart/form-data y recibe los bytes WebP sin procesar, o configura direct_download=false para obtener metadatos JSON con una URL de descarga prefirmada. La transparencia (canal alfa) se conserva en la salida WebP.


Endpoint#

POST /v1/convert/png-to-webp

Content-Type: multipart/form-data

Entrada aceptada: archivos .png

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 .png 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 de la imagen sin procesar. Cuando es false, devuelve metadatos JSON con una URL de descarga prefirmada.

Detalles de la conversión#

  • Usa Pillow para la conversión directa de formato
  • Si el PNG tiene un canal alfa (RGBA), se conserva en la salida WebP
  • Los modos que no son RGBA/RGB se convierten a RGBA
  • La calidad de salida se fija al máximo (100)
  • WebP admite compresión con pérdida y sin pérdida; esta conversión usa calidad 100 para una salida casi sin pérdida

Respuesta#

Descarga directa (direct_download=true, predeterminado)#

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

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

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

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

PHP#

$ch = curl_init("https://api.enconvert.com/v1/convert/png-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("image.png")]
]);
$output = curl_exec($ch);
curl_close($ch);
file_put_contents("image_20260405_123456789.webp", $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-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 .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 WebP con una API REST?#

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

¿Se conserva la transparencia del PNG al convertir a WebP?#

Sí. Si el PNG tiene un canal alfa (RGBA), se conserva en la salida WebP; los modos que no son RGBA/RGB se convierten primero a RGBA.

¿La salida WebP es con pérdida o sin pérdida?#

WebP admite compresión con pérdida y sin pérdida; esta conversión usa calidad 100 para una salida casi sin pérdida. El ajuste de calidad no es configurable.

¿Puedo obtener una URL de descarga en lugar de los bytes WebP sin procesar?#

Sí. Configura direct_download=false y la API devuelve metadatos JSON con presigned_url, filename, file_size y conversion_time_seconds.

¿Cuál es el tamaño máximo de archivo PNG que puedo subir?#

El tamaño máximo de archivo depende del plan (5 MB en el plan Founding). Los archivos más grandes se rechazan con 413 Payload Too Large.