18 个版本
使用旧 Rust 2015
0.9.5 | 2024年2月19日 |
---|---|
0.9.4 | 2023年9月18日 |
0.9.2 | 2023年7月12日 |
0.9.0 | 2023年3月20日 |
0.1.0 | 2017年11月7日 |
在 图像 中排名 78
每月下载量 28,412
用于 57 个crate(2 个直接使用)
5MB
70K SLoC
包含 (JAR 文件,59KB) vendor/gradle/wrapper/gradle-wrapper.jar,(隐晦的 autoconf 代码,29KB) vendor/configure.ac,(JAR 文件,3KB) vendor/swig/libwebp.jar
libwebp-sys
libwebp 使用 cc
crate 构建。它需要一个 C 编译器,但不使用 cmake
。
将 TARGET_CPU
环境变量设置为 native
或您所需的 CPU 架构以优化该 C 代码。
用法
将以下内容添加到您项目的 Cargo.toml
[dependencies]
libwebp-sys = "0.9"
或要求具有 SIMD 支持的新 CPU
[dependencies]
libwebp-sys = { version = "0.9", features = ["avx2", "sse41", "neon"] }
或要求 no_std
支持
libwebp-sys = { version = "0.9", default-features = false, features = ["parallel", "neon"] }
示例
编码
pub fn encode_webp(input_image: &[u8], width: u32, height: u32, quality: i32) -> Result<Vec<u8>> {
unsafe {
let mut out_buf = std::ptr::null_mut();
let stride = width as i32 * 4;
let len = WebPEncodeRGBA(input_image.as_ptr(), width as i32, height as i32, stride, quality as f32, &mut out_buf);
Ok(std::slice::from_raw_parts(out_buf, len as usize).into())
}
}
解码
pub fn decode_webp(buf: &[u8]) -> Result<Vec<u8>> {
let mut width = 0;
let mut height = 0;
let len = buf.len();
unsafe {
WebPGetInfo(buf.as_ptr(), len, &mut width, &mut height);
let out_buf = WebPDecodeRGBA(buf.as_ptr(), len, &mut width, &mut height);
}
Ok(std::slice::::from_raw_parts(out_buf, width * height * 4).into())
}