Как сделать снимок экрана из окна с настраиваемыми полями
Мне нужен инструмент, который будет делать следующее: выбрав окно, сделаю снимок экрана этого окна с отступом 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