Об этом проекте

libheif — это декодер и кодер HEIF и AVIF (AV1 Image File Format) по стандарту ISO/IEC 23008-12. HEIC и AVIF — это форматы изображений, использующие соответственно кодирование HEVC (H.265) или AV1 для сильного сжатия. Помимо HEIC и AVIF, библиотека также обрабатывает изображения HEIF, закодированные с помощью VVC, AVC, JPEG, JPEG-2000 и ISO/IEC 23001-17; последний встроен и хранит изображения и видео без потерь во многих форматах. Поддержка кодеков обеспечивается через внешние библиотеки: libde265 и x265 для HEIC, libaom, dav1d, svt-av1 или rav1e для AVIF, а также vvdec/vvenc/uvg266, openh264/x264, libjpeg(-turbo), OpenJPEG и OpenJPH. Сборки могут включать подмножество кодеков или компилировать их как динамически загружаемые плагины, чтобы уменьшить зависимости и размер. Возможности включают альфа-каналы, карты глубины, миниатюры, вспомогательные изображения, несколько изображений в одном файле, последовательности изображений и видео MP4 (без аудио), тайловые изображения с декодированием по тайлам и инкрементальным кодированием, HDR с цветовыми преобразованиями из встроенных профилей, преобразования обрезки/зеркалирования/поворота, наложенные изображения, чтение метаданных EXIF и XMP, аннотации областей и изображения-маски, а также потоковую передачу через интерфейс чтения данных. Библиотека предоставляет C API для широкой интеграции с языками, а также header-only обёртку C++, сохраняющую бинарную совместимость. Один и тот же код декодирования работает для всех форматов; формат кодирования выбирается путём передачи heif_compression_HEVC, heif_compression_AV1 или другого формата в поиск кодера. Примеры фрагментов в README охватывают загрузку основного изображения, запись файла HEIF и чтение метаданных EXIF. Система сборки — CMake (autotools удалены в v1.16.0), с пресетами: release (кодеки как плагины), release-noplugins (самодостаточные HEIC/AVIF), testing и fuzzing. Переменные конфигурации управляют каждым кодеком (WITH_{codec}, WITH_{codec}_PLUGIN), загрузкой плагинов, несжатым кодеком, сжатием заголовков, цветовым преобразованием libsharpyuv, экспериментальными функциями, многопоточностью, параллельным декодированием тайлов, каталогом плагинов и видимостью символов. В macOS используются зависимости Homebrew; сборка для Windows — через vcpkg. Скрипты в third-party помогают собирать libaom, rav1e, dav1d и SVT-AV1. Инструменты командной строки включают heif-dec (декодирование в JPEG, PNG, TIFF, WebP или Y4M, включая последовательности и MP4), heif-enc (кодирование из этих форматов, необработанных пиксельных данных или HEIF/AVIF), heif-info (обзор или полный дамп боксов) и heif-view (отображение последовательностей). Ограничения безопасности защищают от чрезмерно больших изображений и отказа в обслуживании; их можно настроить через API, отключить с помощью --disable-limits или глобально с LIBHEIF_SECURITY_LIMITS=off. Об уязвимостях сообщается через приватный отчёт об уязвимостях GitHub. Существуют привязки к языкам для .NET, Go, JavaScript/NodeJS, Python (pyheif, pillow-heif), Rust, Swift и JavaFX; языки, совместимые с C, работают напрямую. libheif можно скомпилировать в JavaScript/WASM с помощью emscripten, и доступна онлайн-демонстрация в браузере. Также поставляются Gnome thumbnailer и загрузчик gdk-pixbuf. Многие приложения для работы с изображениями с открытым исходным кодом зависят от неё, включая GIMP, Krita, ImageMagick, GraphicsMagick, darktable, digiKam, libvips/sharp, pillow-heif, kImageFormats, GNOME desktop, libGD, Kodi, bimg, GDAL, OpenImageIO и XnView. Проект поддерживается независимым разработчиком и запрашивает финансирование и коммерческую поддержку; распространяется под лицензией GNU Lesser General Public License.