vips-rs

English 简体中文

Rust Crates.io docs.rs License Downloads

libvips 的 Rust 绑定,为图片处理提供高性能与低内存占用的能力,并以安全、易用的 API 封装常用功能。

文档:https://docs.rs/vips/

环境要求

安装

在 Cargo.toml 中添加:

[dependencies]
vips = "0.1"

快速开始

use vips::*;

fn main() -> Result<()> {
    // 初始化 libvips(进程内仅需一次,通常布尔值用于控制自动关闭)
    let _instance = VipsInstance::new("app_example", true)?;

    // 生成缩略图(文件来源优先走 vips_thumbnail,可 shrink-on-load)
    let thumb = VipsImage::thumbnail_file("./examples/images/kodim01.png", 320, 240, VipsSize::VIPS_SIZE_FORCE)?;

    // 写入文件
    thumb.write_to_file("kodim01_320x240.jpg")?;
    Ok(())
}

从内存构造

let pixels = vec![0u8; 256 * 256 * 3]; // RGB
let img = VipsImage::from_memory(pixels, 256, 256, 3, VipsBandFormat::VIPS_FORMAT_UCHAR)?;
let thumb = img.thumbnail(200, 200, VipsSize::VIPS_SIZE_FORCE)?;
thumb.write_to_file("black_200x200.png")?;
let pixels = vec![0u8; 256 * 256 * 3];
let img = VipsImage::from_memory_reference(&pixels, 256, 256, 3, VipsBandFormat::VIPS_FORMAT_UCHAR)?;
let thumb = img.thumbnail(200, 200, VipsSize::VIPS_SIZE_FORCE)?;
thumb.write_to_file("black_ref_200x200.png")?;

生命周期与常见问题

功能概览

类别 API
读写 from_file、from_memory、from_memory_reference、from_buffer、write_to_file、write_to_memory、write_to_buffer、write_jpeg、find_load/find_save、black/xyz/grey/sines/zone/perlin/gaussnoise
几何 thumbnail_file、thumbnail_buffer、thumbnail(已解码像素)、resize、resize_reduce、reduce、shrink_box、crop、embed、flip/rot/rotate/autorot、zoom、insert、gravity、extract_band、bandjoin2/bandjoin_const、copy/copy_memory、smartcrop、ifthenelse
算术 add/subtract/multiply/divide、linear/linear1、invert、pow_const、abs/sign/clamp、floor/ceil/rint
数学 sin/cos/tan、ln/log10/exp/exp10
关系/位运算 less/lesseq/more/moreeq/equal_const/notequal_const、布尔/移位常量、bandand/bandor/bando
色彩 cast、colourspace、falsecolour、premultiply/unpremultiply
滤波 gaussblur、sharpen、conv、erode/dilate、median、sobel、canny、maplut
直方图 hist_find/hist_local/hist_equal/hist_entropy、labelregions
统计 avg、min_value、max_value、deviate、percent、getpoint、find_trim
属性 width、height、size、bands
绘制 draw_rect、draw_line、draw_circle、draw_flood 等(原地修改)
拼接 merge、mosaic、match_、globalbalance、remosaic
插值 VipsInterpolate 最近邻 / 双线性 / 自定义

性能建议

说明

本地开发

正式构建从 crates.io 解析 vips-sys。若要改用本地 sibling 源码,在工作区/消费方根目录(或临时在本 crate)增加:

[patch.crates-io]
vips-sys = { path = "../vips-sys" }

无需本机安装 libvips 的 Docker 验证:

docker run --rm -v "$PWD/..":/workspace -w /workspace/vips-rs rust:1.88-bookworm \
  bash -c 'apt-get update -qq && apt-get install -y -qq pkg-config libvips-dev && cargo test'

许可证

MIT

变更日志

参见 CHANGELOG.md。