Как сделать снимок экрана из окна с настраиваемыми полями

17

Мне нужен инструмент, который будет делать следующее: выбирая окно, сделает снимок экрана этого окна с дополнением x , как на следующем изображении:

Итак, в большинстве случаев x будет равно y , но иногда мне нужны разные расстояния.

Как сделать такой снимок экрана, автоматически? Я пробовал с Shutter, но я не мог найти такой настройки там. Однако он поддерживает плагины. Таким образом, плагин мог бы обрезать окно таким образом.

    
задан Ionică Bizău 28.01.2015 в 09:03
источник

3 ответа

19

Скрипт с использованием затвора

Я не думаю, что он существует, но, как и все, можно сделать.

Если вы сделаете скрипт ниже доступным под комбинацией клавиш (пояснение ниже), появится окно, позволяющее установить поля вашего снимка экрана на слева, справа, сверху и bottom , разделенный пробелом:

результат:

или

результат:

и др.

Я установил значение по умолчанию 30 px, но вы можете установить любое значение по умолчанию (см. ниже).

Как использовать

  • В скрипте используются Shutter и wmctrl . Если Shutter уже присутствует в вашей системе (поскольку вы упомянули об этом), установите wmctrl :

    sudo apt-get install wmctrl
    

    N.B. Если вы используете Kubuntu , Zenity по умолчанию не установлено:

    sudo apt-get install zenity
    
  • Скопируйте сценарий ниже в пустой файл. Если вы хотите, вы можете изменить «default» marge в строке скрипта:

    '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])
    
ответ дан Jacob Vlijm 28.01.2015 в 11:43
источник
2

Вы также можете использовать сочетание кнопок Shift и PrtScr , чтобы сделать снимок экрана определенной области с пользовательскими размерами.

Просто нажмите комбинацию и используйте измененный курсор (он похож на знак плюса), чтобы выбрать область для снимка экрана.     

ответ дан manishraj2011 03.02.2015 в 15:35
2

Вы можете сделать скриншоты с помощью утилиты захвата экрана командной строки scrot :

scrot -s  

или

scrot -ub -d 5  

Вторая команда помещает границу вокруг выбранного окна, которая имеет хорошую ширину по отношению к размеру окна. Опция -d 5 означает задержку и дает вам задержку в 5 секунд, чтобы выбрать окно, которое должно быть на снимке экрана.

Установите с этим:

sudo apt-get install scrot

Ссылка: Руководство Ubuntu - scrot

    
ответ дан Uroš Jarc 31.01.2015 в 14:54