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.)

Peter.O
źródło
Możliwy duplikat narzędzia do łatwego wybierania piksela na ekranie i uzyskiwania kolorów oraz współrzędnych bezwzględnych
Ciro Santilli 21 病毒 审查 六四 事件 法轮功

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.

htorque
źródło
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.

misterben
źródło
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 .

Glutanimate
źródło
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.

hytromo
źródło