介绍
## macOS
- 使用内置的 `screencapture`:`screencapture -x output.png` 用于静默截图,`-i` 用于交互式选择 - 通过 PID 捕获特定窗口:`screencapture -l$(osascript -e 'tell app "AppName" to id of window 1') out.png` - 对于视网膜显示器,默认输出为 2x 分辨率 — 添加 `-R x,y,w,h` 以捕获精确的像素区域 - iOS 模拟器:`xcrun simctl io booted screenshot output.png` — 比 screencapture 更快且更可靠
## Linux
- GNOME 使用 `gnome-screenshot`,KDE 使用 `spectacle`,极简/无头环境使用 `scrot` - 无头 X11:`xvfb-run scrot output.png` — 为 CI 环境创建虚拟显示 - Wayland 会话会导致 X11 工具静默失效 — Wayland 使用 `grim`,区域选择使用 `slurp`
## Windows
- PowerShell 内置功能:`Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.Screen]::PrimaryScreen | ...` 虽然可用但较为繁琐 — 推荐使用 `nircmd savescreenshot` - `nircmd savescreenshot output.png` 可直接在大多数 Windows 版本的 CLI 中运行,无依赖 - 对于编程式截图,`python -m PIL.ImageGrab` 跨平台可用,但需要安装 Pillow
## Web 网页
- Playwright:`npx playwright screenshot URL output.png --full-page` — 处理 JavaScript 渲染和滚动 - 始终等待网络空闲:`--wait-for-timeout=5000`,否则页面永远不会完成动态内容的加载 - 长页面的全屏截图在查看时会像素化 — 请改为拆分为视口大小的块 - Puppeteer 等效方法:在 `networkidle0` 后执行 `page.screenshot({fullPage: true})`
## 格式与质量
- UI/文本使用 PNG(无损),照片使用 JPEG(文件更小) - JPEG 质量 85-92 是最优的 — 80 以下文本会出现伪影,95 以上收益甚微 - WebP 在相同质量下比 JPEG 小 25-35% — 除旧版 Safari 外均受支持
## 自动化模式
- 在文件名中添加时间戳:`screenshot-$(date +%Y%m%d-%H%M%S).png` — 防止批量作业中的覆盖 - 用于对比测试时,请使用相同的视口大小 — 不同分辨率会产生虚假差异 - CI 截图产物:上传前使用 `pngquant` 或 `jpegoptim` 压缩 — 节省存储和传输时间