Comment puis-je saisir la couleur d'un pixel sur mon bureau? (Linux)
-
05-07-2019 - |
Question
Je souhaite saisir la couleur d'un pixel avec des coordonnées connues sur mon bureau Linux.
Jusqu'à présent, j'ai utilisé " import -window SomeWindow -crop 1x1 + X + Y /tmp/grab.jpg"
puis extraire la valeur de pixel à l'aide de Python et PIL .
Cela fait l'affaire, mais comme l'importation saisit toute la fenêtre avant le rognage, elle est très lente: (
Existe-t-il un moyen intelligent d’acquérir la couleur d’un seul pixel? Je connais les coordonnées relatives (fenêtre) et absolues.
Un script Python ou shell serait préférable, mais si vous connaissez un astucieux C / X11 fonctions, également s'il vous plaît faites le moi savoir:)
La solution
Cela fait l'affaire, mais nécessite python-gtk:
import gtk.gdk
import sys
def PixelAt(x, y):
w = gtk.gdk.get_default_root_window()
sz = w.get_size()
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
pixel_array = pb.get_pixels_array()
return pixel_array[y][x]
print PixelAt(int(sys.argv[1]), int(sys.argv[2]))
Sous Ubuntu 9.10, cela nécessite également python-numpy ou il sépare par défaut l'interpréteur python sur la ligne get_pixels_array
. Ubuntu 10.04 a toujours cette exigence, ou provoque une erreur ImportError concernant numpy.core.multiarray.
Autres conseils
Voici une fonction beaucoup plus rapide basée sur la réponse de
Celui-ci lit seulement un pixel de l’écran au lieu d’obtenir un grand nombre de pixels.
import gtk.gdk
def pixel_at(x, y):
rw = gtk.gdk.get_default_root_window()
pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, 1, 1)
pixbuf = pixbuf.get_from_drawable(rw, rw.get_colormap(), x, y, 0, 0, 1, 1)
return tuple(pixbuf.pixel_array[0, 0])
>>> pixel_at(25, 5)
(143, 178, 237)
Nécessite PyGTK, bien sûr ...
L’utilisation de gi.repository Gdk est encore plus petite et fonctionne sur Python 2 ou 3:
#!/usr/bin/python3
# Print RGB color values of screen pixel at location x, y
from gi.repository import Gdk
import sys
def PixelAt(x, y):
w = Gdk.get_default_root_window()
pb = Gdk.pixbuf_get_from_window(w, x, y, 1, 1)
return pb.get_pixels()
print(tuple(PixelAt(int(sys.argv[1]), int(sys.argv[2]))))
Si vous utilisez KDE4, vous disposez d’un widget Sélecteur de couleurs que vous pouvez ajouter à votre panneau ou à votre bureau. Pour ajouter le widget soit faites un clic droit sur le bureau et choisissez Ajouter un widget OU faites un clic droit sur le panneau et choisissez Options du panneau > Ajouter des widgets