png2jxl: convierte PNG a JPEG XL sin pérdida y reconstruye el archivo original

Fuentes: png2jxl: convert PNG to lossless JPEG XL with byte-for-byte PNG reconstruction

png2jxl es una herramienta de código abierto diseñada para convertir imágenes PNG a JPEG XL (JXL) de forma pixel-lossless, conservando además información suficiente para reconstruir el archivo PNG original byte a byte. Su instalación se realiza mediante pip (pip install -U png2jxl) y expone dos funciones principales: png_to_jxl, que codifica un PNG en un contenedor JXL que envuelve los datos originales, y jxl_to_png, que decodifica ese contenedor devolviendo exactamente los bytes de partida. La verificación se realiza de forma automática comparando la salida con la fuente original. La librería también incluye una interfaz de línea de comandos con subcomandos encode, decode y check, permite elegir la ruta de salida con -o/--output y nunca sobrescribe archivos existentes. En el modo encode admite los parámetros --effort (1-10), --threads y --only-if-smaller, con el que es posible descartar resultados cuyo JXL resultante sea más grande que el PNG de origen. Adicionalmente, al importarse, png2jxl amplía el manejador de guardado JXL de Pillow, de modo que es posible invocar image.save(..., format='JXL', png_reconstruction=True) para activar la reconstrucción. Para imágenes abiertas desde disco se leen los bytes originales desde image.filename; en el caso de imágenes en memoria o flujos, se debe pasar la fuente explícitamente mediante source_png=. Las imágenes compatibles son PNG estáticos de 8 bits en espacios L, LA, RGB y RGBA, así como PNG indexados de 8 bits con PLTE válido y tRNS opcional; se admiten filtros PNG 0-4 e IDAT consecutivos. Entre las limitaciones declaradas se encuentran la ausencia de soporte para muestras de 1, 2 y 4 bits, muestras de 16 bits, APNG y paletas indexadas en las que dos entradas usadas se resuelvan al mismo color RGBA efectivo. Las funciones públicas aceptan un valor inmutable ResourceLimits, con valores por defecto de hasta 1 GiB de entrada/salida y 512 MiB de plaintext filtrado o correcciones preflate. El proyecto depende de pillow-jxl-plugin, que aporta la codificación y decodificación JXL, y de preflate-rs, una biblioteca de Microsoft para reconstruir el flujo DEFLATE original.