web-dev-qa-db-ja.com

カスタマイズ可能なマージンを使用して、ウィンドウからスクリーンショットを撮るにはどうすればよいですか

次のことを行うツールが必要です。ウィンドウを選択すると、次の画像のようにxパディングでそのウィンドウのスクリーンショットが作成されます。

そのため、ほとんどの場合xyと等しくなりますが、異なる距離が必要な場合があります。

このようなスクリーンショットを自動的に作成する方法は?私はシャッターを試しましたが、そのような設定を見つけることができませんでした。ただし、プラグインはサポートしています。したがって、プラグインは、この方法でウィンドウを切り取ることができます。

17
Ionică Bizău

スクリプト、シャッターを使用

私はそれが存在するとは思いませんが、何でもそうであるように、作ることができます。

以下のスクリプトをキーの組み合わせで使用できるようにすると(さらに下の説明)、ウィンドウがポップアップし、スクリーンショットのマージンをleft、right、topおよびbottom、スペース区切り:

enter image description here

result:

enter image description here

または:

enter image description here

result:

enter image description here

等.

デフォルトを30 pxに設定しましたが、任意のデフォルト値を設定できます(以下を参照)。

使い方

  • スクリプトはShutterおよびwmctrlを使用します。 Shutterがすでにシステムにあると仮定すると(言及しているため)、wmctrlをインストールします。

    Sudo apt-get install wmctrl
    

    N.B. 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で正常に動作しますが、スクリプトのheadセクションで説明されているように、値を変更する必要があります。

スクリプト

#!/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
Jacob Vlijm

scrotコマンドラインスクリーンキャプチャユーティリティでスクリーンショットを撮ることができます。

scrot -s  

または

scrot -ub -d 5  

2番目のコマンドは、選択されたウィンドウの周囲に境界線を配置します。このウィンドウは、ウィンドウのサイズに対してナイス幅です。 -d 5オプションは遅延を表し、スクリーンショットに表示するウィンドウを選択するために5秒の遅延を与えます。

これでインストール:

Sudo apt-get install scrot

参照: buntuマニュアル-scrot

2
user354822

ShiftPrtScrユーザー定義の寸法で特定の領域のスクリーンショットを撮るボタン。

組み合わせを押して、変更されたカーソル(プラス記号に似たものになる)を使用して、スクリーンショットの領域を選択します。

2
manishraj2011