Esiste uno strumento da riga di comando che restituisce il colore del pixel in base alle coordinate dello schermo?


11

Esiste uno strumento da riga di comando che restituisce il valore del colore di un pixel, basato esclusivamente sulle coordinate dello schermo .

Esiste un tale strumento?

(Inoltre: lo strumento non dovrebbe richiedere alcuna azione da parte dell'utente. Deve essere eseguito in un ciclo in uno script.)


Risposte:


14

Puoi usare il programma grabc . Trasformerà il puntatore del mouse in un mirino e restituirà i valori HTML e RGB del colore selezionato.

sudo apt-get install grabc

Unico inconveniente: non è possibile effettuare selezioni esatte in pixel a causa del mirino non abbastanza sottile.


Puoi anche creare uno script Python, qualcosa del tipo:

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

rendilo eseguibile ed eseguilo pixel_rgb="$(/path/to/script.py x y)"nel tuo script bash. Ovviamente dovresti modificare lo script nel modo in cui ne hai bisogno, aggiungere un po 'di gestione degli errori e così via.

PS: Non sono esattamente sicuro che tu possa fare qualcosa per il DeprecationWarning, quindi l'ho spento nella prima riga.


Grazie htorque, ma ancora una volta mi sono reso conto troppo tardi di aver lasciato fuori un requisito significativo ... Voglio che venga eseguito in modo automatico in un ciclo in uno script batch. Quindi grazie per l'heads-up su questa piccola app. Tornerà sicuramente utile qualche volta .. (ma non per la mia attuale sutuazione in cui verrà eseguito "non presidiato")
Peter.O

htorque: Il tuo script Python si adatta perfettamente al conto delle mie specifiche avanzate (utente tipico! cambiando sempre le specifiche! :) ... lavorare direttamente sulle coordinate è molto meglio per il mio proc "trova il modello di pixel" ... e poi posso solo xmacro il cursore sulle coordinate appena trovate, e quindi xmacro un clic destro; proprio sul bersaglio .... Facile! (per i pitonisti :)
Peter.O

Ottenere no module named numpy.core.multiarray; Segmentation fault. Quale parte dipende da questo modulo?
Ha disegnato Chapin il

6

Questo è un po 'confuso, ma puoi farlo con xdotool che ti consente di interagire con il mouse e afferrare che ottiene il colore da una posizione cliccata sullo schermo.

sudo apt-get install xdotool grabc

Per prima cosa afferrare ma lo sfondo

grabc &

Quindi esegui un clic del mouse usando xdotool

xdotool click 1

Il clic verrà catturato dal cursore grabc e dal processo in background con output del colore.


Interessante, misterben .. "cludgy" può andare bene;) Ho sentito un detto di recente. "gatto nero, gatto bianco, gatto soriano ... fintanto che cattura il mouse" ... ma ricordo vagamente di aver visto qualcosa in una pagina di informazioni dello strumento macro sui pixel (ma forse riguardava solo le coordinate) ... Voglio interrogare una linea di pixel attraverso lo schermo, e vorrei evitare il passaggio del cursore causato da grabc ... Ora che ho visto "grabc" in azione, preferirei qualcosa che afferra il colore basato su coordinate (l'ho fatto abbastanza spesso in Windows :( ... spero che ci sia qualcosa di simile per Linux :)
Peter.O

Puoi usare xdotool per ottenere le coordinate del puntatore e usarle con lo script Python di Htorque. xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'afferrerà le corde e le pulirà in valori xy separati dallo spazio per alimentare quella sceneggiatura.
misterben,

misterben, grazie per il tuo aiuto, ho imparato di più sul backgrouding (molto utile) .... Non me ne sono reso conto quando ho posto la domanda per la prima volta, ma il metodo "ottieni il colore dalle coordinate" si è rivelato sii la strada da percorrere.
Peter,

Sono appena arrivato a provare il tuo xdtool getmouselocation... molto bello, grazie ... l'utilità di sed continua a stupirmi!
Peter,

3

Una soluzione diversa, usando xwde xdotool:

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

dove $Xe $Ysono le tue coordinate.

Come parte di Xorg xwddovrebbe essere preinstallato sul tuo sistema. xdotoolpuò essere installato con:

sudo apt-get install xdotool 

Basato sulla risposta di @ Christian su domande e risposte StackOverflow e questo thread di imagemagick.org .


Grazie, funziona, anche se è molto più lento (utente reale 0.363s 0.456s sys 0.064s) rispetto allo script python di htorque (utente reale 0.097s 0.072s sys 0.020s).
Peter

@ Peter.O Sì, ma questo è vero solo se python e le librerie importate sono già nella cache. In caso di avvio a freddo, lo script Python sarà notevolmente più lento. Quindi, se il tuo script viene eseguito solo occasionalmente, potresti voler utilizzare la mia soluzione. PS: puoi velocizzare le cose se sai quale finestra vuoi ispezionare. xwdsupporti prendere screenshot di ID finestra specifica, così si potrebbe interrogare il ID finestra (per esempio xdotool search --name "$Win" | head -n1) e poi passarlo a xwdcon xwd -id "$WinID" -silent | .... Nota: in questo caso le coordinate sarebbero relative alla finestra.
Glutanimate,

2

Ho scritto un modulo Python per operazioni come questa, chiamato Macropolo. Ma fa molto di più che semplicemente ottenere il colore di un pixel sullo schermo.

Ecco il post sul forum in cui l'ho condiviso: http://ubuntuforums.org/showthread.php?t=2155281

Il modulo ha molte funzioni che ti consentono ad esempio di contare la quantità di pixel che hanno un colore specifico in un'area dello schermo, cercare i colori dei pixel nell'area, attendere che un pixel o un'area dello schermo abbiano uno specifico colore, attendere il colore dei pixel ed eseguire alcune altre funzioni durante l'attesa (ad es. spostare il cursore per non far spegnere lo schermo mentre si attende un colore specifico).

Ma, come ho detto, fa molte più cose, come la simulazione di clic e tastiera del mouse, acquisizione di screenshot dell'area dello schermo e altro ancora.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.