Come posso fare uno screenshot da una finestra, con margini personalizzabili

17

Ho bisogno di uno strumento che faccia quanto segue: selezionando una finestra, creeremo uno screenshot di quella finestra con una spaziatura x , come nell'immagine seguente:

Quindi, nella maggior parte dei casi x sarà uguale a y , ma a volte ho bisogno di distanze diverse.

Come creare uno screenshot di questo tipo, automaticamente? Ho provato con Shutter, ma non sono riuscito a trovare un ambiente simile. Tuttavia, supporta i plugin. Quindi un plugin potrebbe essere quello di ritagliare la finestra in questo modo.

    
posta Ionică Bizău 28.01.2015 - 09:03

3 risposte

19

Script, utilizzando lo scatto

Non penso che esista, ma come qualsiasi cosa, può essere fatto.

Se rendi lo script sotto disponibile sotto una combinazione di tasti (spiegazione più avanti), comparirà una finestra che ti permetterà di impostare i margini del tuo screenshot su left, right, top e in basso , separati da uno spazio:

risultato:

o

risultato:

ecc.

Ho impostato il valore predefinito su 30 px, ma puoi impostare qualsiasi valore predefinito (vedi sotto).

Come usare

  • Lo script utilizza Shutter e wmctrl . Supponendo che Shutter sia già presente nel tuo sistema (poiché lo hai menzionato), installa wmctrl :

    sudo apt-get install wmctrl
    

    NB. Se usi Kubuntu , Zenity non è installato di default:

    sudo apt-get install zenity
    
  • Copia lo script qui sotto in un file vuoto. Se lo desideri, puoi modificare il marge "predefinito" nella riga dello script:

    'arg ='
    
  • salvalo come custom_screenshot.py .

  • Aggiungi lo script a una combinazione di tasti di scelta rapida: scegli: Impostazioni di sistema & gt; "Tastiera" & gt; "Scorciatoie" & gt; "Scorciatoie personalizzate". Fai clic su "+" e aggiungi il comando:

    python3 /path/to/custom_screenshot.py
    

Nota

Lo script usa wmctrl per determinare la posizione della finestra. Su diversi gestori di finestre, tuttavia, l'output del comando wmctrl -lG mostra piccole differenze nella posizione y della finestra. Queste differenze vengono eliminate dal valore, impostato nella riga deviation= dello script. Il valore attualmente impostato (0) è appropriato per Unity e KDE.

Anche lo script è testato, e funziona bene su Xfce e Gnome , ma il valore deve essere modificato, come spiegato nella sezione principale dello script.

Lo script

#!/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])
    
risposta data Jacob Vlijm 28.01.2015 - 11:43
2

Puoi anche utilizzare la combinazione di pulsanti Maiusc e PrtScr per realizzare lo screenshot di un'area specifica con dimensioni definite dall'utente.

Basta premere la combinazione e usare il cursore modificato (diventa simile a un segno più) per scegliere l'area per lo screenshot.

    
risposta data manishraj2011 03.02.2015 - 15:35
2

Puoi fare screenshot con l'utility di cattura della schermata della riga di comando scrot :

scrot -s  

o

scrot -ub -d 5  

Il secondo comando mette un bordo intorno alla finestra selezionata, che ha una larghezza piacevole in relazione alla dimensione della finestra. L'opzione -d 5 rappresenta il ritardo e ti dà un ritardo di 5 secondi per selezionare la finestra nello screenshot.

Installa con questo:

sudo apt-get install scrot

Riferimento: Manuale di Ubuntu - scrot

    
risposta data urosjarc 31.01.2015 - 14:54

Leggi altre domande sui tag