如何从窗口截取屏幕截图并自定义边距

如何从窗口截取屏幕截图并自定义边距

我需要一个可以执行以下操作的工具:选择一个窗口,然后对该窗口进行屏幕截图X填充,如下图所示:

因此,在大多数情况下X将等于,但有时我需要不同的距离。

如何自动截取这样的屏幕截图?我尝试使用 Shutter,但找不到这样的设置。但是,它支持插件。因此,插件可以以这种方式裁剪窗口。

答案1

脚本,使用 Shutter

我认为它不存在,但就像任何事物一样,它可以被制造出来。

如果你使用组合键(下面有进一步的解释)执行下面的脚本,会弹出一个窗口,让你设置屏幕截图的边距。左、右、上底部,用空格分隔:

在此处输入图片描述

结果:

在此处输入图片描述

或者:

在此处输入图片描述

结果:

在此处输入图片描述

ETC。

我将默认值设置为 30 像素,但您可以设置任何默认值(见下文)。

如何使用

  • 该脚本使用Shutterwmctrl。假设Shutter已经在您的系统上(因为您提到过它),请安装wmctrl

    sudo apt-get install wmctrl
    

    注意:如果你使用UbuntuZenity默认情况下未安装:

    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

参考:Ubuntu 手册 - scrot

相关内容