À propos du projet

libheif est un décodeur et encodeur HEIF et AVIF (format de fichier image AV1) conforme à la norme ISO/IEC 23008-12. HEIC et AVIF sont des formats d'image utilisant respectivement le codage HEVC (H.265) ou AV1 pour une compression efficace. Au-delà de HEIC et AVIF, il gère également les images HEIF codées avec VVC, AVC, JPEG, JPEG-2000 et ISO/IEC 23001-17 ; ce dernier est intégré et stocke des images et vidéos sans perte dans de nombreux formats. La prise en charge des codecs est assurée par des bibliothèques externes : libde265 et x265 pour HEIC, libaom, dav1d, svt-av1 ou rav1e pour AVIF, ainsi que vvdec/vvenc/uvg266, openh264/x264, libjpeg(-turbo), OpenJPEG et OpenJPH. Les builds peuvent inclure un sous-ensemble de codecs, ou les compiler en tant que plugins chargés dynamiquement pour réduire les dépendances et la taille. Les fonctionnalités incluent les canaux alpha, les cartes de profondeur, les vignettes, les images auxiliaires, plusieurs images par fichier, les séquences d'images et la vidéo MP4 (sans audio), les images en tuiles avec décodage par tuile et encodage incrémental, le HDR avec transformations de couleur à partir de profils intégrés, les transformations de recadrage/miroir/rotation, les images superposées, la lecture des métadonnées EXIF et XMP, les annotations de région et les images de masque, ainsi que le streaming via une interface de lecteur de données. La bibliothèque expose une API C pour une intégration large dans les langages, avec un wrapper C++ header-only qui reste compatible binaire. Le même code de décodage fonctionne pour tous les formats ; le format d'encodage est sélectionné en passant heif_compression_HEVC, heif_compression_AV1 ou un autre format à la recherche d'encodeur. Des exemples de code dans le README couvrent le chargement d'une image principale, l'écriture d'un fichier HEIF et la lecture des métadonnées EXIF. Le système de build est CMake (autotools supprimé en v1.16.0), avec des préréglages : release (codecs en plugins), release-noplugins (HEIC/AVIF autonome), testing et fuzzing. Les variables de configuration contrôlent chaque codec (WITH_{codec}, WITH_{codec}_PLUGIN), le chargement des plugins, le codec non compressé, la compression d'en-tête, la conversion de couleur libsharpyuv, les fonctionnalités expérimentales, le multithreading, le décodage parallèle des tuiles, le répertoire des plugins et la visibilité des symboles. macOS utilise les dépendances Homebrew ; Windows se construit via vcpkg. Des scripts tiers aident à construire libaom, rav1e, dav1d et SVT-AV1. Les outils en ligne de commande incluent heif-dec (décodage vers JPEG, PNG, TIFF, WebP ou Y4M, y compris les séquences et MP4), heif-enc (encodage depuis ces formats, données de pixels brutes ou HEIF/AVIF), heif-info (aperçu ou dump complet des boîtes) et heif-view (affichage des séquences). Des limites de sécurité protègent contre les images surdimensionnées et les dénis de service ; elles peuvent être ajustées via l'API, désactivées avec --disable-limits, ou globalement avec LIBHEIF_SECURITY_LIMITS=off. Les vulnérabilités sont signalées via le rapport de vulnérabilité privé de GitHub. Des liaisons de langage existent pour .NET, Go, JavaScript/NodeJS, Python (pyheif, pillow-heif), Rust, Swift et JavaFX ; les langages compatibles C fonctionnent directement. libheif peut être compilé en JavaScript/WASM avec emscripten, et une démo en ligne dans le navigateur est disponible. Il inclut également un thumbnailer Gnome et un chargeur gdk-pixbuf. De nombreuses applications d'image open source s'appuient dessus, notamment GIMP, Krita, ImageMagick, GraphicsMagick, darktable, digiKam, libvips/sharp, pillow-heif, kImageFormats, GNOME desktop, libGD, Kodi, bimg, GDAL, OpenImageIO et XnView. Le projet est maintenu par un développeur indépendant et sollicite des financements et un support commercial ; il est distribué sous la licence GNU Lesser General Public License.