À propos du projet

heic-rs est une implémentation pure Rust d'un décodeur d'images HEIC/HEIF conçu pour être sûr, portable et exempt de dépendances C. Le projet met l'accent sur une approche 'sans toolchain C', ce qui signifie qu'il peut être construit avec des outils Rust standard sans nécessiter cmake, pkg-config ou des bibliothèques externes comme libheif. Il interdit strictement le code dangereux, garantissant que la sécurité de la mémoire est garantie par le compilateur et les vérifications d'exécution plutôt que par la gestion manuelle de la mémoire. La fonctionnalité principale actuelle se concentre sur la moitié du conteneur du format HEIC. Cela inclut l'analyse des boîtes ISOBMFF, la gestion des métadonnées telles que les profils EXIF et ICC, ainsi que la gestion des propriétés d'image telles que la rotation, le miroir et l'ouverture propre. Une partie importante de la capacité actuelle est la dérivation de grille et la composition de tuiles, qui est essentielle pour décoder des photos du monde réel à partir d'appareils tels que les iPhones et les Mac qui stockent de grandes images sous forme de grille de tuiles plus petites. La bibliothèque effectue également une conversion de couleur YUV vers RGB, prenant en charge diverses normes (BT.601, BT.709, BT.2020) et des méthodes de suréchantillonnage chroma. Cependant, les utilisateurs doivent être conscients du statut actuel : le décodeur HEVC pour les images fixes n'est pas encore lié à la crate. Bien que la fonction `probe()` fonctionne pleinement pour inspecter les métadonnées des fichiers, la fonction `decode()` retournera une `Error::Unsupported` lorsqu'elle atteindra la jonction du codec. Le décodeur HEVC est développé en tant que crate séparé et sera intégré à l'avenir. Jusqu'à présent, cette bibliothèque convient pour analyser les métadonnées, gérer les structures de conteneur et préparer les données pour le décodage des pixels une fois que le module HEVC sera disponible. Le projet est compatible `no_std` et prêt pour WebAssembly (wasm32-unknown-unknown), ce qui en fait une option viable pour le traitement d'images basé sur le navigateur ou les systèmes embarqués où les dépendances C posent problème. Il est sous licence MIT ou Apache-2.0, fournissant une alternative permissive à d'autres décodeurs Rust purs qui peuvent utiliser des licences copyleft comme AGPL. La conception adhère à une règle stricte 'SBIO', où la logique métier ne réalise pas d'E/S, maintenant le cœur pur et testable. Les fonctionnalités de sécurité comprennent des parseurs à vérification de limites et des limites de ressources configurables via `max_pixels` pour empêcher les attaques par épuisement.