2009-10-22 86 views
7

我想在我的Linux桌面上獲取具有已知座標的像素的顏色。如何獲取桌面上像素的顏色? (Linux)

到現在爲止,我已經使用"import -window SomeWindow -crop 1x1+X+Y /tmp/grab.jpg" 然後使用Python和PIL提取像素值。

這做工作,但由於進口裁剪之前抓住了整個窗口,這是很慢:(

是否有搶只有一個像素的顏色?我知道,這兩個相對的(窗口)的任何巧妙的方式和絕對座標

一個Python或shell腳本將是可取的,但如果你知道一些聰明的C/X11功能,也請讓我知道:)

回答

8

這是卓有成效的,但需要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])) 

在Ubuntu 9.10上,這也需要python-numpy或者它在get_pixels_array行上段錯誤python解釋器。 Ubuntu 10.04它仍然有這個要求,或者它會導致關於numpy.core.multiarray的ImportError。

+0

我是否注意任何緩慢,如果我必須檢查每秒約200像素? – user44556

+2

工作就像一個魅力! :D 如果有人對跳過Spotify廣告的腳本感興趣,請告訴我。 – Joernsn

+1

200像素每秒 - 您可以傳遞像素列表來檢查並將其從像素陣列中拉出。應該是好的,速度明智。 – richq

1

如果您使用的是KDE4,則可以添加一個拾色器小組件,您可以將其添加到面板或桌面。 新增的小工具或者 右鍵點擊桌面並選擇添加小部件 OR 點擊右鍵並選擇面板選項>添加窗口小部件

3

這是基於richqanswer更快的功能。
這個從屏幕上只讀取一個像素,而不是獲得所有像素的巨大數組。

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) 

需要PyGTK的,當然...

2

使用gi.repository GDK,它的體積更小,適用於任何的Python 2或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]))))