我需要在鼠标光标下面的像素的十六进制代码中获取颜色。有很多花哨的GUI工具来解决这个任务,但我需要一个简单的命令行方式来获取颜色,这样我就可以在shell脚本中使用该解决方案。
可能我可以使用ImageMagick拍摄(一个像素?)截图并从中提取颜色(我可以使用xdotool
获取位置))。也许有一个更简单的解决方案。
有什么建议吗?
答案 0 :(得分:4)
当然可以。但是你需要另一个Linux包。如果您使用的是Ubuntu,请发出:
sudo apt-get install xdotool grabc
然后运行抓取但背景为
grabc &
然后使用xdotool
执行鼠标点击xdotool click 1
点击将被抓取光标捕获,后台进程将输出颜色。
但也许它不适用于脚本。为此,您可能需要查看this topic on the Ubuntu forums。
如果您不介意,可以do it with python as described here。
答案 1 :(得分:4)
对其他解决方案不太满意,我尝试了我的ImageMagick想法。对我来说工作正常! (取决于xclip,ImageMagick,xdotool,notify-send)
#!/bin/sh
# Get hex rgb color under mouse cursor, put it into clipboard and create a
# notification.
eval $(xdotool getmouselocation --shell)
IMAGE=`import -window root -depth 8 -crop 1x1+$X+$Y txt:-`
COLOR=`echo $IMAGE | grep -om1 '#\w\+'`
echo -n $COLOR | xclip -i -selection CLIPBOARD
notify-send "Color under mouse cursor: " $COLOR
修改强>
现在使用Gnome Shell,我遇到上述解决方案的问题(导入不会截取可见窗口的截图,我不知道为什么。欢迎提示)。另一种方法是使用scrot
之类的(快速)屏幕截图,并使用convert
代替import
:
#!/bin/sh
# Get hex rgb color under mouse cursor, put it into clipboard and create a
# notification.
scrot /tmp/copycolor.png
eval $(xdotool getmouselocation --shell)
IMAGE=`convert /tmp/copycolor.png -depth 8 -crop 1x1+$X+$Y txt:-`
COLOR=`echo $IMAGE | grep -om1 '#\w\+'`
echo -n $COLOR | xclip -i -selection CLIPBOARD
notify-send "Color under mouse cursor: " $COLOR
答案 2 :(得分:2)
另一种获取像素颜色的方法,基于@Christian的优秀答案:
eval $(xdotool getmouselocation --shell)
xwd -root -silent | convert xwd:- -depth 8 -crop "1x1+$X+$Y" txt:- | grep -om1 '#\w\+'
xwd
明显快于我系统上的import
。
答案 3 :(得分:0)
最快的解决方案:
time ( X=1 ; Y=1 ; xdotool mousemove --sync $X $Y sleep 0.01 click 1 \
mousemove --sync restore & COL=$( grabc 2>/dev/null ) ; \
echo COL=$COL )
COL=#ddedaa
real 0m0.046s
user 0m0.004s
sys 0m0.008s
可能存在计时问题,例如sleep 0.01
部分,但是即使增加到0.1
,它仍然比其他解决方案更快,并且如果$COL
为空,则可以检测到错误。 / p>
如果单击不是一种选择,或者计时问题太麻烦,那么我可能会选择导入(然后xwd然后在特定的窗口外壳出现问题的情况下扭曲)
显然,$X
和$Y
使用eval $(xdotool getmouselocation --shell)
或sth。相似
相比:
scrot
time ( X=1 ; Y=1 ; scrot /tmp/copycolor.png ; \
IMAGE=$(convert /tmp/copycolor.png -depth 8 -crop 1x1+$X+$Y txt:- ) ; \
COL=$( echo $IMAGE | grep -om1 '#\w\+' ) ; \
echo COL=$COL )
COL=#DDEDAA
real 0m0.590s
user 0m0.596s
sys 0m0.024s
xwd
time ( X=1 ; Y=1 ; COL=$( xwd -root -silent | \
convert xwd:- -depth 8 -crop "1x1+$X+$Y" txt:- | grep -om1 '#\w\+' ) ; \
echo COL=$COL )
COL=#DDEDAA
real 0m0.387s
user 0m0.380s
sys 0m0.084s
导入:
time ( X=1 ; Y=1 ; IMAGE=$(import -window root -depth 8 -crop 1x1+$X+$Y txt:-) ;\
COL=$( echo $IMAGE | grep -om1 '#\w\+' ) ; \
echo COL=$COL )
COL=#DDEDAA
real 0m0.302s
user 0m0.456s
sys 0m0.044s