AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 578728
Accepted
Ionică Bizău
Ionică Bizău
Asked: 2015-01-29 00:03:25 +0800 CST2015-01-29 00:03:25 +0800 CST 2015-01-29 00:03:25 +0800 CST

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

  • 772

我需要一个可以执行以下操作的工具:选择一个窗口,将使用x填充制作该窗口的屏幕截图,如下图所示:

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

如何自动制作这样的屏幕截图?我尝试使用 Shutter,但在那里找不到这样的设置。但是,它支持插件。所以一个插件可能会以这种方式裁剪窗口。

screenshot
  • 3 3 个回答
  • 1639 Views

3 个回答

  • Voted
  1. Best Answer
    Jacob Vlijm
    2015-01-29T02:43:33+08:002015-01-29T02:43:33+08:00

    脚本,使用快门

    我认为它不存在,但就像任何东西一样,它是可以制造的。

    如果您使下面的脚本在组合键下可用(下面进一步解释),将弹出一个窗口,允许您在左侧、右侧、顶部和底部设置屏幕截图的边距,以空格分隔:

    在此处输入图像描述

    结果:

    在此处输入图像描述

    或者:

    在此处输入图像描述

    结果:

    在此处输入图像描述

    等等

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

    如何使用

    • 该脚本使用Shutter和wmctrl。假设Shutter已经在你的系统上(因为你提到了它),安装wmctrl:

      sudo apt-get install wmctrl
      

      注意如果您使用Kubuntu,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])
    
    • 19
  2. user354822
    2015-02-01T05:54:04+08:002015-02-01T05:54:04+08:00

    您可以使用scrot命令行屏幕捕获实用程序截取屏幕截图:

    scrot -s  
    

    或者

    scrot -ub -d 5  
    

    第二个命令在所选窗口周围放置一个边框,它的宽度相对于窗口的大小来说是一个很好的宽度。该-d 5选项代表延迟,让您有 5 秒的延迟来选择要在屏幕截图中显示的窗口。

    用这个安装:

    sudo apt-get install scrot
    

    参考:Ubuntu 手册 - scrot

    • 2
  3. manishraj2011
    2015-02-04T06:35:40+08:002015-02-04T06:35:40+08:00

    您还可以使用Shift和PrtScr按钮的组合来截取具有用户定义尺寸的特定区域的屏幕截图。

    只需按下组合键并使用修改光标(它变得类似于加号)来选择屏幕截图的区域。

    • 2

相关问题

  • 如何使用应用程序菜单选择截取整个桌面?

  • 如何截取屏幕部分的屏幕截图?

  • 如何定义一个快捷键来抓取部分屏幕?

  • 使用快门时是否必须停用或卸载 gnome-screenshot?

  • 有哪些截图工具可用?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve