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

heic-rs — это чистая реализация на Rust для декодирования изображений HEIC/HEIF, разработанная с упором на безопасность, портативность и отсутствие зависимостей от C. Проект придерживается принципа “no C toolchain”, что означает, что его можно собрать с помощью стандартных инструментов Rust без необходимости в cmake, pkg-config или внешних библиотеках, таких как libheif. Он строго запрещает использование небезопасного кода, обеспечивая безопасность памяти за счет компилятора и проверок во время выполнения, а не ручного управления памятью. Текущая функциональность сосредоточена на контейнерной части формата HEIC. Это включает парсинг блоков ISOBMFF, обработку метаданных (таких как EXIF и ICC-профили) и управление свойствами изображения (вращение, зеркалирование, чистая апертура). Важной частью является вывод сетки и композитинг плиток, что необходимо для декодирования реальных фотографий с устройств, таких как iPhone и Mac, которые хранят большие изображения в виде сетки меньших плиток. Библиотека также выполняет преобразование цвета из YUV в RGB, поддерживая различные стандарты (BT.601, BT.709, BT.2020) и методы апсемплинга хроматичности. Однако пользователи должны учитывать текущий статус: декодер неподвижных изображений HEVC еще не интегрирован в crate. В то время как функция `probe()` работает полностью для проверки метаданных файла, функция `decode()` вернет `Error::Unsupported`, когда дойдет до этапа декодирования кодека. Декодер HEVC разрабатывается как отдельный crate и будет интегрирован в будущем. До тех пор эта библиотека подходит для парсинга метаданных, обработки структур контейнера и подготовки данных для декодирования пикселей, когда модуль HEVC станет доступен. Проект совместим с `no_std` и готов для WebAssembly (wasm32-unknown-unknown), что делает его жизнеспособным вариантом для обработки изображений в браузере или на встраиваемых системах, где зависимости от C проблематичны. Он лицензирован под MIT или Apache-2.0, предоставляя более свободную альтернативу другим чистым декодерам на Rust, которые могут использовать копилефт-лицензии, такие как AGPL. Дизайн следует строгому правилу “SBIO”, где бизнес-логика не выполняет ввод-вывод, сохраняя ядро чистым и тестируемым. Функции безопасности включают парсеры с проверкой границ и настраиваемые лимиты ресурсов (`max_pixels`) для предотвращения атак на истощение ресурсов.