HEIC a JPG
El iPhone guarda las fotos en HEIC por defecto, y en cuanto uno de esos archivos llega a una computadora con Windows, a un dispositivo Android antiguo o a un formulario de carga en la web, muchas veces simplemente no abre. Este endpoint toma ese archivo HEIC y devuelve un JPG estándar, para que la foto funcione en cualquier lugar sin que nadie tenga que cambiar la configuración de su teléfono.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Por qué esto sigue pasando
Apple adoptó HEIC (High Efficiency Image Container) como formato de foto predeterminado desde iOS 11, porque comprime aproximadamente el doble de eficiente que el JPG con una calidad visual similar, algo que importa mucho cuando un teléfono guarda decenas de miles de fotos. La contrapartida es la compatibilidad: bastante software fuera del ecosistema de Apple, desde navegadores antiguos hasta ciertos laboratorios de impresión y plataformas de comercio electrónico, simplemente no decodifica HEIC, y el usuario se queda mirando una miniatura rota.
Qué hace exactamente el endpoint
Envía el archivo HEIC a /image/heic-to-jpg y vuelve convertido en JPG con el contenido visual intacto, listo para cualquier sistema que espere un formato de foto convencional. La llamada devuelve un task_id de inmediato; el trabajo de decodificar y volver a codificar ocurre de forma asíncrona, y le avisamos cuando termina mediante un webhook firmado o descargando el archivo desde un enlace firmado válido por 24 horas.
Dónde suele aparecer la fricción
Esta conversión importa sobre todo en los puntos exactos donde una foto cruza de un ecosistema a otro: un cliente que sube la foto de una devolución a una tienda en línea, un agente inmobiliario que envía imágenes de una propiedad a un sistema MLS, una plataforma de recursos humanos que acepta fotos de identificación, o un ticket de soporte con una captura de pantalla adjunta que nadie del otro lado puede abrir. En cada caso, la solución no es pedirle al usuario que cambie cómo su teléfono guarda las fotos, sino convertir en el momento en que llegan.
Cómo encaja en un flujo automatizado
Como la solicitud y la respuesta son JSON simple alrededor de un task_id, se integra directamente en un manejador de cargas: acepta lo que sea que envíe el teléfono, verifica si es HEIC, convierte si hace falta, y guarda el JPG. Las conversiones fallidas reintentan automáticamente hasta tres veces antes de devolver un error claro, y nunca se cobra una tarea que no se completa, así que una carga dañada o corrupta no le va drenando el saldo en silencio.
Para quién es esto
Es el ajuste pequeño pero constante que tarde o temprano necesitan los productos de carga de fotos, las mesas de soporte, los servicios de impresión y los marketplaces, porque una parte importante de sus usuarios usa iPhone con HEIC activado por defecto.
Qué puede hacer con ella
Cargas de publicaciones en un marketplace
Un marketplace de reventa acepta fotos de producto directamente desde el iPhone de los vendedores y convierte cualquier archivo HEIC a JPG antes de que llegue a la página de publicación.
Adjuntos en tickets de soporte
Una herramienta de mesa de ayuda convierte capturas y fotos HEIC de usuarios móviles para que los agentes puedan abrirlas sin instalar software adicional.
Pedidos de impresión bajo demanda
Un servicio de impresión fotográfica normaliza a JPG cada archivo HEIC que se sube antes de enviarlo a su cola de producción.
Fotos de propiedades para inmobiliarias
Un agente sube fotos HEIC tomadas en el sitio con su iPhone, y el sistema que alimenta el MLS las convierte automáticamente a JPG por compatibilidad.
Preguntas frecuentes
¿Qué convierte exactamente la API HEIC a JPG?
Toma una imagen HEIC generada por un iPhone y devuelve un JPG estándar con el mismo contenido visual, listo para software que no admite HEIC.
¿Convertir HEIC a JPG es gratis?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cuál es el precio por imagen?
$0.002 por solicitud más $0.005 por imagen, y solo se cobra por las conversiones que se completan con éxito.
¿Por qué mi foto de iPhone no abre en otros dispositivos?
El iPhone guarda las fotos en HEIC por defecto desde iOS 11, y muchas aplicaciones fuera de Apple y navegadores antiguos no pueden decodificar ese formato sin convertirlo.
¿Convertir a JPG pierde calidad?
El JPG es un formato con pérdida, igual que el HEIC, así que hay algo de recodificación, pero con la configuración de calidad estándar la diferencia no se nota visualmente en fotos comunes.
¿La conversión es instantánea?
Es asíncrona: recibe un task_id de inmediato y el JPG llega mediante un webhook firmado o un enlace firmado válido por 24 horas.
¿Puedo convertir imágenes HEIC en lote?
Envía una imagen por solicitud, pero puede hacer muchas solicitudes en paralelo o automatizarlo con un script por lotes; la cola está preparada para manejar volumen.
¿Qué pasa si el archivo HEIC está dañado?
La tarea reintenta automáticamente hasta tres veces, y si aun así falla recibe un error claro sin ningún cobro por esa tarea.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/image/heic-to-jpg \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/image/heic-to-jpg", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/heic-to-jpg",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/heic-to-jpg", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/heic-to-jpg", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"image": "https://ejemplo.com/imagen.jpg"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.heic_to_jpg",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 15 |
max_megapixels | 12 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |