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

17

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

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

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

Ионика Бизэу
источник
Могу я спросить, какой инструмент вы использовали для создания этого макета? Это выглядит довольно красиво :)
Сет
1
@Set InkScape правила! Я не эксперт, но мне нравится создавать подобные вещи для моих проектов. Это выглядит хорошо для глаз. :-) Вот версия PNG и SVG один . Этот репозиторий содержит другие материалы, созданные с помощью InkScape.
Ионика Бизэу

Ответы:

19

Скрипт с использованием 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])
Якоб Влейм
источник
3
Я не думаю, что это существует - теперь это существует! Большое тебе спасибо!
Ионика Бизэ
1
@ IonicăBizeve, пожалуйста! Спасибо за вопрос, было весело делать. Я внес небольшую поправку в объяснение настроек по умолчанию.
Джейкоб Влейм
1
@ IonicăBizau обнаружил (и исправил) ошибку в геометрии.
Джейкоб Влейм
2
Хорошо, хорошо, приятно! Я установил его как команду, которую запускаю, нажимая специальную кнопку на своем ноутбуке ASUS. :-)
Ионикэ Бизэ
2

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

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

manishraj2011
источник
Обычно я не могу контролировать свои руки, чтобы точно установить эти поля. :-) Но +1 за этот ярлык я не знал.
Ионика Бизэу
2

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

scrot -s  

или

scrot -ub -d 5  

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

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

sudo apt-get install scrot

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

Тим
источник