Công cụ để dễ dàng chọn một pixel trên màn hình và có được màu sắc và tọa độ tuyệt đối


18

Tôi đang tìm kiếm một công cụ cho phép tôi chọn bất kỳ pixel nào trên màn hình và lấy màu RGB và vị trí tuyệt đối (x, y) của nó.

Tôi đã sử dụng các công cụ trên Windows hiển thị hình vuông phóng to lớn với hình chữ thập cho phép tôi dễ dàng chọn pixel tôi muốn và nhận thông tin chi tiết.

Có bất cứ điều gì như thế này cho Ubuntu?


chỉ tò mò tại sao bạn đang tìm kiếm sự kết hợp đặc biệt này với nhau ... điều đó có thể giúp chúng tôi nghĩ ra câu trả lời. Tại sao bạn muốn biết tọa độ x, y và màu sắc?
snowguy

Tôi đang viết một công cụ tự động hóa để gửi đầu vào bàn phím và chuột để xem những thứ nhất định trên màn hình. Một số bộ phận phụ thuộc vào việc sử dụng x, y offset của một số nút nhất định, v.v. bên trong cửa sổ và tôi muốn một cách dễ dàng để tìm chính xác các offset này.
Flash

Nếu đây là dành cho web và bạn là Firefox thì có một tiện ích mở rộng có tên ColorZilla. colorzilla.com/firefox
Ẩn danh

Andrew, có vẻ như Ian B đã viết một công cụ làm những gì bạn muốn. Có vẻ như anh ấy xứng đáng với tiền thưởng.
snowguy

Câu trả lời:


4

Sự phù hợp nhất là ... một công cụ Windows nhỏ tên là ColorPix (thông qua WINE)

Sau khi tìm kiếm lâu và khó, có vẻ như không có công cụ nào có sẵn cho Ubuntu / Linux đáp ứng cả hai tiêu chí của bạn, tức là phóng tohiển thị tọa độ .

Vì vậy, chúng tôi sử dụng một công cụ Windows nhỏ - cực kỳ quan trọng - chỉ hoạt động với cài đặt WINE mặc định, không cần cấu hình, cài đặt, DLL, v.v.

  • Nó có tính năng thu phóng có thể điều chỉnh, sao chép bằng một lần nhấp ở nhiều định dạng và hiển thị phối hợp:

    nhập mô tả hình ảnh ở đây

1. Cài đặt rượu vang

sudo apt-get install wine

(đó là nó!)

2. Tải xuống ColorPix

ColorPix có thể được tải xuống chính thức dưới dạng exe 600KB nhỏ gọn, di động tại đây

Tôi đề nghị tải trực tiếp vào thư mục nhị phân cục bộ của bạn với:

sudo wget -O/usr/local/bin/ColorPix.exe http://www.colorschemer.com/ColorPix.exe

3. Tạo trình khởi chạy cho ColorPix

  • Trước tiên hãy lấy một biểu tượng:

    sudo wget -O/usr/share/icons/colorpix.png http://cdn.alternativeto.net/i/22e49edc-efa7-e011-979d-0025902c7e73_11865.png
    
  • Nhấn Alt+F2ngay bây giờ và gõ gksudo gedit /usr/share/applications/colorpix.desktop, và dán bên dưới và lưu tệp:

    [Mục nhập máy tính để bàn]
    Tên = ColorPix
    Tên chung = ColorPix
    Nhận xét = ColorPicker qua RƯỢU
    Exec = rượu /usr/local/bin/ColorPix.exe
    Thiết bị đầu cuối = sai
    Biểu tượng = / usr / share / icon / colorpix.png
    Loại = Ứng dụng
    StartupNotify = đúng
    
  • Từ một thiết bị đầu cuối, chạy:

    sudo chmod +x /usr/share/applications/colorpix.desktop
    
  • Trong vài giây, nó sẽ có sẵn trong trình khởi chạy dưới dạng:

    nhập mô tả hình ảnh ở đây

4. Sử dụng ColorPix

Bắt đầu nó và lần đầu tiên có thể mất vài giây trong khi WINE khởi tạo.

Ảnh chụp màn hình bên dưới cho thấy nó hoạt động, với:

  • Các tọa độ trên cùng
  • Giá trị màu ở các định dạng khác nhau bên dưới (nhấp để sao chép vào bảng tạm)
  • Kính lúp điều chỉnh dưới đây
  • Nhấn bất kỳ phím nào khi bạn ở trên pixel mong muốn của mình để khóa các giá trị

    nhập mô tả hình ảnh ở đây


Viết tốt, câu trả lời đáng ngạc nhiên - cảm ơn! Nhưng thật khó để tải 625 MB cho rượu, vì vậy tôi hy vọng Ian B sẽ nhận được sự giúp đỡ với ứng dụng trăn nhỏ dễ thương của mình ....
nealmcb

Chỉ cần sử dụng xmag, như được mô tả dưới đây và giữ nút chuột trên pixel bạn muốn tọa độ.
hackerb9

12

Có một công cụ gọi là gấc .

Ở đây bạn có thể thấy một hình ảnh của công cụ. Với guck bạn có thể chọn pixel, xem mã HTML, thêm màu vào bảng màu và tạo màu.

Để sử dụng nó, nhấp chuột phải vào giữa hình lục giác sau đó sử dụng thanh dấu cách để lưu màu vào bảng màu.

cái móc


Cảm ơn điều này gần như làm những gì tôi muốn nhưng dường như không hiển thị tọa độ pixel.
Flash

Bạn cũng có thể đánh dấu câu hỏi này là hoàn thành?
slashcrack

Không - vì tôi vẫn chưa có câu trả lời :)
Flash

Gopper trông thật tuyệt, chỉ cần làm sudo apt-get install gpickđể cài đặt nó
Bloke

6

Điều này sẽ giúp bạn có được những gì bạn muốn tôi tin. Phải thừa nhận rằng đó là một vài bước nhưng có vẻ tệ hơn so với khi tôi chỉ ra từng bước nhỏ.

Thiết lập

Cài đặt ImageMagick & Shutter.

sudo apt-get install imagemagick shutter

Cách lấy tọa độ x, y và màu

A. Mở Shutter và nhấp vào nút chọn

pic của nút chọn

B. Lưu ý rằng khi bạn di chuyển chuột xung quanh nó sẽ hiển thị cho bạn tọa độ x, y bạn đang tìm kiếm.

nhập mô tả hình ảnh ở đây

Khi bạn đã đến đúng nơi, hãy tiếp tục và nhấp bằng nút chuột và vẽ hình vuông để chụp ảnh. (Không quan trọng hình ảnh của bạn lớn đến mức nào nếu bạn bắt đầu nó (góc trên cùng bên trái) trên pixel quan tâm.)

nhập mô tả hình ảnh ở đây

C. Đóng hình ảnh trong màn trập

nhập mô tả hình ảnh ở đây

D. Chạy lệnh sau từ thiết bị đầu cuối. Điều này sẽ cung cấp cho bạn các giá trị màu của pixel trên cùng bên trái.

convert ~/Pictures/Selection_001.png -crop 1x1+1+1 txt:- | sed -n 's/.* \(#.*\)/\1/p' 

E. Trong khi trong dòng lệnh hãy tiếp tục và xóa hình ảnh để lần chụp tiếp theo chụp ảnh, nó sẽ đặt cùng tên. (Nếu không, bạn sẽ cần điều chỉnh tên trong bước trước (D).

rm ~/Pictures/Selection_001.png

Chuyển đổi rõ ràng là lựa chọn tốt nhất, nhưng tôi thà đi cho rgba+ od: askubuntu.com/a/874503/52975
Ciro Santilli新疆改造中心法轮功六四事件

6

Dán mã này vào một trình soạn thảo văn bản, làm cho nó có thể thực thi được và chạy nó. Khi bạn chọn một màu với ống nhỏ mắt, tọa độ x và y sẽ xuất hiện ở trên cùng.

Chỉnh sửa : Viết mã để thêm một cửa sổ thu phóng. Để có nó lấy các pixel bên ngoài cửa sổ, nhấp vào nút (không phải là Eyedropper). Nhấp vào nút một lần nữa để dừng lấy con trỏ. Không tìm ra làm thế nào để vẽ một crosshair với cairo, nhưng bạn có thể có thể sử dụng như vậy. Tôi đã để lại một số mã cairo trong đó trong trường hợp ai đó có thể cho tôi biết lý do tại sao hình chữ nhật của tôi không vẽ được

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

1
Câu trả lời tốt đẹp. Đơn giản hơn nhiều.
snowguy

1
Nó đã hoạt động - nhưng tôi không thể thấy pixel tôi sắp chọn cho đến khi tôi nhấp vào pixel đó. Tôi đã hy vọng có thể phóng to khu vực xung quanh con trỏ để tôi có thể chắc chắn rằng mình có được pixel chính xác.
Flash

Hãy thử ngay bây giờ ... Dự án thú vị và tôi đã học được rất nhiều. Hy vọng ai đó có thể giúp tôi tìm ra lý do tại sao tôi không thể vẽ trên cửa sổ thu phóng bằng cairo.
Ian B.

4

Nếu bất cứ ai muốn làm điều này trong tương lai, bạn không cần phải tải xuống bất cứ thứ gì (chắc chắn không phải là hàng trăm megabyte nội dung Windows như một câu trả lời khác gợi ý). Một giải pháp đơn giản mà Ubuntu đi kèm là xmag. Xmag là một phần của gói ứng dụng x11 đã được cài đặt theo mặc định.

Dễ thôi. Chạy xmag, nhấp để chọn một vùng trên màn hình, sau đó nhấn và giữ nút chuột trong chế độ xem phóng to để xem tọa độ pixel chính xác.

Ảnh chụp màn hình của xmag, con trỏ sans

Bạn có thể đọc hướng dẫn sử dụng xmag bằng cách gõ man xmag.


Để thay đổi độ phóng đại, sử dụng -magtùy chọn (mặc định là 5), ví dụ xmag -mag 10để thổi nó lên mười lần.
tráng miệng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.