是否有一个命令行工具可以根据屏幕坐标返回像素的颜色?


Answers:


14

您可以使用程序grapc。它将使您的鼠标指针变成十字准线,并返回所选颜色的HTML和RGB值。

sudo apt-get install grabc

缺点:由于十字准线不够细,因此无法进行精确像素选择。


您还可以创建python脚本,例如:

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

使它可执行,并pixel_rgb="$(/path/to/script.py x y)"在您的bash脚本中运行。当然,您需要按照需要的方式来更改脚本,添加一些错误处理等。

PS:我不确定您是否可以对DeprecationWarning做任何事情,因此我在第一行中将其关闭。


谢谢htorque,但我又意识到我遗漏了一个重要的要求,为时已晚...我希望它在批处理脚本中自动在循环中运行。因此,感谢您对此小应用程序的注意。肯定会在一段时间内派上用场..(但对于我目前的说法,这将是“无人
值守

htorque:您的Python脚本非常适合我的修订规范(典型用户!总是在更改规范!:) ...对于我的“查找像素模式”过程而言,直接在坐标上工作要好得多...然后我可以将光标xmacro移至刚找到的坐标,然后右键单击xmacro;就在目标上....容易!(适用于Pythonista :)
Peter.O 2010年

得到no module named numpy.core.multiarray; Segmentation fault。哪一部分取决于此模块?
德鲁·查平

6

这有点笨拙,但是您可以使用xdotool来实现此目的,它允许您与鼠标进行交互,而grapc则可以从单击屏幕的位置获取颜色。

sudo apt-get install xdotool grabc

第一次运行grapc,但有背景

grabc &

然后使用xdotool执行mouseclick

xdotool click 1

点击将被grapc的光标捕获,并通过背景处理输出颜色。


有趣的是,misterben ..“笨拙”可能还行;)我最近听到了一句话。“黑猫,白猫,虎斑猫..只要它能抓住鼠标”……但是我隐约记得在宏工具的信息页面之一中看到了有关像素的信息(但也许只是关于坐标) ...我想查询屏幕上的一行像素,并且我想避免由抓取引起的光标切换...现在,我已经看到“ grabc”在起作用,我宁愿抓取一些东西基于坐标的颜色(我在Windows中经常这样做:(...我希望Linux也有类似的东西:)
Peter.O 2010年

您可以使用xdotool获取指针坐标,并将其与htorque的python脚本一起使用。xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'将抓取坐标并将其清理为空格分隔的xy值,以馈入该脚本。
misterben

misterben,谢谢您的帮助,我已经了解了更多关于背景的知识(非常方便)....当我第一次问这个问题时,我并没有意识到这一点,但是“通过坐标获取颜色”方法变成了是要走的路。
Peter.O 2010年

我只是想尝试一下xdtool getmouselocation...,非常好,谢谢... sed的实用性一直让我赞叹不已!
Peter.O 2010年

3

另一种解决方案,使用xwdxdotool

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

其中,$X$Y是你的坐标。

作为Xorg的一部分,xwd应预先安装在系统上。xdotool可以安装:

sudo apt-get install xdotool 

基于@Christian在StackOverflow问答上回答以及此imagemagick.org线程


谢谢,它确实有效,尽管它比htorque的python脚本(实际0.097s用户0.072s sys 0.020s)慢得多(实际0.363s用户0.456s sys 0.064s)。
Peter.O 2014年

@ Peter.O是的,但是仅当python和导入的库已经缓存在您的内存中时,这才是正确的。在冷启动时,python脚本会明显变慢。因此,如果您的脚本仅偶尔运行,则可能要使用我的解决方案。PS:如果您知道要检查的窗口,则可以加快速度。xwd支持拍摄特定窗口ID的屏幕截图,因此您可以查询窗口ID(例如xdotool search --name "$Win" | head -n1),然后将其传递给xwdwith xwd -id "$WinID" -silent | ...。注意:在这种情况下,坐标将相对于窗口。
Glutanimate

2

我已经为此类操作编写了python模块,称为Macropolo。但是,它所做的事情远不止简单地获取屏幕上像素的颜色。

这是我分享它的论坛帖子:http : //ubuntuforums.org/showthread.php?t=2155281

该模块具有许多功能,例如,允许您计算屏幕区域中具有特定颜色的像素数量,搜索区域中的像素颜色,等待屏幕中具有特定颜色的像素或区域颜色,等待像素颜色并在等待时运行其他功能(例如,在等待特定颜色时移动光标以免屏幕关闭)。

但是,正如我所说,它还有很多其他功能,例如模拟鼠标点击和键盘,截取屏幕区域的屏幕截图等等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.