这个项目能做什么
libheif 是一个 ISO/IEC 23008-12 HEIF 和 AVIF(AV1 Image File Format)解码器和编码器。HEIC 和 AVIF 是分别使用 HEVC(H.265)或 AV1 编码以实现强压缩的图像格式。除 HEIC 和 AVIF 外,它还处理使用 VVC、AVC、JPEG、JPEG-2000 和 ISO/IEC 23001-17 编码的 HEIF 图像;后者为内置格式,可以多种格式存储无损图像和视频。
编解码器支持通过外部库提供:用于 HEIC 的 libde265 和 x265,用于 AVIF 的 libaom、dav1d、svt-av1 或 rav1e,以及 vvdec/vvenc/uvg266、openh264/x264、libjpeg(-turbo)、OpenJPEG 和 OpenJPH。构建时可以包含部分编解码器,或将它们编译为动态加载的插件,以减少依赖和体积。
功能包括 alpha 通道、深度图、缩略图、辅助图像、每文件多图像、图像序列和 MP4 视频(无音频)、支持逐块解码和增量编码的分块图像、通过嵌入配置文件进行色彩转换的 HDR、裁剪/镜像/旋转变换、叠加图像、EXIF 和 XMP 元数据读取、区域标注和掩码图像,以及通过数据读取器接口进行流式传输。
该库提供 C API 以便广泛的语言集成,并附带保持二进制兼容的仅头文件 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(概览或完整 box 转储)和 heif-view(显示序列)。安全限制可防范超大图像和拒绝服务;它们可以通过 API 调整,使用 --disable-limits 禁用,或通过 LIBHEIF_SECURITY_LIMITS=off 全局禁用。漏洞通过 GitHub 私有漏洞报告进行报告。
现有适用于 .NET、Go、JavaScript/NodeJS、Python(pyheif、pillow-heif)、Rust、Swift 和 JavaFX 的语言绑定;兼容 C 的语言可直接使用。libheif 可以使用 emscripten 编译为 JavaScript/WASM,并提供在线浏览器演示。它还附带一个 Gnome 缩略图生成器和一个 gdk-pixbuf 加载器。
许多开源图像应用程序依赖它,包括 GIMP、Krita、ImageMagick、GraphicsMagick、darktable、digiKam、libvips/sharp、pillow-heif、kImageFormats、GNOME 桌面、libGD、Kodi、bimg、GDAL、OpenImageIO 和 XnView。该项目由一位独立开发者维护,并寻求资金和商业支持;它根据 GNU Lesser General Public License 分发。
评论
0 人表达喜爱 · 满10人后显示 Deer Point
登录后参与讨论。