Come misuro le dimensioni sullo schermo?


29

Ho un'immagine sullo schermo e voglio misurarne la larghezza. Ovviamente posso usare un righello , ma è stravagante e lento. C'è qualcosa in cui posso fare clic su un tasto di scelta rapida, trascinare fuori un'area e mi dirà l'altezza e la larghezza di quell'area?

Qualcosa di simile a Page Ruler per Google Chrome.

Attualmente sto usando Shift+ PrtScne trascinando l'area, salvando l'immagine, quindi andare su Proprietà per scoprirne l'altezza e la larghezza.

Risposte:


10

Usando l'otturatore

Prima installa Shutter se non lo hai installato.

sudo apt-get install shutter

Apri le preferenze in Modifica -> Preferenze e seleziona la scheda Comportamento.
Seleziona "Avvia otturatore all'accesso" e "Nascondi finestra al primo avvio". Vedi lo screenshot qui sotto:

inserisci qui la descrizione dell'immagine

uso

  1. Assicurati che l'icona del pannello dell'otturatore sia visibile e seleziona la tua finestra o qualunque cosa tu voglia misurare.
  2. Fare clic sull'icona dell'otturatore e selezionare 'selezione'.

inserisci qui la descrizione dell'immagine

  1. Seleziona il punto iniziale e trascina fino al punto finale. L'intera finestra si oscurerà tranne la selezione. Puoi spostare i bordi per ottenere più risultati "al punto".
  2. L'otturatore fornirà una finestra di dialogo con le coordinate X e Y e le dimensioni (che è quello che vuoi) della selezione. Vedi lo screenshot qui sotto nell'angolo in alto a sinistra di un esempio.

inserisci qui la descrizione dell'immagine

  1. Uno screenshot ingrandito che mostra che è 727 px per 367 px:

inserisci qui la descrizione dell'immagine

  1. Infine, basta premere Escper chiudere la selezione e nascondere l'otturatore.
  2. Continua con quello che stavi facendo.

Molto pulito! Mi piace la funzione mirino qui! Molto ricco di funzionalità - può richiedere Window, selezione, ritardo, ecc.
dayuloli,

42

Come funziona

Lo script seguente misura la dimensione di un'area, tra due posizioni del puntatore del mouse.

Funziona come segue:

  1. Posiziona il puntatore del mouse nella prima posizione (senza fare clic)

    inserisci qui la descrizione dell'immagine

  2. Premere la combinazione di tasti desiderata (vedere più avanti)

  3. Posiziona il mouse in seconda posizione (di nuovo senza fare clic)

    inserisci qui la descrizione dell'immagine

  4. Premi di nuovo la combinazione di tasti. Una notifica ti dirà la dimensione esatta (px) dell'area.

    inserisci qui la descrizione dell'immagine

Opzioni

Puoi scegliere (rimuovendo il commento da una delle righe) come desideri ricevere una notifica; o con una notifica:

inserisci qui la descrizione dell'immagine

O una finestra informativa Zenity:

inserisci qui la descrizione dell'immagine

(Gli esempi provengono da aree diverse)

Come usare

  1. Lo script utilizza xdotool:

    sudo apt-get install xdotool
    
  2. Copia lo script seguente in un file vuoto, decommenta una delle righe:

    command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
    

    (essere avvisato notify-senddall'opzione)

    o:

    command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
    

    per l' Zenityopzione.

  3. Salvare lo script in ~/bin(probabilmente sarà necessario creare la directory) come measure_area(senza estensione) e renderlo eseguibile .

  4. Aggiungi una combinazione di tasti a tua scelta per eseguire lo script: Scegli: Impostazioni di sistema> "Tastiera"> "Scorciatoie"> "Scorciatoie personalizzate". Fai clic su "+" e aggiungi il comando:

    measure_area
    

Gli appunti

  • Dovrai prima disconnetterti / accedere
  • Non fa differenza ciò che prendi come prima / seconda posizione; lo script misura valori assoluti .

Il copione

#!/usr/bin/env python3
import subprocess
import os
import math

home = os.environ["HOME"]
area = home+"/"+".measure_area.txt"

def get_pos():
    pos_data = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8")
    return [m[2:] for m in pos_data.split()[:2]]

def confirm():
    get = subprocess.check_output(["xrandr", "--verbose"]).decode("utf-8").split()
    for s in [get[i-1] for i in range(len(get)) if get[i] == "connected"]:
        br_data = float(get[get.index("Brightness:")+1])
        brightness = lambda br: ["xrandr", "--output", s, "--brightness", br]
        flash = ["sleep", "0.1"]
        for cmd in [brightness(str(br_data-0.1)), flash, brightness(str(br_data))]:
            subprocess.call(cmd)

if not os.path.exists(area):
    with open(area, "wt") as measure:
        measure.write(str(get_pos()))
    confirm()
else:
    second = get_pos()
    with open(area) as first_m:
        try:
            first = eval(first_m.read())
            w = int(math.fabs(int(second[0]) - int(first[0])))
            h = int(math.fabs(int(second[1]) - int(first[1])))
            #--- uncomment either one of the lines below:
            # command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
            command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
            #---
            confirm()
        except SyntaxError:
            text = "Please try again, there was an error in the data"
            command = ['zenity', '--info', '--title', 'Please try again', '--text', text]
        subprocess.Popen(command)
    os.remove(area)

Spiegazione

Quando lo script viene chiamato per la prima volta, ottiene la posizione corrente del mouse con il xdotoolcomando:

xdotool getmouselocation

Quindi salva la posizione in un file (invisibile) .measure_area.txt, in attesa della seconda chiamata.
Alla seconda chiamata, legge il file, lo rimuove e confronta le x/ycoordinate memorizzate con quelle più recenti e calcola la dimensione dell'area tra loro.

modificare

Aggiornato lo script con una serie di miglioramenti:

  • Ottimizzato subprocess.Popen()/ subprocess.check_output()comandi (grazie a @muru, @Trengot)
  • Aggiunta una procedura di riparazione nel caso in cui qualcosa sia andato storto con il primo file di dati (ad es. Se l'utente ha provato a eseguire lo script senza averlo xdotoolinstallato)
  • Aggiunto un piccolo dim-flash dello schermo di conferma quando si preme la combinazione di tasti per le prime coordinate. Sembra un po 'più user-friendly dare all'utente una sorta di conferma dell'azione.

1
Eccezionale! Provato proprio ora, funziona perfettamente! Grazie! Meriti davvero una medaglia!
Dayuloli,

2
@dayuloli Grazie per la domanda! Mi piace fare cose come questa.
Jacob Vlijm,

Bello! +1. Curioso: perché Popen(['/bin/bash',...invece di Popen(['zenity', '--info', ...?
Muru,

1
Armeggiare con le virgolette? Oo command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]; subprocess.Popen(command)richiede molto meno scherzi con , 'e "penso.
Muru,

1
Potrebbe essere fatta la stessa modifica xdotools? Qualcosa del genere check_output(['xdotools', 'getmouseposition'])?
Holloway,

2

Utilizzando slop

Un altro modo semplice per determinare l'area di una selezione è utilizzando slop(Seleziona operazione), un'utilità della riga di comando "che richiede una selezione dall'utente e stampa la regione su stdout".

slopè uno strumento relativamente nuovo e non è stato ancora impacchettato per Debian / Ubuntu. Così com'è, dovrai compilarlo dalla fonte:

sudo apt-get install build-essential cmake libxext-dev
git clone https://github.com/naelstrof/slop.git
cd slop
cmake ./
make && sudo make install

L'installazione è la parte più difficile. slopdi per sé è in realtà molto facile da lavorare. Ad esempio, il seguente one-liner ti chiederà di selezionare un'area dello schermo e visualizzerà entrambi il risultato come notifica e lo scriverà negli Appunti:

eval $(slop -t 0 -b 1) && notify-send  "Selection info" "Area: ${W} x ${Y}px \n Position: X = ${X}px, Y = ${Y}px" && echo ${W}x${H} | xsel -bi

Immagine dello schermo:

inserisci qui la descrizione dell'immagine

Una rapida suddivisione dei comandi utilizzati:

  • slop -t 0 -b 1- richiede all'utente di selezionare un'area dello schermo; non selezionare finestre complete ( -t 0), impostare il bordo di selezione su 1px ( -b 1)
  • eval $(...)- leggere l'output di slopin variabili
  • notify-send ... - invia la notifica della GUI con le informazioni sull'area selezionata
  • echo ${W}x${H} | xsel -bi- copia le dimensioni negli appunti (richiede xselsudo apt-get install xsel)
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.