2个稳定版本
新 1.0.1 | 2024年8月23日 |
---|---|
1.0.0 | 2022年10月3日 |
#588 in 配置
用于 2 个Crates(通过 libgphoto2_sys)
4KB
62 行
GPhoto2-rs
libgphoto2的Rust绑定
关于gphoto-rs呢?
我知道其他crate(gphoto 和 gphoto2-sys,由 @dcuddeback 创建),但它缺少许多特性,使我无法使用这个crate,最显著的是无法更改相机设置和内存文件下载。
自从2017年以来,作者没有活跃,尽管有很多拉取请求和功能请求,所以我创建了一个新的项目,使用更现代的rust代码和libgphoto2的所有特性。
特性
- 相机
- 捕获图像
- 捕获预览图像
- 下载图像
- 获取端口信息
- 获取能力(型号、驱动稳定性、权限等)
- 读取配置
- 设置配置
- 与相机上的文件系统交互
- 相机事件
- USB端口信息
- 上下文
- 自动检测相机
- 获取可用相机列表
- 通过型号和端口获取相机
入门
安装
运行 cargo add gphoto2
将gphoto2添加到您的项目或将其添加到您的 Cargo.toml
[dependencies]
gphoto2 = "1"
安装libgphoto2
必须将libgphoto2库安装到您的系统上才能使用此库。
要在基于Debian的系统上安装libgphoto2,请运行
sudo apt install libgphoto2-dev
在Arch系统上运行
sudo pacman -S libgphoto2
在MacOS系统上使用Homebrew运行
homebrew install libgphoto2
Windows
在Windows上没有官方方式安装libgphoto2,但您可以使用 MSYS2(包链接:mingw-w64-libgphoto2)安装它。
基本用法
此示例拍摄照片并将其保存到磁盘
use gphoto2::{Context, Result};
use std::path::Path;
fn main() -> Result<()> {
// Create a new context and detect the first camera from it
let camera = Context::new()?.autodetect_camera().wait().expect("Failed to autodetect camera");
let camera_fs = camera.fs();
// And take pictures
let file_path = camera.capture_image().wait().expect("Could not capture image");
camera_fs.download_to(&file_path.folder(), &file_path.name(), Path::new(&file_path.name().to_string())).wait()?;
// For more advanced examples take a look at the examples/ folder
Ok(())
}
您可以在这里找到更多示例。
日志记录
为了使您的调试生活更加轻松,这个crate将libgphoto2的日志功能连接到log
crate。
要显示日志,请使用如env_logger
之类的日志实现。
附加日志
默认情况下,我们在上下文中使用gp_context_set_log_func
来获取日志,但还有gp_log_add_func
,它提供了更多信息和更多有用的调试信息。
这个crate默认不使用gp_log_add_func
的原因是因为大多数Linux发行版和Windows都禁用了它。您需要检查您安装的版本是否没有禁用此功能,或者自行构建libgphoto2,在配置命令中不传递--disabled-debug
标志。
要使用此功能,请启用此crate的extended_logs
功能(如果libgphoto2
版本未在构建时使用--disabled-debug
,链接器将失败)。
测试
要运行此crate的测试,必须启用test
功能
cargo test -F test
请注意,test
构建了一个非常精简的libgphoto2
版本,该版本仅供测试使用(使用此crate时不要启用此功能)。
稳定性
一般来说,所有API都应该稳定,我已经测试了我支持的相机,到目前为止没有发现任何错误。
如果您遇到类似BAD_PARAMETERS
的错误或发现了错误,请在GitHub上创建一个问题。
许可证
版权所有© 2022 Maxicarlos08 [email protected]
这个库使用了libgphoto2
库,该库根据LGPL版本2.1授权。