Sobre el proyecto

libheif es un decodificador y codificador de HEIF y AVIF (AV1 Image File Format) según ISO/IEC 23008-12. HEIC y AVIF son formatos de imagen que utilizan codificación HEVC (H.265) o AV1 respectivamente para lograr una fuerte compresión. Además de HEIC y AVIF, también maneja imágenes HEIF codificadas con VVC, AVC, JPEG, JPEG-2000 e ISO/IEC 23001-17; este último está integrado y almacena imágenes y video sin pérdida en muchos formatos. La compatibilidad con códecs se proporciona a través de bibliotecas externas: libde265 y x265 para HEIC, libaom, dav1d, svt-av1 o rav1e para AVIF, además de vvdec/vvenc/uvg266, openh264/x264, libjpeg(-turbo), OpenJPEG y OpenJPH. Las compilaciones pueden incluir un subconjunto de códecs, o compilarlos como plugins cargados dinámicamente para reducir dependencias y tamaño. Las características incluyen canales alfa, mapas de profundidad, miniaturas, imágenes auxiliares, múltiples imágenes por archivo, secuencias de imágenes y video MP4 (sin audio), imágenes en mosaico con decodificación por mosaico y codificación incremental, HDR con transformaciones de color a partir de perfiles incrustados, transformaciones de recorte/espejo/rotación, imágenes superpuestas, lectura de metadatos EXIF y XMP, anotaciones de regiones e imágenes de máscara, y transmisión por secuencias mediante una interfaz de lector de datos. La biblioteca expone una API en C para una amplia integración con distintos lenguajes, con un envoltorio C++ de solo encabezado que mantiene la compatibilidad binaria. El mismo código de decodificación funciona entre formatos; el formato de codificación se selecciona pasando heif_compression_HEVC, heif_compression_AV1 u otro formato a la búsqueda del codificador. Los fragmentos de ejemplo en el README cubren la carga de una imagen principal, la escritura de un archivo HEIF y la lectura de metadatos EXIF. El sistema de compilación es CMake (autotools se eliminó en la v1.16.0), con presets: release (códecs como plugins), release-noplugins (HEIC/AVIF autocontenido), testing y fuzzing. Las variables de configuración controlan cada códec (WITH_{codec}, WITH_{codec}_PLUGIN), la carga de plugins, el códec sin comprimir, la compresión de encabezados, la conversión de color libsharpyuv, las características experimentales, el multihilo, la decodificación paralela de mosaicos, el directorio de plugins y la visibilidad de símbolos. macOS usa dependencias de Homebrew; Windows compila mediante vcpkg. Los scripts en third-party ayudan a compilar libaom, rav1e, dav1d y SVT-AV1. Las herramientas de línea de comandos incluyen heif-dec (decodifica a JPEG, PNG, TIFF, WebP o Y4M, incluidas secuencias y MP4), heif-enc (codifica desde esos formatos, datos de píxeles sin procesar o HEIF/AVIF), heif-info (resumen o volcado completo de cajas) y heif-view (muestra secuencias). Los límites de seguridad protegen contra imágenes de tamaño excesivo y denegación de servicio; se pueden ajustar mediante API, desactivar con --disable-limits o globalmente con LIBHEIF_SECURITY_LIMITS=off. Las vulnerabilidades se reportan a través del reporte privado de vulnerabilidades de GitHub. Existen enlaces de lenguaje para .NET, Go, JavaScript/NodeJS, Python (pyheif, pillow-heif), Rust, Swift y JavaFX; los lenguajes compatibles con C funcionan directamente. libheif se puede compilar a JavaScript/WASM con emscripten, y hay una demostración en línea para navegador disponible. También incluye un generador de miniaturas para Gnome y un cargador gdk-pixbuf. Muchas aplicaciones de imagen de código abierto dependen de ella, incluidas GIMP, Krita, ImageMagick, GraphicsMagick, darktable, digiKam, libvips/sharp, pillow-heif, kImageFormats, el escritorio GNOME, libGD, Kodi, bimg, GDAL, OpenImageIO y XnView. El proyecto es mantenido por un desarrollador independiente y solicita financiación y soporte comercial; se distribuye bajo la GNU Lesser General Public License.