ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

libheif 完整指南:HEIF 与 AVIF 编解码库的安装、使用与进阶集成

libheif 完整指南:HEIF 与 AVIF 编解码库的安装、使用与进阶集成 libheif 完整指南HEIF 与 AVIF 编解码库的安装、使用与进阶集成【免费下载链接】libheiflibheif is an HEIF and AVIF file format decoder and encoder.项目地址: https://gitcode.com/gh_mirrors/li/libheiflibheif 是一个开源的 HEIF 与 AVIF 图像编解码库遵循 ISO/IEC 23008-12 标准一套 C API 同时覆盖 HEIC、AVIF、JPEG2000 等格式的读取与写入相比 JPEG 通常能把文件体积缩小一半以上同时保持同等甚至更高的画质。它最大的差异化优势在于同一个解码接口可以解码所有格式换编码格式只需换一个枚举参数集成成本极低。最快安装方式CMake 预设 三步出包libheif 采用 CMake 构建系统v1.16.0 起已移除 autotools。构建前建议先装好解码依赖HEIC 用 libde265AVIF 用 AOM这样配置脚本能直接找到它们。git clone https://gitcode.com/gh_mirrors/li/libheif cd libheif mkdir build cd build cmake --presetrelease .. make make install官方在 CMakePresets.json 中提供了四个预设覆盖绝大多数场景release推荐所有编解码器编译为独立插件按需分发release-noplugins最小自包含构建只带 HEIC AVIF依赖最少testing构建并运行单元测试fuzzing启用模糊测试器供安全验证使用macOS 下先执行brew install cmake make pkg-config x265 libde265 libjpeg libtool再走同样的构建流程即可。5 分钟跑通第一次解码与编码构建完成后examples/目录下就有可执行的工具直接用仓库自带的示例文件体验一轮./examples/heif-dec examples/example.heic example.jpeg # HEIC 转 JPEG ./examples/heif-enc example-1.jpeg -A -o example.avif # JPEG 转 AVIF-A 启用 AV1一条命令即可在 HEIC / AVIF 之间完成互转-A参数决定压缩格式其余流程不变。核心能力拆解每个能力点帮你省了什么格式无关的统一 API—— 你不需要为 HEIC、AVIF、JPEG2000 分别写解析逻辑。heif_decode_image()对所有格式通用换格式只是换heif_compression_HEVC/heif_compression_AV1这样的枚举省掉整套多格式适配层。高压缩比—— HEVC/AV1 编码下同等画质比 JPEG 小 50% 以上。对图片资源站、App 下发场景这意味着直接节省流量和存储成本。丰富的图像语义—— 透明度通道、深度图、缩略图、辅助图像、多图像容器开箱即用不用自己设计容器扩展。HDR 与色彩管理—— 按文件内嵌的颜色配置NCLX 等做正确的 HDR→SDR 转换与色彩空间转换避免解码出来颜色不对的踩坑。图像变换—— 裁剪、镜像、旋转、叠加图overlay、网格图grid由库内完成服务端预处理管线不用另写。元数据读写—— EXIF、XMP 直接按块 ID 读取区域注释与蒙版图像也受支持做标注类产品可少维护一套私有格式。流式解码—— 通过>格式可用解码器可用编码器依赖备注HEIC (HEVC)libde265、ffmpegx265GPL、kvazaarBSDx265 有许可证约束商用可选 kvazaarAVIF (AV1)AOM、dav1dAOM、rav1e、svt-av1三档编码器在速度/质量上可权衡VVCvvdecvvenc、uvg266新一代编码标准AVC (H.264)openh264、ffmpegx264兼容老设备JPEGlibjpeg(-turbo)libjpeg(-turbo)最轻量路径JPEG 2000OpenJPEGOpenJPEG—HTJ2K分层 JPEG2000OpenJPEGOpenJPH按需分块提取无损ISO/IEC 23001-17内置内置支持多种像素排布的无损存储每个后端都有两个 CMake 开关WITH_{codec}启用编解码器WITH_{codec}_PLUGIN决定它是内置还是动态插件。third-party/目录里还带了 aom、dav1d、rav1e、svt-av1 等后端的自编译脚本从零搭建环境时可以直接跑。典型实战场景两个最高频动作场景一加载 HEIF 文件的主图像并拿到 RGB 像素几行代码完成解码heif_context* ctx heif_context_alloc(); heif_context_read_from_file(ctx, input.heic, nullptr); heif_image_handle* handle; heif_context_get_primary_image_handle(ctx, handle); heif_image* img; heif_decode_image(handle, img, heif_colorspace_RGB, heif_chroma_interleaved_RGB, nullptr); int stride; const uint8_t* data heif_image_get_plane_readonly( img, heif_channel_interleaved, stride); // 处理完 data 后按 img → handle → ctx 顺序释放解码后你拿到的就是一块 stride 交错的 RGB 缓冲区可直接送入渲染管线。场景二编码输出 HEIF/AVIF 文件heif_context* ctx heif_context_alloc(); heif_encoder* encoder; heif_context_get_encoder_for_format(ctx, heif_compression_AV1, encoder); heif_encoder_set_lossy_quality(encoder, 50); heif_image* image; // 你的 RGB 图像数据 heif_context_encode_image(ctx, image, encoder, nullptr, nullptr); heif_encoder_release(encoder); heif_context_write_to_file(ctx, output.avif); heif_context_free(ctx);其余高频操作都有对应的直白 API读 EXIF 用heif_image_handle_get_list_of_metadata_block_IDs(handle, Exif, ...)拿到块 ID 后再取数据图像序列/MP4 视频、网格图、叠加图等能力在 C API 头文件中都有对应函数可参考 heif.h 的完整声明。进阶话题大图分块、插件机制与安全限制1. 分块Tiled图像处理 —— 超大分辨率不再爆内存为什么需要4K×8K 的航拍图或拼接图一次性解码会瞬间吃光内存。libheif 支持把图像切成瓦片逐个瓦片解码编码时也可以逐块追加写入你可以只处理视口内的瓦片。实现上通过分块图像 API 查询瓦片布局、对单个瓦片调用解码即可构建时开启ENABLE_PARALLEL_TILE_DECODING还能让多个瓦片并行解码进一步提速。2. 编解码器插件机制 —— 依赖瘦身的关键为什么需要静态内置所有编解码器会拖入大量动态依赖且分发时可能包含你不需要的或许可证不合适的组件。v1.14.0 起每个后端可单独编译成动态插件运行时从LIBHEIF_PLUGIN_PATH环境变量指定的目录冒号分隔Windows 为分号加载未设置时用构建期的PLUGIN_DIRECTORY。好处是库本体依赖少插件可按需安装、热替换。3. 安全限制 —— 防恶意文件打穿内存为什么需要HEIF 是二进制容器恶意构造的文件可能声明超大尺寸触发拒绝服务。libheif 内置heif_security_limits像素数、瓦片数等上限默认拦截。处理超大合法图像时可按需放宽用heif-dec时加--disable-limits或通过环境变量LIBHEIF_SECURITY_LIMITSoff全局关闭——文档明确提醒仅在你确定不会处理恶意文件时再关。跨语言与集成C核心 API一切绑定的基础Cheif_cxx.h 提供的头文件 only 包装二进制兼容、代码更简洁Pythonpyheif、pillow_heif后者可直接并入 Pillow 生态Golibheif-go 封装库Rustlibheif-sys 绑定.NETC#/F#libheif-sharpJava/JavaFXLibHeifFXJavaScript / WASM可用 emscripten 把整个库编译成浏览器端 JS实现纯前端 HEIF/AVIF 解码能直接调 C 的语言Swift、C# 等可零封装直接使用周边工具与配套heif-dec / heif-enc命令行互转工具支持图像、图像序列与 MP4 视频heif-info文件结构概览-d参数可转储完整 box 结构调试格式问题必备heif-view图像序列播放器heif-thumbnailerGnome 桌面的 HEIF/AVIF 缩略图生成器配套 MIME 配置在 gnome/ 目录gdk-pixbuf 加载器gdk-pixbuf/ 提供 GTK 应用的原生 HEIF/AVIF 支持安装后更新加载器缓存即可完整示例程序examples/ 目录含解码、编码、序列、基准测试等可直接阅读的实现谁在用它libheif 是很多主流图像处理软件背后的 HEIF/AVIF 引擎GIMP、Krita、ImageMagick、GraphicsMagick、darktable、digiKam、libvips、kImageFormats、libGD、GDAL、OpenImageIO、XnView、bimg以及 Kodi 的 HEIF 解码插件。如果这些软件的 HEIF 支持稳定你的集成大概率也会稳定。许可与社区库本体GNU LGPL 许可对闭源集成友好动态链接即可示例程序MIT 许可详见 COPYING开发与维护由结构 AG 及核心维护者持续推进编解码器覆盖范围广、有持续的模糊测试投入fuzzing/ 目录含完整的模糊测试器与语料问题反馈与贡献建议直接提交到仓库的 issue 区。一句话收束libheif 把HEIF/AVIF 解码编码这件通常要对接三四个格式库的事收敛成一套 C API 加几个 CMake 开关——你省下的是格式适配层、依赖治理和色彩转换的坑换来的是几行代码接入当前压缩比最优的图像格式。【免费下载链接】libheiflibheif is an HEIF and AVIF file format decoder and encoder.项目地址: https://gitcode.com/gh_mirrors/li/libheif创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表