21 个稳定版本

2.1.1+1.17.4 2024年5月8日
2.1.0+1.17.4 2023年11月28日
2.0.0+1.16.2 2023年9月12日
1.16.2 2023年9月8日
1.4.2 2019年7月16日

图像 中排名第 247

Download history 595/week @ 2024-04-16 605/week @ 2024-04-23 893/week @ 2024-04-30 927/week @ 2024-05-07 813/week @ 2024-05-14 932/week @ 2024-05-21 870/week @ 2024-05-28 776/week @ 2024-06-04 790/week @ 2024-06-11 670/week @ 2024-06-18 599/week @ 2024-06-25 669/week @ 2024-07-02 417/week @ 2024-07-09 709/week @ 2024-07-16 613/week @ 2024-07-23 804/week @ 2024-07-30

每月下载量 2,630
13 个crates中使用(直接使用2个)

MIT 许可证

285KB
3K SLoC

libheif-sys 是 libheif 的绑定库

变更日志

系统依赖

  • libheif-dev >= 1.17.0(如果启用 use-bindgen 功能,则任何版本)
  • clang - 用于为 libheif 生成 Rust 绑定。 查看 bindgen 的要求。

clang 不需要,如果您禁用了 use-bindgen 功能。在这种情况下,将使用预生成的文件 bindings.rs,而不是使用 bindgen crate 动态生成它。

警告: bindings.rs 文件是在 x64 Linux 上生成的,可能在 x32 架构或其他操作系统上无法正常工作。

Linux

该crate使用 pkg-confing 来查找已安装的 libheif

Windows

该crate使用 vcpkg crate 来查找使用 vcpkg 安装的 libheif

您可以使用 cargo-vcpkg 通过 cargo 命令安装 libheif

cargo vcpkg -v build

cargo-vcpkg 可以从头开始检索和构建所需的 vcpkg 安装包。它合并了依赖树中crates的 Cargo.toml 中指定的包要求。

读取和解码 HEIF 图像的示例

use std::ffi;
use std::ptr;

use libheif_sys as lh;

#[test]
fn read_and_decode_heic_file() {
    unsafe {
        lh::heif_init(ptr::null_mut());

        let ctx = lh::heif_context_alloc();
        assert_ne!(ctx, ptr::null_mut());

        let c_name = ffi::CString::new("data/test.heif").unwrap();
        let err = lh::heif_context_read_from_file(ctx, c_name.as_ptr(), ptr::null());
        assert_eq!(err.code, 0);

        let mut handle = ptr::null_mut();
        let err = lh::heif_context_get_primary_image_handle(ctx, &mut handle);
        assert_eq!(err.code, 0);
        assert!(!handle.is_null());

        let width = lh::heif_image_handle_get_width(handle);
        assert_eq!(width, 4032);
        let height = lh::heif_image_handle_get_height(handle);
        assert_eq!(height, 3024);

        let options = lh::heif_decoding_options_alloc();

        let mut image = ptr::null_mut();
        let err = lh::heif_decode_image(
            handle,
            &mut image,
            lh::heif_colorspace_heif_colorspace_RGB,
            lh::heif_chroma_heif_chroma_444,
            options,
        );
        lh::heif_decoding_options_free(options);
        assert_eq!(err.code, 0);
        assert!(!image.is_null());

        let colorspace = lh::heif_image_get_colorspace(image);
        assert_eq!(colorspace, lh::heif_colorspace_heif_colorspace_RGB);
        let chroma_format = lh::heif_image_get_chroma_format(image);
        assert_eq!(chroma_format, lh::heif_chroma_heif_chroma_444);
        let width = lh::heif_image_get_width(image, lh::heif_channel_heif_channel_R);
        assert_eq!(width, 4032);
        let height = lh::heif_image_get_height(image, lh::heif_channel_heif_channel_R);
        assert_eq!(height, 3024);

        lh::heif_context_free(ctx);

        lh::heif_deinit();
    };
}

依赖项