Як я можу зробити знімок екрана з вікна з налаштованими полями


17

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

Так, у більшості випадків х буде дорівнює y , але іноді мені потрібні різні відстані.

Як зробити такий скріншот автоматично? Я спробував із затвора, але не зміг знайти там таке налаштування. Однак він підтримує плагіни. Тож плагін міг би таким чином обрізати вікно.


Чи можу я запитати, який інструмент ви використовували для створення цього макету? Це виглядає цілком приємно :)
Сет

1
@Seth InkScape правила! Я не експерт, але люблю створювати подібні речі для своїх проектів. Це добре виглядає для очей. :-) Ось версія PNG і SVG один . Це сховище містить інші матеріали, створені за допомогою InkScape.
Ionică Bizău

Відповіді:


19

Сценарій, використовуючи затвор

Я не думаю, що вона існує, але як і все, це можна зробити.

Якщо ви зробите скрипт нижче доступним у комбінації клавіш (пояснення далі нижче), з'явиться вікно, що дозволяє встановити поля вашого екрана зліва, справа, вгорі та внизу , розділені пробілом:

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

результат:

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

або:

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

результат:

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

тощо.

Я встановив за замовчуванням 30 px, але ви можете встановити будь-яке значення за замовчуванням (див. Нижче).

Як користуватись

  • Сценарій використовує Shutterі wmctrl. Якщо припустимо Shutter, що у вашій системі вже є (оскільки ви це згадали), встановіть wmctrl:

    sudo apt-get install wmctrl
    

    Примітка: Якщо ви використовуєте Kubuntu , Zenityвін не встановлений за замовчуванням:

    sudo apt-get install zenity
    
  • Скопіюйте сценарій нижче в порожній файл. Якщо ви хочете, ви можете змінити мардж "за замовчуванням" у рядку сценарію:

    `arg =`
    
  • збережіть як custom_screenshot.py.

  • Додайте скрипт до комбінації комбінацій клавіш: виберіть: Налаштування системи> "Клавіатура"> "Ярлики"> "Спеціальні ярлики". Клацніть "+" і додайте команду:

    python3 /path/to/custom_screenshot.py
    

Примітка

Сценарій використовує wmctrlдля визначення положення вікна. Однак у різних менеджерів вікон висновок wmctrl -lGкоманди показує невеликі відмінності у y-положенні вікна. Ці відмінності усуваються значенням, заданим у рядку deviation=-line сценарію. Поточне значення (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
Я не думаю, що вона існує - тепер вона існує! Дуже дякую!
Ionică Bizău

1
@ IonicăBizău ласкаво просимо! Дякую за запитання, це було цікаво робити. Я зробив невелику поправку в поясненні налаштування за замовчуванням.
Яків Влійм

1
@ IonicăBizău знайшов (і виправив) помилку в геометрії.
Яків Влійм

2
Приємно, приємно, приємно! Я встановив це як команду, яку я запускаю, коли натискаю спеціальну кнопку на своєму ноутбуку ASUS. :-)
Ionică Bizău

2

Ви також можете використовувати комбінацію кнопок Shift та PrtScr, щоб зробити знімок екрана певної області із визначеними користувачем розмірами.

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


Зазвичай я не можу контролювати свої руки, щоб точно встановити ці поля. :-) Але +1 за цей ярлик, я цього не знав.
Ionică Bizău

2

Ви можете робити знімки екрана за scrotдопомогою утиліти захоплення екрану командного рядка:

scrot -s  

або

scrot -ub -d 5  

Друга команда ставить рамку навколо вибраного вікна, яка має приємну ширину по відношенню до розміру вікна. Цей -d 5параметр означає затримку і дає затримку на 5 секунд, щоб вибрати вікно, яке буде на екрані екрана.

Встановіть за допомогою цього:

sudo apt-get install scrot

Довідка: Посібник Ubuntu - scrot

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.