Sobre el proyecto
heic-rs es una implementación pura en Rust de un decodificador de imágenes HEIC/HEIF, diseñada para ser segura, portátil y libre de dependencias de C. El proyecto enfatiza un enfoque de "sin cadena de herramientas de C", lo que significa que se puede construir con las herramientas estándar de Rust sin requerir cmake, pkg-config o bibliotecas externas como libheif. Prohíbe estrictamente el uso de código unsafe, asegurando que la seguridad de la memoria esté garantizada por el compilador y las comprobaciones de tiempo de ejecución, en lugar de la gestión manual de la memoria.
La funcionalidad principal se centra actualmente en la mitad del contenedor del formato HEIC. Esto incluye el análisis de cajas ISOBMFF, el manejo de metadatos como EXIF y perfiles ICC, y la gestión de propiedades de imagen como rotación, inversión y apertura limpia. Una parte significativa de la capacidad actual es la derivación de cuadrículas y la composición de mosaicos, lo cual es esencial para decodificar fotos del mundo real de dispositivos como iPhones y Macs, que almacenan imágenes grandes como cuadrículas de mosaicos más pequeños. La biblioteca también realiza la conversión de color de YUV a RGB, admitiendo varios estándares (BT.601, BT.709, BT.2020) y métodos de sobremuestreo de crominancia.
Sin embargo, los usuarios deben tener en cuenta el estado actual: el decodificador de imágenes fijas HEVC aún no está vinculado al crate. Si bien la función `probe()` funciona completamente para inspeccionar los metadatos del archivo, la función `decode()` devolverá un `Error::Unsupported` cuando llegue a la unión del codec. El decodificador HEVC se está desarrollando como un crate separado y se integrará en el futuro. Hasta entonces, esta biblioteca es adecuada para analizar metadatos, manejar estructuras de contenedores y preparar los datos para la decodificación de píxeles una vez que el módulo HEVC esté disponible.
El proyecto es compatible con `no_std` y está listo para WebAssembly (wasm32-unknown-unknown), lo que lo convierte en una opción viable para el procesamiento de imágenes basado en el navegador o sistemas embebidos donde las dependencias de C son problemáticas. Está licenciado bajo MIT o Apache-2.0, proporcionando una alternativa permisiva a otros decodificadores puros en Rust que pueden usar licencias copyleft como AGPL. El diseño se adhiere a una estricta regla "SBIO", donde la lógica de negocio no realiza E/S, manteniendo el núcleo puro y testeable. Las características de seguridad incluyen analizadores con comprobación de límites y límites de recursos configurables a través de `max_pixels` para prevenir ataques de agotamiento.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.