#screen-capture #screen #screen-recording #capture #window #image #monitor

xcap

XCap 是用 Rust 编写的跨平台屏幕捕获库。它支持 Linux (X11, Wayland)、MacOS 和 Windows。XCap 支持截图和视频录制(即将实现)。

13 个版本

新增 0.0.13 2024 年 8 月 25 日
0.0.12 2024 年 8 月 20 日
0.0.10 2024 年 5 月 26 日
0.0.9 2024 年 4 月 28 日
0.0.3 2024 年 1 月 30 日

#91GUI

Download history 240/week @ 2024-05-05 181/week @ 2024-05-12 207/week @ 2024-05-19 329/week @ 2024-05-26 203/week @ 2024-06-02 191/week @ 2024-06-09 322/week @ 2024-06-16 318/week @ 2024-06-23 383/week @ 2024-06-30 502/week @ 2024-07-07 647/week @ 2024-07-14 509/week @ 2024-07-21 698/week @ 2024-07-28 802/week @ 2024-08-04 1023/week @ 2024-08-11 1055/week @ 2024-08-18

每月下载量 3,590
3 crates 中使用

Apache-2.0

86KB
2K SLoC

XCap

英语 | 简体中文

XCap 是用 Rust 编写的跨平台屏幕捕获库。它支持 Linux (X11, Wayland)、MacOS 和 Windows。XCap 支持截图和视频录制(即将实现)。

特性

  • 跨平台:支持 Linux (X11, Wayland)、MacOS 和 Windows。
  • 支持多种截图模式:可以捕获屏幕和窗口的截图。
  • 支持视频录制:支持屏幕或窗口录制(即将实现)。

实现状态

特性 Linux(X11) Linux(Wayland) MacOS Windows
屏幕捕获
窗口捕获
屏幕录制 🛠️ 🛠️ 🛠️ 🛠️
窗口录制 🛠️ 🛠️ 🛠️ 🛠️
  • ✅: 功能可用
  • ⛔: 功能可用,但在某些特殊场景中支持不完整
  • 🛠️: 将开发

示例

  • 屏幕捕获
use std::time::Instant;
use xcap::Monitor;

fn normalized(filename: &str) -> String {
    filename
        .replace("|", "")
        .replace("\\", "")
        .replace(":", "")
        .replace("/", "")
}

fn main() {
    let start = Instant::now();
    let monitors = Monitor::all().unwrap();

    for monitor in monitors {
        let image = monitor.capture_image().unwrap();

        image
            .save(format!("target/monitor-{}.png", normalized(monitor.name())))
            .unwrap();
    }

    println!("运行耗时: {:?}", start.elapsed());
}
  • 窗口捕获
use std::time::Instant;
use xcap::Window;

fn normalized(filename: &str) -> String {
    filename
        .replace("|", "")
        .replace("\\", "")
        .replace(":", "")
        .replace("/", "")
}

fn main() {
    let start = Instant::now();
    let windows = Window::all().unwrap();

    let mut i = 0;

    for window in windows {
        // 最小化的窗口不能截屏
        if window.is_minimized() {
            continue;
        }

        println!(
            "Window: {:?} {:?} {:?}",
            window.title(),
            (window.x(), window.y(), window.width(), window.height()),
            (window.is_minimized(), window.is_maximized())
        );

        let image = window.capture_image().unwrap();
        image
            .save(format!(
                "target/window-{}-{}.png",
                i,
                normalized(window.title())
            ))
            .unwrap();

        i += 1;
    }

    println!("运行耗时: {:?}", start.elapsed());
}

Linux 系统要求

在 Linux 上,您需要安装 libxcblibxrandrdbus

Debian/Ubuntu

apt-get install libxcb1 libxrandr2 libdbus-1-3

Alpine

apk add libxcb libxrandr dbus

ArchLinux

pacman -S libxcb libxrandr dbus

许可证

本项目采用 Apache 许可证。有关详细信息,请参阅 LICENSE 文件。

依赖关系

~3–41MB
~635K SLoC