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

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

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

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

3 ответа

Решение

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

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

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

введите описание изображения здесь

результат:

введите описание изображения здесь

или же:

введите описание изображения здесь

результат:

введите описание изображения здесь

и т.п.

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

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

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

    sudo apt-get install wmctrl
    

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

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

    `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])

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

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

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

scrot -s  

или же

scrot -ub -d 5  

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

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

sudo apt-get install scrot

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

Другие вопросы по тегам