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


17

Ho bisogno di uno strumento che esegua le seguenti operazioni: selezionando una finestra, realizzerò uno screenshot di quella finestra con un riempimento x , come nella seguente immagine:

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

Come fare uno screenshot del genere, automaticamente? Ho provato con Shutter, ma non sono riuscito a trovare un'impostazione simile lì. Tuttavia, supporta i plug-in. Quindi un plugin potrebbe essere quello di ritagliare la finestra in questo modo.


Posso chiederti quale strumento hai usato per creare quel modello? Sembra abbastanza bello :)
Seth

1
@Seth Regole InkScape! Non sono un esperto, ma mi piace creare cose come questa per i miei progetti. Sembra buono per gli occhi. :-) Ecco la versione PNG e quella SVG . Questo repository contiene altre cose create con InkScape.
Ionică Bizău,

Risposte:


19

Script, usando l'otturatore

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

Se rendi lo script di seguito disponibile sotto una combinazione di tasti (spiegazione più avanti), apparirà una finestra che ti permetterà di impostare i margini dello screenshot a sinistra, a destra, in alto e in basso , separati da uno spazio:

inserisci qui la descrizione dell'immagine

risultato:

inserisci qui la descrizione dell'immagine

o:

inserisci qui la descrizione dell'immagine

risultato:

inserisci qui la descrizione dell'immagine

eccetera.

Ho impostato il valore predefinito su 30 px, ma è possibile impostare qualsiasi valore predefinito (vedere di seguito).

Come usare

  • Lo script usa Shuttere wmctrl. Supponendo che Shuttersia già sul tuo sistema (da quando lo hai menzionato), installa wmctrl:

    sudo apt-get install wmctrl
    

    NB Se usi Kubuntu , Zenitynon è installato di default:

    sudo apt-get install zenity
    
  • Copia lo script seguente in un file vuoto. Se lo desideri, puoi modificare il "default" marge 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> "Tastiera"> "Scorciatoie"> "Scorciatoie personalizzate". Fai clic su "+" e aggiungi il comando:

    python3 /path/to/custom_screenshot.py
    

Nota

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

Lo script è anche testato e funziona bene su Xfcee Gnome, ma il valore deve essere cambiato poi, come spiegato nella sezione testa dello script.

Il copione

#!/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
Non penso che esista - Ora esiste! Grazie mille!
Ionică Bizău,

1
@ IonicăBizău sei il benvenuto! Grazie per la domanda, è stato divertente da fare. Ho apportato una piccola correzione alla spiegazione delle impostazioni predefinite.
Jacob Vlijm,

1
@ IonicăBizău ha trovato (e corretto) un bug nella geometria.
Jacob Vlijm,

2
Bello, bello, bello! L'ho impostato come comando che eseguo quando premo il pulsante speciale sul mio notebook ASUS. :-)
Ionică Bizău,

2

È inoltre possibile utilizzare la combinazione dei pulsanti Maiusc e PrtScr per acquisire una schermata di un'area specifica con dimensioni definite dall'utente.

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


Di solito, non riesco a controllare le mie mani per impostare esattamente questi margini. :-) Ma +1 per questa scorciatoia, non lo sapevo.
Ionică Bizău,

2

È possibile acquisire schermate con l' scrotutilità di acquisizione dello schermo da riga di comando:

scrot -s  

o

scrot -ub -d 5  

Il secondo comando mette un bordo attorno alla finestra selezionata, che ha una buona larghezza in relazione alla dimensione della finestra. Il-d 5 opzione sta per ritardo e ti dà un ritardo di 5 secondi per selezionare la finestra da inserire nello screenshot.

Installa con questo:

sudo apt-get install scrot

Riferimento: Manuale di Ubuntu - scrot

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.