我正在寻找一种工具,可以选择屏幕上的任何像素并获得其RGB颜色和绝对(x,y)位置。
我在Windows上使用的工具显示带有十字准线的大的放大正方形,使我可以轻松选择所需的像素并获取其细节。
ubuntu有这样的东西吗?
我正在寻找一种工具,可以选择屏幕上的任何像素并获得其RGB颜色和绝对(x,y)位置。
我在Windows上使用的工具显示带有十字准线的大的放大正方形,使我可以轻松选择所需的像素并获取其细节。
ubuntu有这样的东西吗?
Answers:
经过漫长而艰苦的搜索,似乎没有适用于Ubuntu / Linux的工具可以满足您的两个条件,即放大和坐标显示。
因此,我们选择了一个微型Windows工具- 至关重要的是 -可以与默认WINE安装一起使用,不需要配置,安装,DLL等。
它具有可调节的缩放比例,多种格式的一键复制和坐标显示:
1.安装酒
sudo apt-get install wine
(而已!)
2.下载ColorPix
ColorPix可以作为一个小巧的便携式600KB exe文件在此处正式下载
我建议使用以下命令直接下载到本地二进制文件目录:
sudo wget -O/usr/local/bin/ColorPix.exe http://www.colorschemer.com/ColorPix.exe
3.为ColorPix创建启动器
首先让我们获得一个图标:
sudo wget -O/usr/share/icons/colorpix.png http://cdn.alternativeto.net/i/22e49edc-efa7-e011-979d-0025902c7e73_11865.png
Alt+F2
现在按并输入gksudo gedit /usr/share/applications/colorpix.desktop
,然后粘贴以下内容并保存文件:
[桌面输入] 名称= ColorPix GenericName = ColorPix Comment =通过WINE的ColorPicker Exec =葡萄酒/usr/local/bin/ColorPix.exe 终端=假 图标= / usr / share / icons / colorpix.png 类型=应用 StartupNotify = true
在终端上,运行:
sudo chmod +x /usr/share/applications/colorpix.desktop
几秒钟后,它将在启动器中显示为:
4.使用ColorPix
启动它,并且第一次初始化WINE可能需要几秒钟。
下面的屏幕截图显示了它的实际操作,其中包括:
在所需像素上按任意键即可锁定值
xmag
按如下所述使用,然后在想要坐标的像素上按住鼠标按钮即可。
我相信,这将为您带来想要的东西。诚然,这是几个步骤,但由于我展示了每个小步骤,因此看起来比现在更糟。
设定
安装ImageMagick&Shutter。
sudo apt-get install imagemagick shutter
如何获得x,y坐标和颜色
A.打开快门,然后单击选择按钮
B.请注意,当您在其上移动鼠标时,将显示您正在寻找的x,y坐标。
找到正确的位置后,继续前进,然后单击鼠标并绘制一个正方形以捕获图像。(只要在感兴趣的像素上开始(左上角)图像,图像的大小就没有多大关系了。)
C.关闭快门中的图像
D.从终端运行以下命令。这将为您提供左上像素的颜色值。
convert ~/Pictures/Selection_001.png -crop 1x1+1+1 txt:- | sed -n 's/.* \(#.*\)/\1/p'
E.在命令行中继续操作并删除图像,以便下次快门拍摄照片时,它使用相同的名称。(否则,您需要在上一步(D)中调整名称。
rm ~/Pictures/Selection_001.png
将此代码粘贴到文本编辑器中,使其可执行并运行。用吸管选择颜色时,x和y坐标将显示在顶部。
编辑:编写代码以添加缩放窗口。要使它抓住窗口外的像素,请单击按钮(而不是滴管)。再次单击该按钮可停止抓住指针。还没有弄清楚如何用cairo绘制十字准线,但是您可以按原样使用。我在其中留下了一些开罗代码,以防有人可以告诉我为什么我的矩形没有画出来……
#!/usr/bin/python
from gi.repository import Gtk,Gdk, GdkPixbuf
import cairo
class picker(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.connect('delete-event', Gtk.main_quit)
self.connect('motion-notify-event', self.motion_cb)
self.connect('button-press-event',self.button_press)
box=Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
#Setup area for coordinates and zoom window
coordbox=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.xcoor=Gtk.Label("x: ")
coordbox.pack_start(self.xcoor, True, False, 1)
self.ycoor=Gtk.Label("y: ")
coordbox.pack_start(self.ycoor, True, False, 1)
self.zoomwin=Gtk.Image()
#Trying to draw on Gtk.Image with cairo for crosshairs... Not working
self.zoomwin.connect('draw', self.draw)
self.zoomwin.set_app_paintable(True)
coordbox.pack_start(self.zoomwin,True,True,1)
self.buttongo=Gtk.Button("Pick Color")
self.buttongo.connect('clicked',self.gobutton_activate)
coordbox.pack_start(self.buttongo,True,True,1)
box.pack_start(coordbox, True, False, 5)
#Put in color wheel for tweaking color
self.cp=Gtk.ColorSelection()
self.cp.connect('color-changed', self.on_color_changed)
box.pack_start(self.cp, True, True, 5)
self.add(box)
self.show_all()
#Set some initial parameters
self.w,self.h=10,10 #Size of zoomed image in pixels
self.count=0
self.window=self.get_window()
#set initial zoom image
self.zoomwin.set_from_pixbuf(self.get_image().scale_simple(240,240,GdkPixbuf.InterpType.TILES))
self.grabbing=False
def on_color_changed(self,widget=None, data=None):
#Print out x,y to widgets
display=Gdk.Display.get_default()
(screen,x,y,modifier)=display.get_pointer()
self.xcoor.set_text("x: %i" %x)
self.ycoor.set_text("y: %i" %y)
def get_image(self,w=None,h=None):
#Get a pixbuff image under pointer
if w==None: w=self.w
if h==None: h=self.h
display=Gdk.Display.get_default()
(screen,self.x,self.y,modifier)=display.get_pointer()
window=Gdk.get_default_root_window()
screenshot = Gdk.pixbuf_get_from_window(window,
self.x-int(w/2), self.y-int(h/2), int(w), int(h))
return screenshot
def motion_cb(self, widget, data):
#What to do while mouse pointer is moving
#DONT capture every event! Causes too much backup
if self.count==5:
self.pixbuf=self.get_image().scale_simple(240,240,GdkPixbuf.InterpType.TILES)
self.zoomwin.set_from_pixbuf(self.pixbuf)
self.zoomwin.queue_draw()
self.count=0
self.count+=1
def grab_start(self):
#Grab control of pointer outside of window
self.grabbing = True
Gdk.pointer_grab(self.window,
True, #allow passage of pointer events to children
Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK,
None,
None,# could put a custom cursor here
0L)
def button_press(self,widget,data):
#capture color under the pointer and set the color selection
cenpx=self.get_image(1,1)
color=tuple(map(ord, cenpx.get_pixels()[:3]))
col=Gdk.RGBA(float(color[0])/256.,float(color[1])/256.,float(color[2])/256.)
self.cp.set_current_rgba(col)
def grab_stop(self):
#Stop Grabbing the pointer
Gdk.pointer_ungrab(0)
self.grabbing=False
def gobutton_activate(self, widget, data=None):
#Button control
if self.grabbing==False:
self.grab_start()
widget.set_label("Stop Picking")
else:
self.grab_stop()
widget.set_label("Pick Color")
def draw(self, widget, cr):
#this gets called, but nothing is drawn that I can see...
cr.set_operator(cairo.OPERATOR_SOURCE)
cr.set_source_rgba(1,1,1,1)
w = self.w
h = self.h
cr.set_source_rgba(1,1,1,1)
cr.set_line_width(10)
cr.rectangle(w/2-1,h/2-1,w/2+1,h/2+1)
cr.stroke()
cr.set_operator(cairo.OPERATOR_OVER)
if __name__=="__main__":
win=picker()
Gtk.main()