8个版本 (1 个稳定版)

1.0.0 2022年1月25日
0.13.2 2021年6月2日
0.13.1 2021年1月29日
0.13.0 2020年9月6日
0.12.3 2020年8月29日

#861 in 图像

Download history 121/week @ 2024-03-13 149/week @ 2024-03-20 209/week @ 2024-03-27 161/week @ 2024-04-03 139/week @ 2024-04-10 222/week @ 2024-04-17 177/week @ 2024-04-24 209/week @ 2024-05-01 241/week @ 2024-05-08 277/week @ 2024-05-15 205/week @ 2024-05-22 172/week @ 2024-05-29 144/week @ 2024-06-05 167/week @ 2024-06-12 161/week @ 2024-06-19 120/week @ 2024-06-26

618 每月下载次数
7 个crate中使用 (5 个直接使用)

MPL-2.0 许可证

58KB
1.5K SLoC

AVIF文件结构解析器(解复用器)

从AVIF图像文件中提取AV1有效负载和alpha通道元数据。该解析器是基于Mozilla在Firefox中使用的MP4解析器的一个分支,因此它被设计得健壮,可以安全地处理不受信任的数据。

该解析器与libavif支持的文件、Chrome 85和Firefox 81a支持的文件兼容。

API文档

此crate不包括AV1解码器。要显示像素,您还需要dav1dlibaom

从Rust使用

它接受io::Read,因此您可以使用任何可读输入,例如字节切片(vec.as_slice()),或包装在BufReader中的File等。

let data = read_avif(&mut slice)?;
av1_decode(&data.primary_item)?;
if let Some(alpha) = &data.alpha_item {
    av1_decode(alpha)?;
}
if data.premultiplied_alpha {
    // after decoding, remember to divide R,G,B values by A
}

从C使用

安装Rust 1.45或更高版本,最好通过rustup,然后运行

cargo build --release

它将构建./target/release/libavif_parse.a(或在Windows上为avif_parse.lib)。将其与您的项目链接。

Cargo支持交叉编译,因此您可以轻松地为其他平台(例如iOS)构建它。

#include "avif_parse.h"
avif_data_t data = avif_parse(file_data, file_length);

if (data) {
    av1_decode(data.primary_data, data.primary_size);
    if (data.alpha_data) {
        av1_decode(data.alpha_data, data.alpha_size);
    }
    if (data.premultiplied_alpha) {
        // after decoding, remember to divide R,G,B values by A
    }
}

avif_data_free(data);

依赖项

~520KB