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 图像
618 每月下载次数
在 7 个crate中使用 (5 个直接使用)
58KB
1.5K SLoC
AVIF文件结构解析器(解复用器)
从AVIF图像文件中提取AV1有效负载和alpha通道元数据。该解析器是基于Mozilla在Firefox中使用的MP4解析器的一个分支,因此它被设计得健壮,可以安全地处理不受信任的数据。
该解析器与libavif支持的文件、Chrome 85和Firefox 81a支持的文件兼容。
此crate不包括AV1解码器。要显示像素,您还需要dav1d或libaom。
从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