|
|
截图 + 标注 + 贴图 + OCR + 滚动长截图
https://github.com/jswysnemc/mark-shot
mark-shot 是一款基于 Qt 6 开发的高性能截图标注工具。项目最初针对 niri 等 Wayland 窗口管理器设计,目前支持在 Linux(X11、GNOME、wlroots/Wayland 桌面)以及 Windows 环境中完成常规截图与标注工作流。
它可以瞬间截取屏幕画面,并打开自适应全屏标注覆盖层,为用户提供区域裁切、标注、复制到剪贴板、保存以及桌面贴图等功能。
核心特色
标注工具箱
画笔与荧光笔:支持平滑的自由线条绘制与半透明高亮叠色。
几何矢量工具:高精度的直线、矩形与椭圆路径。其中矩形支持三种风格切换:
描边:原有的描边或填充矩形,可选圆角。
高亮:以 CompositionMode_Multiply 与半透明填充实现的荧光笔式覆盖效果。
反色:对矩形覆盖区域内的像素做 RGB 反相,同时保留外轮廓作为视觉提示。
优化箭头:采用六顶点经典箭头路径,边缘平滑且支持抗锯齿渲染。
双重联动文本:
支持超大字号的无级调节,可通过鼠标滚轮或属性滑块平滑缩放。
引入物理宽度缓冲区设计,避免文本在极高缩放比例下由于渲染抖动产生意外折行。
对角控制点可实现字号与文本框的等比例联动缩放;左右边控制线则仅调节排版边界宽度。
激光演示笔:适用于展示或教学,笔迹会随时间平滑融解消失。
自增步骤序号:点击即可放置依次递增的数字步骤标记。
马赛克:支持对敏感信息执行毛玻璃区域模糊虚化。
双框独立调节的放大镜:放大镜的内层取景框与外层透镜各自带有 resize 把手,矩形透镜每框 8 个角/边把手,圆形透镜每框 4 个上下左右把手。调整任一框时按放大倍率联动另一框,倍率始终保持不变;平移单框时另一框保持原位。
启动阶段扫码:选区前按 Q 进入扫码模式,框选二维码或条形码区域后,会打开可复制的识别结果窗口。
快速截取显示器:选区前按 D 会立刻截取全部输出屏幕,再按显示器裁切成缩略图;悬浮到缩略图上可复制、编辑或保存该显示器截图。
GIF 与视频录制:通过启动阶段录制快捷键或托盘菜单,可以把指定显示器或自定义区域录制为 GIF、MP4 或 MKV。区域录制时会显示录制边框与悬浮控制条(计时、暂停、停止),录制可随时暂停与继续,暂停时长不计入输出时间轴。活动录制同时在托盘中显示状态,可用 S、控制条按钮、托盘菜单、全局快捷键或 --stop-recording 停止,并在开始和保存时发送桌面通知,保存通知提供打开目录入口。在 Wayland 上,录制优先使用 PipeWire portal 后端;当 portal 捕获不可用时,可回退到 wlroots screencopy 或轮询采集。
录制编码:视频编码按机器实际情况选择硬件编码器(Linux 为 NVENC 与 VAAPI,Windows 追加 AMF 与 Quick Sync),打开失败时自动回退 libx264 与 mpeg4;多显卡机器会逐个渲染节点尝试,避开不支持编码的设备。像素格式转换按行切片并行执行,画面静止时按心跳补帧以保证输出时长与真实时长一致。GIF 采用逐帧调色板量化,画质明显优于固定调色板。
图床上传:选区后按 Ctrl+U 或点击工具栏上传按钮,将当前截图上传到自定义图床(如 ImgURL、sm.ms、imgbb、litterbox 等),上传成功后 URL 自动复制到剪贴板。支持通过 upload.env 配置图床参数,或通过 upload.command 接入任意自定义上传脚本。
Mac 风格导出外框:为保存、复制、上传、打开方式和扩展命令图片添加透明边距、圆角和柔和阴影。
贴图悬浮固定(Pin)
支持将截图或标注区域作为一个独立、无边框且置顶的悬浮贴图窗口固定在屏幕上。
支持在贴图窗口中直接选择 OCR 识别出的文字,使用 Ctrl + C 或右键菜单复制图片文字。
支持通过 OpenAI 兼容接口、Google Gemini、Anthropic Claude、腾讯云机器翻译、百度翻译与网易有道翻译 OCR 文本,并将译文按原图位置覆盖渲染到贴图上。凭据配置与 provider 选择见翻译服务提供方文档。
便捷交互:
鼠标左键拖动可自由平移贴图位置。
滚动鼠标滚轮可等比例缩放贴图。
双击鼠标左键或按下 Esc 键即可关闭贴图。
右键单击唤出菜单,支持多角度旋转、复制图片文字、翻译、另存为、复制或关闭。
滚动截图
通过 PipeWire screencast、交互式滚动覆盖层和图像拼接器,捕获长页面或长区域截图。
该功能主要面向 niri 以及行为相近的 Wayland 环境;这些环境的输出几何、捕获时序和窗口位置更容易保持稳定。
大选区悬浮手柄:在选择的截图区域过大,以至于屏幕剩余空间不足以展示滚动预览面板时,预览面板会自动隐藏,并在选区边缘显示一个悬浮拖拽手柄(带方向箭头的悬浮按钮)。
拖动调整选区:可按住并拖拽该悬浮手柄,将截图选区沿滚动轴方向平移,以捕获超出初始屏幕范围的内容;
点击切换轴向:在未开始捕获前,点击悬浮手柄可直接切换滚动方向(垂直/水平)。
兼容性说明:KDE、GNOME、X11 以及其他非 niri 环境中的滚动截图仍是测试特性,尚不完善。这些桌面栈的 portal 后端策略、Shell 或窗口管理器行为、窗口几何反馈、帧时序和滚动事件处理存在差异。
如果滚动截图无法使用,请使用普通截图流程,或者通过 Mark Shot 拓展命令接入外部长截图工具。
如果需要提交滚动截图问题,请先运行 mark-shot --debug --debug-log /path/to/mark-shot.log 并复现问题,然后把日志附到 GitHub issue 中。也可以在 config.json 中通过 debug.enabled 和 debug.logPath 开启;DEBUG=1 与 MARK_SHOT_DEBUG_LOG=/path/to/log 仍然可用。
跨显示服务器支持
Wayland:使用 PipeWire portal screencast 支持录制和实验性滚动截图,并处理共享内存与 DMA-BUF 两类帧路径;使用 grim 支持 wlroots 截屏,使用 layer-shell-qt 创建原生覆盖层,使用 wl-copy 持久化剪贴板。
X11:使用 QScreen::grabWindow 截屏、全屏置顶窗口作为覆盖层、xclip 持久化剪贴板。
Windows:使用 Qt 原生截屏与剪贴板 API 支持基础截图、标注、复制、保存和贴图流程。PipeWire、xdg-desktop-portal、grim、XCB 窗口检测、LayerShellQt、GNOME Shell helper 等 Linux 专用后端会在编译期关闭。
Linux 显示服务器后端会在运行时通过 $XDG_SESSION_TYPE 自动检测;Windows 使用 Qt 原生平台后端。
桌面集成
桌面快捷方式:
mark-shot.desktop:配置为系统全局截图工具,支持系统快捷键直接调用。
mark-shot-edit.desktop:注册为独立的图像编辑器,可集成到文件管理器(如 Dolphin、Nautilus)的右键"打开方式"菜单中。
附带高分辨率的 mark-shot.svg 与 mark-shot-edit.svg 系统矢量图标。
KDE KWin ScreenShot2 授权
在 KDE Wayland 中,Mark Shot 可以使用 KWin 的 org.kde.KWin.ScreenShot2 接口执行精确区域截图。KWin 将该接口视为受限 D-Bus 接口,因此应用对应的桌面文件必须声明授权字段。
KDE KWin ScreenShot2 授权与桌面文件配置说明 (点击展开)
命令行接口 (CLI)
常用使用示例
# 捕获屏幕并进入区域裁剪与标注模式
mark-shot
# 在多显示器环境下捕获所有输出屏幕
mark-shot --all-outputs
# 跳过选区步骤,直接对捕获的完整屏幕截图进行标注
mark-shot --fullscreen
# 选区完成后默认使用移动工具,全屏标注默认使用激光笔,并设置红色默认颜色
mark-shot --default-tool move --fullscreen-default-tool laser --default-color '#FF4D4D'
# 打开一个已有的本地图片文件并直接进入标注模式
mark-shot path/to/image.png
# 直接将本地图片作为贴图窗口打开
mark-shot --pin-image path/to/image.png
# 强制使用标准的 XDG 全屏普通窗口运行(而非 Wayland layer-shell)
mark-shot --xdg-window
无界面(非交互)截图
脚本、CI 自动化或其它程序可调用 mark-shot 完成截图而无需打开标注界面。 捕获的帧会写入 PNG,并向标准输出打印一行紧凑的 JSON 摘要:
# 捕获主屏并写入 PNG
mark-shot --capture-to /tmp/shot.png
# 写入目录(自动生成带时间戳的文件名)
mark-shot --capture-to /tmp/shots/
# 捕获逻辑屏幕区域(x,y,宽度,高度)
mark-shot --capture-to /tmp/region.png --region 0,0,1280,720
# 按显示器名称捕获指定屏幕,并包含鼠标指针
mark-shot --capture-to /tmp/window.png --display DP-1 --include-cursor
# 同时捕获多个显示器(可重复 --display,每个显示器一张 PNG)
mark-shot --capture-to /tmp/shots/ --display DP-1 --display DP-2
# 以 JSON 输出当前所有显示器信息并退出
mark-shot --list-displays
单显示器 --capture-to 的 JSON 输出示例:
{"path":"/tmp/shot.png","width":2560,"height":1440,"output":"DP-1","error":null}
当指定多个 --display 时,输出变为每屏一个捕获的数组:
{"captures":[{"path":"/tmp/shots/mark-shot-DP-1-20260801-000000.png","width":2560,"height":1440,"output":"DP-1","error":null},
{"path":"/tmp/shots/mark-shot-DP-2-20260801-000000.png","width":1920,"height":1080,"output":"DP-2","error":null}]}
每个选中的显示器使用各自的源几何进行捕获,因此 portal 类后端会精确返回 该显示器而不是整个虚拟桌面。
无界面截图复用与交互界面相同的全部捕获后端(QScreen、 xdg-desktop-portal、PipeWire、grim、KWin/GNOME 辅助、Windows Graphics Capture), 因此图像质量与区域裁剪行为完全一致。所有无界面参数与位置图片文件参数互斥。
CLI 参数说明
参数选项 功能描述
[file] 位置参数:打开一个已有的本地图片文件进入标注模式,而不是捕获当前屏幕。
-h, --help 显示帮助信息并退出。
-v, --version 显示当前版本信息并退出。
--all-outputs 捕获虚拟显示桌面的所有输出屏幕,而不是仅捕获当前的活动屏幕。
--xdg-window 强制使用标准的 XDG 全屏普通窗口(xdg-shell)替代默认的 Wayland 覆盖层(layer-shell)。
--fullscreen 跳过选区步骤,直接对捕获的完整屏幕截图进行标注。
--default-tool <tool> 指定普通选区完成后的默认标注工具;未设置 --fullscreen-default-tool 时也作为全屏模式默认工具。
--fullscreen-default-tool <tool> 指定全屏标注模式的默认工具。
--default-color <color> 指定默认标注颜色。支持 #RRGGBB 与 #RRGGBBAA。
--tray 将 Mark Shot 保持运行在系统托盘中,并在平台支持时注册全局截图快捷键。
--capture 当配置中启用托盘自动启动时,强制触发单次截图。
--pin-image <path> 直接将本地图片作为贴图窗口打开,跳过截图与选区流程。
--recording-status 通过正在运行的实例输出当前录制状态 JSON。
--stop-recording 请求正在运行的实例停止当前活动录制。
--pause-recording 在暂停与继续之间切换正在运行的实例中的活动录制。
--debug 为本次运行启用调试日志。
--no-debug 为本次运行禁用调试日志,并覆盖配置文件和环境变量。
--debug-log <path> 将调试日志写入指定路径;除非同时设置 --no-debug,否则会启用调试日志。
--capture-to <path> 无界面截图:将 PNG 写入指定文件或目录,不打开界面;向标准输出打印 JSON 摘要。
--region <x,y,w,h> 配合 --capture-to 使用:只捕获指定逻辑屏幕区域。
--display <name> 配合 --capture-to 使用:按显示器名称捕获指定输出屏幕。可重复指定以一次捕获多个显示器(每屏一张 PNG)。
--include-cursor 配合 --capture-to 使用:将鼠标指针绘制进捕获帧。
--output-name <name> 配合 --capture-to 使用:当捕获路径为目录时使用的基准文件名(不含扩展名)。
--list-displays 以 JSON 输出当前所有显示器信息并退出。
快捷键绑定
将 mark-shot 绑定为系统截图快捷键:
niri(修改 ~/.config/niri/config.kdl):
binds {
Mod+Shift+S { spawn "mark-shot"; }
}
在 niri / DMS 下请确保:
运行时能找到 grim(Nix flake 包装会自动注入 PATH)。缺少 grim 时会回退到 xdg-desktop-portal,启动可能慢数秒,且 portal 临时窗口会挤压平铺布局。
已安装并可加载 layer-shell-qt(Wayland shell integration)。layer-shell 失败时 mark-shot 会退化为普通 xdg 窗口,niri 会把它当作新的一列并挤压其他窗口。
仅在 layer-shell 不可用时,可临时用 window-rule 缓解挤压(正确修复仍是 layer-shell + grim):
window-rule {
match app-id="mark-shot"
open-fullscreen false
open-floating true
}
Hyprland(修改 ~/.config/hypr/hyprland.conf):
# 绑定 Super+Shift+S 启动 mark-shot 选区截图
bind = SUPER SHIFT, S, exec, mark-shot
# 绑定 Print 按键启动 mark-shot 选区截图
bind = , Print, exec, mark-shot
Sway / i3(修改 ~/.config/sway/config 或 ~/.config/i3/config):
# 绑定 Super+Shift+S 启动 mark-shot 选区截图
bindsym Mod4+Shift+S exec mark-shot
# 绑定 Print 按键启动 mark-shot 选区截图
bindsym Print exec mark-shot
GNOME:在系统设置 → 键盘 → 键盘快捷键 → 自定义快捷键中添加。
托盘模式:
mark-shot --tray
托盘模式默认注册以下全局快捷键:
Ctrl+Alt+S:启动区域截图。
托盘菜单还提供截图、全屏截图、开始录制、录制状态、暂停录制、停止录制、设置和退出等操作。
拓展命令
右侧动作工具栏提供 Extensions 按钮,程序会从 ~/.config/mark-shot/extensions.json 读取用户自定义命令。配置文件可以是 JSON 数组,也可以是包含 commands 数组的 JSON 对象。
{
"commands": [
{
"name": "Long screenshot",
"command": "./target/release/wayscrollshot {slurp}",
"workingDirectory": "~/Desktop/projects/wayscrollshot",
"closeOnStart": true
},
{
"name": "OCR selection",
"command": "ocr-tool {image}",
"saveImage": true
}
]
}
command 在类 Unix 系统上通过 $SHELL -c 执行,在 Windows 上通过 %COMSPEC% /C 执行,因此支持 shell 表达式。使用 {slurp} 可把当前选区作为 x,y widthxheight 几何字符串传入命令。使用 {image} 或 {imagePath} 可把当前已渲染选区作为临时 PNG 路径传入命令,使用 {imageUrl} 可传入 file:// URL。这些占位符会自动进行 shell 引用转义,配置中不要再额外加引号。若未使用图片占位符,可设置 saveImage 或 needsImage 为 true,程序会自动把临时 PNG 路径追加到命令末尾。workingDirectory 与 cwd 等价。closeOnStart 默认值为 true,命令启动前会先隐藏并关闭 Mark Shot。
MarkShot
https://pan.huang1111.cn/s/dkjaXSV
https://share.feijipan.com/s/wfvtNAlJ
链接: https://pan.baidu.com/s/1YSFenl-6utpq5TsShVI-1A?pwd=py9e 提取码: py9e
https://www.guangyapan.com/s/1953125070607712297_aqPnwE0ZMKEB3suq
https://wwazb.lanzout.com/iU6lq4aoqmbi
密码:68bm
0.1.56
https://pan.huang1111.cn/s/G8KYxCW
https://share.feijipan.com/s/0TwMleAR
链接: https://pan.baidu.com/s/1B-7sDceefx8sapddp_ySvA?pwd=ak3x 提取码: ak3x
https://www.guangyapan.com/s/1954477197762482249_aqPnwE0ZMKEB3suq
https://wwazb.lanzout.com/iKGvf4b14kzg
密码:1osx |
|