¿Existe una herramienta de línea de comandos que devuelve el color del píxel en función de las coordenadas de la pantalla?

11

¿Existe una herramienta de línea de comando que devuelve el valor de color de un píxel, basado únicamente en sus coordenadas de pantalla ?

¿Existe tal herramienta?

(Además: la herramienta no debe requerir ninguna acción del usuario. Se debe ejecutar en un bucle en un script).

Peter.O
fuente
Posible duplicado de la herramienta para seleccionar fácilmente un píxel en la pantalla y obtener color y coordenadas absolutas
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Respuestas:

14

Puedes usar el programa grabc . Girará el puntero del mouse en forma de cruz y devolverá los valores HTML y RGB del color seleccionado.

sudo apt-get install grabc

Desventaja: no es posible hacer selecciones exactas de píxeles debido a que la retícula no es lo suficientemente delgada.


También puede crear un script de Python, algo como:

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

hazlo ejecutable y ejecútalo pixel_rgb="$(/path/to/script.py x y)"en tu script bash. Por supuesto, necesitaría alterar el script de la forma en que lo necesita, agregar algo de manejo de errores y demás.

PD: No estoy exactamente seguro de que pueda hacer algo con respecto a DeprecationWarning, así que lo desactivé en la primera línea.

htorque
fuente
Gracias htorque, pero nuevamente me doy cuenta demasiado tarde de que he omitido un requisito importante ... Quiero que se ejecute de forma autónoma en un bucle en un script por lotes. Así que gracias por el aviso de esta pequeña aplicación. Definitivamente será útil en algún momento ... (pero no para mi sutugación actual donde se ejecutará "sin tripulación")
Peter.O
htorque: Su script de Python se ajusta perfectamente a mis especificaciones modificadas (¡usuario típico! ¡Siempre cambiando las especificaciones! :) ... trabajar directamente en las coordenadas es mucho mejor para mi proceso de "encontrar el patrón de píxeles" ... y luego puedo simplemente xmacro el cursor a las coordenadas recién encontradas, y luego xmacro un clic derecho; justo en el blanco ... ¡Fácil! (para los Pythonistas :)
Peter.O
El conseguir no module named numpy.core.multiarray; Segmentation fault. ¿Qué parte depende de este módulo?
Drew Chapin
6

Esto es un poco confuso, pero puede lograrlo con xdotool, que le permite interactuar con el mouse, y grabc, que obtiene el color de una ubicación en la que se hace clic en la pantalla.

sudo apt-get install xdotool grabc

Primero ejecuta grabc pero en segundo plano

grabc &

Luego realice un clic con el mouse usando xdotool

xdotool click 1

El clic será capturado por el cursor de grabc y el proceso de fondo con salida del color.

misterben
fuente
Interesante, misterben .. "cludgy" puede estar bien;) Escuché un dicho recientemente. "gato negro, gato blanco, gato atigrado ... siempre y cuando atrape el mouse" ... pero recuerdo vagamente haber visto algo en una de las páginas de información de la macro-herramienta sobre píxeles (pero tal vez solo se trataba de coordenadas) ... Quiero consultar una línea de píxeles en la pantalla, y me gustaría evitar el cambio de cursor causado por grabc ... Ahora que he visto "grabc" en acción, prefiero algo que agarre el color basado en coordenadas (lo he hecho con bastante frecuencia en Windows :( ... espero que haya algo similar para Linux :)
Peter.O
Puede usar xdotool para obtener las coordenadas del puntero y usarlas con el script python de htorque. xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'tomará las coordenadas y las limpiará a valores xy separados por espacios para alimentar ese script.
misterben
misterben, gracias por su ayuda, he aprendido más sobre backgrouding (muy útil) ... No me di cuenta cuando hice la pregunta por primera vez, pero el método "obtener el color por coordenadas" resultó ser Sé el camino a seguir.
Peter.O
Acabo de probar tu xdtool getmouselocation... muy agradable, gracias ... ¡la utilidad de sed me sigue sorprendiendo!
Peter.O
3

Una solución diferente, usando xwdy xdotool:

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

donde $Xy $Yson tus coordenadas.

Como parte de Xorg, xwddebe venir preinstalado en su sistema. xdotoolse puede instalar con:

sudo apt-get install xdotool 

Basado en la respuesta de @ Christian en un StackOverflow Q&A y este hilo de imagemagick.org .

Glutanimato
fuente
Gracias, funciona, aunque es mucho más lento (usuario real 0.363s 0.456s sys 0.064s) que el script de Python de htorque (usuario real 0.097s 0.072s sys 0.020s).
Peter
@ Peter.O Sí, pero eso solo es cierto si Python y las bibliotecas importadas ya están almacenadas en la memoria caché. En un arranque en frío, el script de Python será significativamente más lento. Entonces, si su script solo se ejecuta ocasionalmente, es posible que desee usar mi solución. PD: puede acelerar las cosas si sabe qué ventana desea inspeccionar. xwdsoportes realizar capturas de pantalla de ID de ventanas específicas, por lo que podría consultar el identificador de ventana (por ejemplo xdotool search --name "$Win" | head -n1) y luego pasarlo a xwdla xwd -id "$WinID" -silent | .... Nota: las coordenadas serían relativas a la ventana en este caso.
Glutanimate
2

He escrito un módulo de Python para operaciones como esta, llamado Macropolo. Pero, hace muchas más cosas que simplemente obtener el color de un píxel en la pantalla.

Aquí está la publicación del foro donde la he compartido: http://ubuntuforums.org/showthread.php?t=2155281

El módulo tiene muchas funciones que le permiten, por ejemplo, contar la cantidad de píxeles que tienen un color específico en un área de la pantalla, buscar colores de píxeles en el área, esperar un píxel o un área de la pantalla que tenga un color específico. color, espere el color del píxel y ejecute alguna otra función mientras espera (por ejemplo, mueva el cursor para no dejar que la pantalla se apague mientras espera un color específico).

Pero, como dije, hace muchas más cosas, como simular clics del mouse y el teclado, captura de pantalla del área de la pantalla y más.

hytromo
fuente