我需要一个可以执行以下操作的工具:选择一个窗口,然后对该窗口进行屏幕截图X填充,如下图所示:
因此,在大多数情况下X将等于是,但有时我需要不同的距离。
如何自动截取这样的屏幕截图?我尝试使用 Shutter,但找不到这样的设置。但是,它支持插件。因此,插件可以以这种方式裁剪窗口。
答案1
脚本,使用 Shutter
我认为它不存在,但就像任何事物一样,它可以被制造出来。
如果你使用组合键(下面有进一步的解释)执行下面的脚本,会弹出一个窗口,让你设置屏幕截图的边距。左、右、上和底部,用空格分隔:
结果:
或者:
结果:
ETC。
我将默认值设置为 30 像素,但您可以设置任何默认值(见下文)。
如何使用
该脚本使用
Shutter
和wmctrl
。假设Shutter
已经在您的系统上(因为您提到过它),请安装wmctrl
:sudo apt-get install wmctrl
注意:如果你使用Ubuntu,
Zenity
默认情况下未安装:sudo apt-get install zenity
将下面的脚本复制到一个空文件中。如果您愿意,可以更改脚本行中的“默认”边框:
`arg =`
另存为
custom_screenshot.py
。将脚本添加到快捷键组合中:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。点击“+”并添加命令:
python3 /path/to/custom_screenshot.py
笔记
脚本使用wmctrl
来确定窗口的位置。然而,在不同的窗口管理器上,命令的输出wmctrl -lG
显示窗口的 y 位置有细微的差异。这些差异通过脚本行中设置的值消除deviation=
。当前设置的值 (0) 适用于 Unity 和 KDE。
该脚本也经过测试,并且在Xfce
和上运行良好Gnome
,但是需要更改值,如脚本头部部分所述。
剧本
#!/usr/bin/env python3
import subprocess
import time
"""
On different window managers, the window geometry as output of wmctrl differs slightly.
The "deviation" should compensate these differences. Most likely appropriate (tested) settings:
Unity: 0, Gnome: -36, Xfce (Xubuntu): -26, KDE (Kubuntu): 0
"""
#---
deviation = 0
#---
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
try:
arg = get('zenity --entry --entry-text "30 30 30 30" --text "border left, right, top, bottom" --title "Screenshot margins"').strip().split()
except:
pass
else:
time.sleep(0.5)
# frontmost window pos
frontmost = [l.split()[4] for l in get("xprop -root").splitlines() if "ACTIVE_WINDOW(WINDOW)" in l][0].replace(",", "")
frontmost = frontmost[:2]+"0"+frontmost[2:]
f_data = [l.split() for l in get("wmctrl -lG").splitlines() if frontmost in l][0][2:6]
# extent
xt_data = get("xprop -id "+frontmost).split()
xt_i = xt_data.index("_NET_FRAME_EXTENTS(CARDINAL)")
xt = [int(n.replace(",", "")) for n in xt_data[xt_i+2:xt_i+6]]
# set data for screenshot command
x = str(int(f_data[0])-int(arg[0])-xt[0])
y = str(int(f_data[1])-int(arg[2])-xt[2]+deviation)
w = str(int(f_data[2])+int(arg[0])+int(arg[1])+xt[0]+xt[1])
h = str(int(f_data[3])+int(arg[3])+int(arg[2])+xt[2]+xt[3])
command = "shutter -s="+(",").join([x,y,w,h])+" -e"
subprocess.call(["/bin/bash", "-c", command])
答案2
您还可以使用转移和普瑞特斯克按钮可以对具有用户定义尺寸的特定区域进行屏幕截图。
只需按下组合键并使用修改后的光标(类似于加号)来选择屏幕截图的区域。
答案3
您可以使用scrot
命令行屏幕捕获实用程序进行屏幕截图:
scrot -s
或者
scrot -ub -d 5
第二条命令在所选窗口周围添加边框,边框的宽度与窗口大小相称。该-d 5
选项代表延迟,让您有 5 秒钟的延迟来选择要截屏的窗口。
使用这个安装:
sudo apt-get install scrot