Gibt es ein Befehlszeilenprogramm, das die Farbe des Pixels basierend auf den Bildschirmkoordinaten zurückgibt?

11

Gibt es eine Kommandozeilen - Tool der Farbwert eines Pixels zurückkommt , beruht allein auf ihren Bildschirm-Koordinaten .

Gibt es so ein Werkzeug?

(Außerdem: Das Tool sollte keine Benutzeraktion erfordern. Es soll in einer Schleife in einem Skript ausgeführt werden.)

Peter.O
quelle
Mögliches Duplikat des Werkzeugs, um einfach ein Pixel auf dem Bildschirm auszuwählen und Farbe und absolute Koordinaten zu erhalten
Ciro Santilli 21 改造 中心 法轮功 六四

Antworten:

14

Sie können das Programm grabc verwenden . Der Mauszeiger wird in einem Fadenkreuz gedreht und es werden HTML- und RGB-Werte der ausgewählten Farbe zurückgegeben.

sudo apt-get install grabc

Nachteil: Es ist nicht möglich, pixelgenaue Auswahlen vorzunehmen, da das Fadenkreuz nicht dünn genug ist.


Sie können auch ein Python-Skript erstellen, etwa:

#!/usr/bin/python -W ignore::DeprecationWarning
import sys
import gtk

def get_pixel_rgb(x, y):
    pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, 1, 1)
    pixbuf.get_from_drawable(gtk.gdk.get_default_root_window(),
                             gtk.gdk.colormap_get_system(), 
                             x, y, 0, 0, 1, 1)
    return pixbuf.get_pixels_array()[0][0]

print get_pixel_rgb(int(sys.argv[1]), int(sys.argv[2]))

Machen Sie es ausführbar und führen Sie es pixel_rgb="$(/path/to/script.py x y)"in Ihrem Bash-Skript aus. Natürlich müssen Sie das Skript so ändern, wie Sie es benötigen, eine Fehlerbehandlung hinzufügen und so weiter.

PS: Ich bin mir nicht ganz sicher, ob Sie etwas gegen die DeprecationWarning unternehmen können, also habe ich sie in der ersten Zeile deaktiviert.

htorque
quelle
Vielen Dank an htorque, aber ich habe wieder zu spät festgestellt, dass ich eine wichtige Anforderung ausgelassen habe ... Ich möchte, dass sie in einer Schleife in einem Batch-Skript automatisch ausgeführt wird. Vielen Dank für das Heads-up zu dieser kleinen App. Es wird auf jeden Fall irgendwann nützlich sein .. (aber nicht für meine aktuelle Naht, wo "
unbesetzt
htorque: Ihr Python-Skript passt perfekt zu meinen geänderten Spezifikationen (typischer Benutzer! Immer die Spezifikationen ändern! :) ... direkt an den Koordinaten zu arbeiten ist viel besser für meinen Prozess "Finde das Pixelmuster" ... und dann kann ich einfach den Cursor auf die gerade gefundenen Koordinaten xmacro und dann xmacro einen Rechtsklick machen; genau am Ziel .... Einfach! (für die Pythonisten :)
Peter.O
Erhalten no module named numpy.core.multiarray; Segmentation fault. Welcher Teil ist von diesem Modul abhängig?
Drew Chapin
6

Dies ist etwas umständlich, aber Sie können dies mit xdotool erreichen, mit dem Sie mit der Maus interagieren können, und mit grabc, das die Farbe von einer Stelle erhält, auf die auf dem Bildschirm geklickt wird.

sudo apt-get install xdotool grabc

Führen Sie zuerst grabc aus, aber im Hintergrund

grabc &

Führen Sie dann mit xdotool einen Mausklick durch

xdotool click 1

Der Klick wird vom Grabc-Cursor erfasst und der Hintergrundprozess mit der Ausgabe der Farbe.

misterben
quelle
Interessant, misterben .. "plump" kann okay sein;) Ich habe kürzlich ein Sprichwort gehört. "schwarze Katze, weiße Katze, getigerte Katze ... solange sie die Maus fängt" ... aber ich erinnere mich vage, dass ich auf einer Info-Seite des Makro-Tools etwas über Pixel gesehen habe (aber vielleicht nur in Bezug auf Koordinaten) ... Ich möchte eine Pixelzeile über den Bildschirm abfragen und möchte den durch grabc verursachten Cursorwechsel vermeiden ... Jetzt, wo ich "grabc" in Aktion gesehen habe, möchte ich lieber etwas, das greift Die Farbe basiert auf Koordinaten (ich habe das ziemlich oft in Windows gemacht :( ... Ich hoffe, es gibt etwas Ähnliches für Linux :)
Peter.O
Sie können xdotool verwenden, um die Zeigerkoordinaten abzurufen und sie mit dem Python-Skript von htorque zu verwenden. xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'greift nach den Koordinaten und bereinigt sie auf durch Leerzeichen getrennte xy-Werte, um sie an dieses Skript weiterzuleiten.
Misterben
misterben, danke für deine hilfe, ich habe mehr über backgrouding gelernt (sehr praktisch) .... ich habe es nicht bemerkt, als ich die frage zum ersten mal gestellt habe, aber die methode "farbe durch koordinaten bekommen" hat sich herausgestellt sei der Weg zu gehen.
Peter.O
Ich habe gerade versucht, dein xdtool getmouselocation... sehr nett, danke ... Sed's Nützlichkeit überrascht mich immer wieder!
Peter.O
3

Eine andere Lösung mit xwdund xdotool:

xwd -root -silent | convert xwd:- -depth 8 -crop "1x1+$X+$Y" txt:- | grep -om1 '#\w\+'

wo $Xund $Ysind deine Koordinaten.

Als Teil von Xorg xwdsollte auf Ihrem System vorinstalliert sein. xdotoolkann installiert werden mit:

sudo apt-get install xdotool 

Basierend auf der Antwort von @ Christian auf eine Frage und Antwort zu StackOverflow und diesem Thread von imagemagick.org .

Glutanimat
quelle
Vielen Dank, es funktioniert, obwohl es viel langsamer ist (echte 0,363s Benutzer 0,456s sys 0,064s) als das Python-Skript von htorque (echte 0,097s Benutzer 0,072s sys 0,020s).
Peter.O
@ Peter.O Ja, aber das stimmt nur, wenn Python und die importierten Bibliotheken bereits in Ihrem Speicher zwischengespeichert sind. Bei einem Kaltstart ist das Python-Skript erheblich langsamer. Wenn Ihr Skript nur gelegentlich ausgeführt wird, möchten Sie möglicherweise meine Lösung verwenden. PS: Sie können die Dinge beschleunigen, wenn Sie wissen, welches Fenster Sie überprüfen möchten. xwdunterstützt das Erstellen von Screenshots bestimmter Fenster-IDs, sodass Sie die Fenster-ID (z. B. xdotool search --name "$Win" | head -n1) abfragen und dann an xwdmit übergeben können xwd -id "$WinID" -silent | .... Hinweis: In diesem Fall sind die Koordinaten relativ zum Fenster.
Glutanimate
2

Ich habe ein Python-Modul für solche Operationen namens Macropolo geschrieben. Aber es macht viel mehr als nur die Farbe eines Pixels auf dem Bildschirm.

Hier ist der Forumsbeitrag, in dem ich ihn geteilt habe: http://ubuntuforums.org/showthread.php?t=2155281

Das Modul verfügt über viele Funktionen, mit denen Sie beispielsweise die Anzahl der Pixel mit einer bestimmten Farbe in einem Bereich des Bildschirms zählen, nach Pixelfarben im Bereich suchen, auf ein Pixel warten oder ein Bereich des Bildschirms eine bestimmte Farbe haben kann Farbe, warten Sie auf die Pixelfarbe und führen Sie während des Wartens eine andere Funktion aus (z. B. bewegen Sie den Cursor, um den Bildschirm nicht auszuschalten, während Sie auf eine bestimmte Farbe warten).

Aber wie gesagt, es macht noch viel mehr Dinge, wie das Simulieren von Mausklicks und Tastaturen, das Aufnehmen von Screenshots des Bildschirmbereichs und vieles mehr.

Hytromo
quelle