Existe-t-il un outil en ligne de commande qui renvoie la couleur du pixel en fonction des coordonnées de l'écran?

11

Existe-t-il un outil en ligne de commande qui renvoie la valeur de couleur d'un pixel, basé uniquement sur ses coordonnées d'écran .

Existe-t-il un tel outil?

(Aussi: l'outil ne doit nécessiter aucune action de l'utilisateur. Il doit être exécuté en boucle dans un script.)

Peter.O
la source
Copie possible de l' outil pour sélectionner facilement un pixel à l'écran et obtenir la couleur et les coordonnées absolues
Ciro Santilli 法轮功 病毒 审查 六四 事件 法轮功

Réponses:

14

Vous pouvez utiliser le programme grabc . Il tournera le pointeur de votre souris dans un réticule et renverra les valeurs HTML et RVB de la couleur sélectionnée.

sudo apt-get install grabc

Inconvénient: il n'est pas possible de faire des sélections exactes en pixels car le réticule n'est pas assez fin.


Vous pouvez également créer un script python, quelque chose comme:

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

rendez-le exécutable et exécutez-le pixel_rgb="$(/path/to/script.py x y)"dans votre script bash. Bien sûr, vous devez modifier le script comme vous en avez besoin, ajouter une gestion des erreurs, etc.

PS: Je ne suis pas sûr que vous puissiez faire quoi que ce soit à propos de DeprecationWarning, donc je l'ai désactivé sur la première ligne.

htorque
la source
Merci htorque, mais encore une fois, je me rends compte trop tard que j'ai omis une exigence importante ... Je veux qu'il s'exécute de manière autonome dans une boucle dans un script par lots. Merci donc pour l'avertissement sur cette petite application. Cela sera certainement utile un certain temps .. (mais pas pour ma sutuation actuelle où se déroulera "sans personnel")
Peter.O
htorque: Votre script Python convient parfaitement à mes spécifications modifiées (utilisateur typique! toujours changer les spécifications! :) ... travailler directement sur les coordonnées est beaucoup mieux pour mon processus "trouver le modèle de pixel" ... puis je peux simplement xmacro le curseur sur les coordonnées qui viennent d'être trouvées, puis xmacro un clic droit; droit sur la cible .... Facile! (pour les Pythonistas :)
Peter.O
Obtenir no module named numpy.core.multiarray; Segmentation fault. Quelle partie dépend de ce module?
Drew Chapin
6

C'est un peu maladroit, mais vous pouvez y parvenir avec xdotool qui vous permet d'interagir avec la souris et avec grabc qui obtient la couleur à partir d'un emplacement cliqué à l'écran.

sudo apt-get install xdotool grabc

Exécutez d'abord Grabc mais en arrière-plan

grabc &

Ensuite, effectuez un clic de souris en utilisant xdotool

xdotool click 1

Le clic sera capturé par le curseur de grabc et le processus d'arrière-plan avec la sortie de la couleur.

misterben
la source
Intéressant, misterben .. "grossier" peut être correct;) J'ai entendu un dicton récemment. "chat noir, chat blanc, chat tigré .. tant qu'il attrape la souris" ... mais je me souviens vaguement avoir vu quelque chose dans une des pages d'information du macro-outil sur les pixels (mais peut-être que c'était seulement en ce qui concerne les coordonnées) ... Je veux interroger une ligne de pixels sur l'écran, et j'aimerais éviter le changement de curseur provoqué par grabc ... Maintenant que j'ai vu "grabc" en action, je préfère quelque chose qui saisit la couleur basée sur les coordonnées (je l'ai fait assez souvent sous Windows :( ... j'espère qu'il y a quelque chose de similaire pour Linux :)
Peter.O
Vous pouvez utiliser xdotool pour obtenir les coordonnées du pointeur et les utiliser avec le script python de htorque. xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'va saisir les coords et les nettoyer jusqu'à des valeurs xy séparées par des espaces pour alimenter ce script.
misterben
misterben, merci pour votre aide, j'ai appris plus sur le backgrouding (très pratique) .... Je ne m'en étais pas rendu compte quand j'ai posé la question pour la première fois, mais la méthode "obtenir la couleur par coordonnées" s'est avérée être le chemin à parcourir.
Peter.O
Je viens juste d'essayer votre xdtool getmouselocation... très gentil, merci ... l'utilité de sed ne cesse de m'étonner!
Peter.O
3

Une solution différente, utilisant xwdet xdotool:

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

$Xet $Ysont vos coordonnées.

Dans le cadre de Xorg xwddevrait être préinstallé sur votre système. xdotoolpeut être installé avec:

sudo apt-get install xdotool 

Basé sur la réponse de @ Christian sur un Q&A StackOverflow et ce fil imagemagick.org .

Glutanimate
la source
Merci, cela fonctionne, bien qu'il soit beaucoup plus lent (réel 0,363 utilisateur 0,456 s sys 0,064 s) que le script python de htorque (réel 0,097 s utilisateur 0,072 s sys 0,020 s).
Peter.O
@ Peter.O Oui, mais cela n'est vrai que si python et les bibliothèques importées sont déjà mis en cache dans votre mémoire. Lors d'un démarrage à froid, le script python sera beaucoup plus lent. Donc, si votre script ne s'exécute qu'occasionnellement, vous voudrez peut-être utiliser ma solution. PS: Vous pouvez accélérer les choses si vous savez quelle fenêtre vous souhaitez inspecter. xwdprend en charge la capture d'écran d'ID de fenêtre spécifiques, afin que vous puissiez interroger l'ID de fenêtre (par exemple xdotool search --name "$Win" | head -n1), puis le transmettre à xwdavec xwd -id "$WinID" -silent | .... Remarque: les coordonnées seraient relatives à la fenêtre dans ce cas.
Glutanimate
2

J'ai écrit un module python pour des opérations comme celle-ci, appelé Macropolo. Mais cela fait bien plus que simplement obtenir la couleur d'un pixel à l'écran.

Voici le post du forum où je l'ai partagé: http://ubuntuforums.org/showthread.php?t=2155281

Le module a de nombreuses fonctions qui vous permettent par exemple de compter la quantité de pixels qui ont une couleur spécifique dans une zone de l'écran, de rechercher des couleurs de pixels dans la zone, d'attendre qu'un pixel ou une zone de l'écran aient une couleur spécifique couleur, attendez la couleur des pixels et exécutez une autre fonction en attendant (par exemple, déplacez le curseur pour ne pas laisser l'écran s'éteindre pendant que vous attendez une couleur spécifique).

Mais, comme je l'ai dit, cela fait beaucoup plus de choses, comme la simulation des clics de souris et du clavier, la capture d'écran de la zone de l'écran et plus encore.

hytromo
la source