BookinglyTech News
Software

Windows decodifica HEIC sin ImageMagick, pero el navegador no puede

WIC y PowerShell bastan para convertir HEIC a JPEG en Windows, sin instalar nada. La otra mitad del asunto es que ningún navegador decodifica el formato en el lado del cliente.

2 min de lecturaDev.to0 vistas

Windows lleva tiempo pudiendo abrir y generar archivos HEIC sin ImageMagick y sin subir nada a un servidor. Lo hace a través de WIC (Windows Imaging Component), que expone el códec de Microsoft al runtime de .NET y, por tanto, a PowerShell. Lo llamativo es la otra mitad: los navegadores no decodifican ese formato, así que cualquier web que ofrezca "HEIC a JPG" está subiendo tus fotos a un servidor.

Renombrar no es convertir

Primer malentendido habitual. Cambiar la extensión de foto.heic a foto.jpg no toca los bytes: la cabecera sigue empezando por ftypheic. Los visores suelen mirar el contenido y no la extensión, así que el archivo se abre bien, hasta que algo valida el formato de verdad y lo rechaza.

La ruta sin instalar nada es un bucle en PowerShell: cargar cada archivo con BitmapDecoder.Create, coger el primer fotograma y volcarlo con JpegBitmapEncoder a calidad 90. En la máquina donde se probó (Windows 11 25H2, compilación 26200.9457), el decodificador se identificó como Microsoft HEIF Decoder, devolvió un fotograma en Bgr32 y convirtió un HEIC de 75.897 bytes en un JPEG de 59.241 bytes.

Hay dos paquetes de la Store implicados: Microsoft.HEIFImageExtension (1.2.48 en esa prueba), gratuito, y Microsoft.HEVCVideoExtension (2.5.33), de pago salvo que el fabricante del equipo lo entregue preinstalado. Sin el segundo, algunas máquinas no pueden con el contenido HEVC que va dentro del HEIC. Se comprueba con Get-AppxPackage filtrando por HEIF o HEVC.

También se puede escribir HEIC

WPF no trae codificador HEIF, pero WinRT sí y PowerShell llega a él. Con BitmapEncoder.HeifEncoderId se generan archivos .heic reales, útil para montar fixtures sin tener un iPhone a mano: un PNG de 1000x380 salió como un HEIC de 75.897 bytes con la misma cabecera.

En Python el punto de partida es otro: Pillow por sí solo lanza UnidentifiedImageError. Hace falta el plugin que registra el abridor, pillow-heif, y llamar a register_heif_opener() antes de abrir nada. Es la opción portable, y la que conviene si hay que respetar EXIF o reglas de transparencia.

El navegador es el que no puede

Aquí está el dato que rompe el supuesto de partida. En Chrome 152, apuntar un img a un .heic deja naturalWidth en 0 con complete en true, y createImageBitmap lanza InvalidStateError; drawImage sobre ese elemento, igual. No es cosa de la página: un PNG cargado en ese mismo documento se dibuja sin quejarse. La consecuencia es arquitectónica, no un matiz de privacidad: todo conversor web sube el archivo a un servidor. Si son fotos de personas o de documentos, eso pesa.

Aviso para quien convierta pensando en ahorrar espacio: el JPEG resultante suele pesar más que el HEIC, porque el segundo es más eficiente como formato. Ahí lo que toca es redimensionar. Y queda por ver si algún navegador acaba integrando el códec, porque hoy la conversión en el cliente no es una opción.