Czy istnieje narzędzie wiersza polecenia, które zwraca kolor piksela na podstawie współrzędnych ekranu?


11

Czy istnieje narzędzie wiersza polecenia zwraca wartość koloru piksela, opartą wyłącznie na jego współrzędnych ekranowych .

Czy istnieje takie narzędzie?

(Również: Narzędzie nie powinno wymagać żadnych działań użytkownika. Ma działać w pętli w skrypcie.)


Odpowiedzi:


14

Możesz użyć programu grabc . Zmieni wskaźnik myszy w celownik i zwróci wartości HTML i RGB wybranego koloru.

sudo apt-get install grabc

Wada: nie można dokonywać dokładnych pikseli, ponieważ celownik nie jest wystarczająco cienki.


Możesz także utworzyć skrypt Pythona, taki jak:

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

uczyń go wykonywalnym i uruchom pixel_rgb="$(/path/to/script.py x y)"w swoim skrypcie bash. Oczywiście musisz zmienić skrypt tak, jak potrzebujesz, dodać obsługę błędów i tak dalej.

PS: Nie jestem do końca pewien, czy możesz coś zrobić z DeprecationWarning, więc wyłączyłem go w pierwszej linii.


Dzięki htorque, ale znów uświadomiłem sobie, że pominąłem znaczący wymóg ... Chcę, aby działał on automatycznie w pętli w skrypcie wsadowym. Dzięki za heads-up w tej małej aplikacji. Na pewno przyda się kiedyś .. (ale nie dla mojej obecnej sutuacji, gdzie będzie biegał „
— bezzałogowy

htorque: Twój skrypt w Pythonie idealnie pasuje do moich poprawionych specyfikacji (typowy użytkownik! zawsze zmienia specyfikację! :) ... praca bezpośrednio na współrzędnych jest znacznie lepsza dla mojego procesu „znajdź wzór piksela” ... a następnie mogę po prostu xmacro przesunąć kursor do właśnie znalezionych współpracowników, a następnie xmacro kliknąć prawym przyciskiem myszy; dokładnie na cel .... Łatwo! (dla
— Pythonistów

Uzyskiwanie no module named numpy.core.multiarray; Segmentation fault. Która część zależy od tego modułu?
— Drew Chapin,

6

Jest to trochę nieporadne, ale można to osiągnąć za pomocą xdotool, który pozwala na interakcję z myszą i grabc, który uzyskuje kolor z klikniętej na ekranie lokalizacji.

sudo apt-get install xdotool grabc

Najpierw uruchom grabc, ale w tle

grabc &

Następnie wykonaj kliknięcie myszką za pomocą xdotool

xdotool click 1

Kliknięcie zostanie przechwycone przez kursor grabc i proces tła z wyjściem koloru.


Ciekawe, misterben .. „cludgy” może być w porządku;) Niedawno usłyszałem powiedzenie. „czarny kot, biały kot, pręgowany kot… tak długo, jak łapie mysz”… ale niejasno pamiętam, że widziałem coś na jednej ze stron informacyjnych narzędzia makro o pikselach (ale może chodziło tylko o współrzędne) ... Chcę zapytać o linię pikseli na ekranie i chciałbym uniknąć przełączania kursora spowodowanego przez grabc ... Teraz, gdy widziałem „grabc” w akcji, wolę coś, co chwyta kolor oparty na współrzędnych (robiłem to dość często w systemie Windows :( ... Mam nadzieję, że jest coś podobnego dla Linuksa :)
— Peter.O

Możesz użyć xdotool, aby uzyskać współrzędne wskaźnika i użyć ich ze skryptem pythonowym htorque. xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'weźmie współrzędne i wyczyści je do rozdzielonych spacjami wartości xy, aby zasilić ten skrypt.
— misterben,

misterben, dzięki za pomoc, nauczyłem się więcej o tworzeniu tła (bardzo przydatne) .... Nie zdawałem sobie z tego sprawy, kiedy zadałem pytanie, ale metoda „uzyskaj kolor przez współrzędne” okazała się być właściwą drogą.
— Peter.O,

Właśnie próbowałem xdtool getmouselocation... bardzo dobrze, dzięki ... Przydatność sed wciąż mnie zadziwia!
— Peter.O,

3

Inne rozwiązanie, wykorzystujące xwdi xdotool:

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

gdzie $Xi $Ysą twoje współrzędne.

W ramach Xorg xwdpowinien zostać zainstalowany fabrycznie w systemie. xdotoolmoże być zainstalowany z:

sudo apt-get install xdotool 

Na podstawie odpowiedzi @ Christian na pytania i odpowiedzi StackOverflow oraz ten wątek imagemagick.org .


Dzięki, działa, choć jest znacznie wolniejszy (rzeczywisty użytkownik 0,363s 0,466s sys 0,064s) niż skrypt htorque (prawdziwy użytkownik 0,097s 0,072s sys 0,020s).
— Peter.O,

@ Peter.O Tak, ale to prawda, tylko jeśli python i importowane biblioteki są już buforowane w pamięci. Przy zimnym starcie skrypt Pythona będzie znacznie wolniejszy. Jeśli więc skrypt działa tylko sporadycznie, możesz skorzystać z mojego rozwiązania. PS: Możesz przyspieszyć, jeśli wiesz, które okno chcesz sprawdzić. xwdPodpory robienia zrzutów ekranu konkretnych identyfikatorów okiennych, więc można zapytać identyfikator okna (np xdotool search --name "$Win" | head -n1), a następnie przekazać je do xwdz xwd -id "$WinID" -silent | .... Uwaga: w tym przypadku współrzędne byłyby względne względem okna.
— Glutanimate,

2

Napisałem moduł Pythona dla takich operacji, zwany Macropolo. Ale robi o wiele więcej niż tylko uzyskanie koloru piksela na ekranie.

Oto post na forum, w którym go udostępniłem: http://ubuntuforums.org/showthread.php?t=2155281

Moduł ma wiele funkcji, które pozwalają np. Policzyć ilość pikseli, które mają określony kolor w obszarze ekranu, wyszukać kolory w obszarze, poczekać na piksel lub obszar ekranu ma określony kolor, poczekaj na kolor piksela i uruchom inną funkcję podczas oczekiwania (np. przesuń kursor, aby nie dopuścić do wyłączenia ekranu podczas oczekiwania na określony kolor).

Ale, jak powiedziałem, robi o wiele więcej rzeczy, takich jak symulowanie kliknięć myszką i klawiaturą, robienie zrzutów ekranu obszaru i więcej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.