Wie messe ich die Abmessungen auf dem Bildschirm?

29

Ich habe ein Bild auf dem Bildschirm und möchte dessen Breite messen. Natürlich kann ich ein Lineal verwenden , aber das ist wunderlich und langsam. Gibt es eine Möglichkeit, auf eine Tastenkombination zu klicken, einen Bereich herauszuziehen und die Höhe und Breite dieses Bereichs zu bestimmen?

Ähnlich wie Page Ruler für Google Chrome.

Gegenwärtig benutze ich Shift+ PrtScnund ziehe den Bereich heraus, speichere das Bild und gehe dann zu Eigenschaften, um seine Höhe und Breite herauszufinden.

Dayuloli
quelle

Antworten:

10

Verschluss benutzen

Installieren Sie zuerst Shutter, wenn Sie es nicht installiert haben.

sudo apt-get install shutter

Öffnen Sie die Einstellungen unter Bearbeiten -> Einstellungen und wählen Sie die Registerkarte Verhalten.
Aktivieren Sie "Auslöser bei Anmeldung starten" und "Fenster beim ersten Start ausblenden". Siehe Screenshot unten:

Bildbeschreibung hier eingeben

Verwendung

  1. Vergewissern Sie sich, dass das Verschlusssymbol sichtbar ist, und wählen Sie Ihr Fenster oder was auch immer Sie messen möchten.
  2. Klicken Sie auf das Auslösersymbol und wählen Sie "Auswahl".

Bildbeschreibung hier eingeben

  1. Wählen Sie Ihren Startpunkt und ziehen Sie ihn an Ihren Endpunkt. Das gesamte Fenster wird mit Ausnahme Ihrer Auswahl dunkler. Sie können die Ränder verschieben, um mehr Ergebnisse auf den Punkt zu bringen.
  2. Der Shutter öffnet ein Dialogfenster mit den X- und Y-Koordinaten und der gewünschten Größe der Auswahl. Siehe Screenshot unten in der oberen linken Ecke eines Beispiels.

Bildbeschreibung hier eingeben

  1. Ein verkleinerter Screenshot zeigt 727px mal 367px:

Bildbeschreibung hier eingeben

  1. Zum Schluss drücken Sie einfach Esc, um die Auswahl zu verwerfen und den Auslöser auszublenden.
  2. Fahren Sie mit dem fort, was Sie getan haben.
Parto
quelle
Sehr gepflegt! Ich mag das Fadenkreuz hier! Sehr voll ausgestattet - kann Fenster, Auswahl, Verspätung usw. nehmen
Dayuloli
42

Wie es funktioniert

Das folgende Skript misst die Größe eines Bereichs zwischen zwei Positionen des Mauszeigers.

Es funktioniert wie folgt:

  1. Positionieren Sie den Mauszeiger an der ersten Position (ohne zu klicken)

    Bildbeschreibung hier eingeben

  2. Drücken Sie die Tastenkombination Ihrer Wahl (siehe weiter unten)

  3. Platziere die Maus in der zweiten Position (wieder ohne zu klicken)

    Bildbeschreibung hier eingeben

  4. Drücken Sie erneut Ihre Tastenkombination. Eine Benachrichtigung informiert Sie über die genaue Größe (px) des Bereichs.

    Bildbeschreibung hier eingeben

Optionen

Sie können wählen (indem Sie eine der Zeilen auskommentieren), wie Sie benachrichtigt werden möchten. entweder durch eine Benachrichtigung:

Bildbeschreibung hier eingeben

Oder ein Zenity-Infofenster:

Bildbeschreibung hier eingeben

(Die Beispiele stammen aus verschiedenen Bereichen)

Wie benutzt man

  1. Das Skript verwendet xdotool:

    sudo apt-get install xdotool
    
  2. Kopieren Sie das folgende Skript in eine leere Datei und kommentieren Sie eine der folgenden Zeilen aus:

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

    (durch die notify-sendOption benachrichtigt werden )

    oder:

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

    für die ZenityOption.

  3. Speichern Sie das Skript unter ~/bin(wahrscheinlich müssen Sie das Verzeichnis erstellen) als measure_area(keine Erweiterung) und machen Sie es ausführbar .

  4. Fügen Sie eine Tastenkombination Ihrer Wahl hinzu, um das Skript auszuführen: Wählen Sie: Systemeinstellungen> "Tastatur"> "Verknüpfungen"> "Benutzerdefinierte Verknüpfungen". Klicken Sie auf das "+" und fügen Sie den Befehl hinzu:

    measure_area
    

Anmerkungen

  • Sie müssen sich zuerst ausloggen / einloggen
  • Es macht keinen Unterschied, was Sie als erste / zweite Position einnehmen; Das Skript misst absolute Werte.

Das Drehbuch

#!/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)

Erläuterung

Wenn das Skript zum ersten Mal aufgerufen wird, erhält es die aktuelle Mausposition mit dem xdotoolBefehl:

xdotool getmouselocation

Anschließend speichert es die Position in einer (unsichtbaren) Datei .measure_area.txtund wartet auf den zweiten Anruf.
Beim zweiten Aufruf liest es die Datei, entfernt sie, vergleicht die gespeicherten x/yKoordinaten mit den neuesten und berechnet die Größe des Bereichs zwischen ihnen.

Bearbeiten

Das Skript wurde mit einer Reihe von Verbesserungen aktualisiert:

  • Optimiert subprocess.Popen()/ subprocess.check_output()Befehle (dank @muru, @Trengot)
  • Reparaturvorgang für den Fall hinzugefügt, dass mit der First-Data-Datei ein Fehler aufgetreten ist (z. B. wenn der Benutzer das Skript zum ersten Mal ausgeführt hat, ohne es xdotoolinstalliert zu haben)
  • Beim Drücken der Tastenkombination für die ersten Koordinaten wurde ein kleiner blinkender Bestätigungsbildschirm hinzugefügt. Es scheint ein bisschen benutzerfreundlicher zu sein, dem Benutzer eine Art Bestätigung der Aktion zu geben.
Jacob Vlijm
quelle
1
Genial! Versuchte es gerade, funktioniert perfekt! Vielen Dank! Du verdienst wirklich eine Medaille!
Dayuloli
2
@dayuloli Danke für die Frage! Ich liebe es solche Sachen zu machen.
Jacob Vlijm
Nett! +1. Neugierig: Warum Popen(['/bin/bash',...statt Popen(['zenity', '--info', ...?
muru
1
Mit Anführungszeichen fummeln? Oo command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]; subprocess.Popen(command)muss viel weniger mit 'und rumspielen ", denke ich.
muru
1
Könnte die gleiche Änderung vorgenommen werden xdotools? So etwas wie check_output(['xdotools', 'getmouseposition'])?
Holloway
2

Slop benutzen

Eine andere einfache Möglichkeit, den Bereich einer Auswahl zu bestimmen, ist die Verwendung von slop(Select Operation), einem Befehlszeilendienstprogramm, "das eine Auswahl vom Benutzer abfragt und den Bereich auf stdout druckt".

slopist ein vergleichsweise neues Tool und wurde noch nicht für Debian / Ubuntu gepackt. So wie es aussieht, müssen Sie es aus dem Quellcode kompilieren:

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

Die Installation ist der schwierigste Teil. slopselbst ist eigentlich sehr einfach zu bearbeiten. Der folgende Einzeiler fordert Sie beispielsweise auf, einen Bildschirmbereich auszuwählen, und zeigt das Ergebnis als Benachrichtigung an und schreibt es in die Zwischenablage:

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

Bildschirmfoto:

Bildbeschreibung hier eingeben

Eine kurze Aufschlüsselung der verwendeten Befehle:

  • slop -t 0 -b 1- den Benutzer auffordern, einen Bildschirmbereich auszuwählen; wähle keine vollen Fenster aus ( -t 0), setze Auswahlrahmen auf 1px ( -b 1)
  • eval $(...)- Ausgabe von slopin Variablen lesen
  • notify-send ... - GUI-Benachrichtigung mit Informationen zum ausgewählten Bereich senden
  • echo ${W}x${H} | xsel -bi- Maße in die Zwischenablage kopieren (erfordert xselsudo apt-get install xsel)
Glutanimate
quelle