Alat untuk dengan mudah memilih piksel di layar dan mendapatkan koordinat warna dan absolut


18

Saya mencari alat yang memungkinkan saya memilih piksel di layar dan mendapatkan warna RGB dan lokasi absolut (x, y).

Saya telah menggunakan alat pada Windows yang memperlihatkan kotak besar dengan garis silang yang memungkinkan saya dengan mudah memilih piksel yang saya inginkan dan mendapatkan detailnya.

Apakah ada yang seperti ini untuk ubuntu?


hanya ingin tahu mengapa Anda mencari kombinasi khusus ini bersama-sama ... yang dapat membantu kami memikirkan jawaban. mengapa Anda ingin tahu koordinat x, y dan warnanya?
snowguy

Saya menulis alat otomatisasi yang mengirimkan input keyboard dan mouse sebagai respons untuk melihat hal-hal tertentu di layar. Beberapa bagian bergantung pada penggunaan x, y offset tombol tertentu dll di dalam jendela, dan saya ingin cara mudah untuk menemukan offset ini dengan tepat.
Flash

Jika ini untuk web dan Anda Firefox, maka ada ekstensi yang disebut ColorZilla. colorzilla.com/firefox
Anonymous

Andrew, sepertinya Ian B menulis alat yang melakukan apa yang Anda inginkan. Sepertinya dia layak mendapatkan hadiah itu.
snowguy

Jawaban:


4

Yang paling cocok adalah ... alat Windows kecil yang disebut ColorPix (via WINE)

Setelah mencari panjang dan keras, tampaknya tidak ada alat yang tersedia untuk Ubuntu / Linux memenuhi kedua kriteria Anda, yaitu pembesaran dan tampilan koordinat .

Jadi kita pergi untuk alat Windows kecil yang - kritis - hanya bekerja dengan instalasi WINE default, tidak ada konfigurasi, instalasi, DLL, dll diperlukan.

  • Ini fitur zoom yang dapat disesuaikan, salinan satu-klik dalam berbagai format dan tampilan koordinasi:

    masukkan deskripsi gambar di sini

1. Pasang Wine

sudo apt-get install wine

(itu dia!)

2. Unduh ColorPix

ColorPix dapat diunduh secara resmi sebagai exe 600KB portabel yang mungil di sini

Saya sarankan mengunduh langsung ke direktori binari lokal Anda dengan:

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

3. Buat peluncur untuk ColorPix

  • Mari kita dapatkan ikonnya terlebih dahulu:

    sudo wget -O/usr/share/icons/colorpix.png http://cdn.alternativeto.net/i/22e49edc-efa7-e011-979d-0025902c7e73_11865.png
    
  • Tekan Alt+F2sekarang dan ketik gksudo gedit /usr/share/applications/colorpix.desktop, dan rekatkan di bawah ini dan simpan file:

    [Entri Desktop]
    Name = ColorPix
    GenericName = ColorPix
    Komentar = ColorPicker via WINE
    Exec = anggur /usr/local/bin/ColorPix.exe
    Terminal = salah
    Ikon = / usr / share / icons / colorpix.png
    Type = Aplikasi
    StartupNotify = true
    
  • Dari terminal, jalankan:

    sudo chmod +x /usr/share/applications/colorpix.desktop
    
  • Dalam beberapa detik, itu akan tersedia di peluncur sebagai:

    masukkan deskripsi gambar di sini

4. Menggunakan ColorPix

Mulai, dan pertama kali mungkin perlu beberapa detik saat WINE menginisialisasi.

Tangkapan layar di bawah ini menunjukkannya dalam aksi, dengan:

  • Koordinat di atas
  • Nilai warna dalam berbagai format di bawah ini (klik untuk menyalin ke papan klip)
  • Adjustable kaca pembesar di bawah ini
  • Tekan tombol apa saja setelah Anda berada di piksel yang Anda inginkan untuk mengunci nilai

    masukkan deskripsi gambar di sini


Ditulis dengan baik, jawaban yang mengejutkan - terima kasih! Tetapi sulit untuk mengunduh 625 MB untuk anggur, jadi saya berharap Ian B mendapat bantuan dengan aplikasi python kecilnya yang lucu ....
nealmcb

Cukup gunakan xmag, seperti dijelaskan di bawah ini, dan tahan tombol mouse pada piksel yang Anda inginkan dari koordinat.
hackerb9

12

Ada alat yang disebut gpick .

Di sini Anda dapat melihat gambar alat. Dengan gpick Anda dapat memilih piksel, melihat kode HTML, menambahkan warna ke palet dan menghasilkan warna.

Untuk menggunakannya, klik kanan tengah hexagon lalu gunakan spasi untuk menyimpan warna ke dalam palet.

gpick


Terima kasih ini hampir melakukan apa yang saya inginkan tetapi tampaknya tidak menunjukkan koordinat piksel.
Flash

Bisakah Anda juga menandai pertanyaan ini sebagai selesai?
slashcrack

Tidak - karena saya masih belum punya jawabannya :)
Flash

gpick terlihat hebat, lakukan saja sudo apt-get install gpickuntuk menginstalnya
Bloke

6

Ini akan memberi Anda apa yang Anda inginkan saya percaya. Memang itu beberapa langkah tetapi terlihat lebih buruk daripada sejak saya menunjukkan setiap langkah kecil.

Mempersiapkan

Instal ImageMagick & Shutter.

sudo apt-get install imagemagick shutter

Cara mendapatkan koordinat x, y dan warna

A. Buka Bidik dan klik tombol pilihan

pic mengklik tombol pilihan

B. Perhatikan bahwa ketika Anda menggerakkan mouse Anda di sekitar itu akan menunjukkan Anda x, y koordinat yang Anda cari.

masukkan deskripsi gambar di sini

Ketika Anda sudah mendapatkan tempat yang tepat, silakan klik dengan tombol mouse Anda dan gambar kotak untuk mengambil gambar. (Tidak masalah seberapa besar gambar Anda hanya selama Anda memulainya (sudut kiri atas) pada piksel yang diinginkan.)

masukkan deskripsi gambar di sini

C. Tutup gambar dalam rana

masukkan deskripsi gambar di sini

D. Jalankan perintah berikut dari terminal. Ini akan memberi Anda nilai warna dari piksel kiri atas.

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

E. Sementara di baris perintah maju dan menghapus gambar sehingga rana waktu berikutnya mengambil gambar itu memberinya nama yang sama. (Kalau tidak, Anda harus menyesuaikan nama pada langkah sebelumnya (D).

rm ~/Pictures/Selection_001.png

Konversi jelas merupakan opsi terbaik, tetapi saya lebih suka memilih rgba+ od: askubuntu.com/a/874503/52975
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

6

Rekatkan kode ini ke editor teks, buat itu dapat dieksekusi, dan jalankan. Ketika Anda memilih warna dengan pipet, koordinat x dan y akan muncul di bagian atas.

Sunting : Menulis kode untuk menambahkan jendela zoom. Untuk mendapatkannya ambil piksel di luar jendela klik tombol (bukan eyedropper). Klik tombol lagi untuk berhenti meraih pointer. Belum tahu cara menggambar crosshair dengan cairo, tetapi Anda mungkin bisa menggunakan apa adanya. Saya meninggalkan beberapa kode Kairo di sana kalau-kalau ada yang bisa memberi tahu saya mengapa persegi panjang saya tidak menarik ...

#!/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
Jawaban bagus. Jauh lebih mudah.
snowguy

1
Berhasil - tapi saya tidak bisa melihat piksel yang akan saya pilih sampai setelah saya klik. Saya berharap dapat memperbesar area di sekitar kursor sehingga saya bisa memastikan saya mendapatkan piksel yang tepat.
Flash

Cobalah sekarang ... Proyek yang menarik dan saya belajar banyak. Semoga ada yang bisa membantu saya mencari tahu mengapa saya tidak bisa menggambar di jendela zoom dengan cairo.
Ian B.

4

Jika ada yang ingin melakukan ini di masa depan, Anda tidak perlu mengunduh apa pun (tentu saja bukan ratusan megabita Windows seperti yang dijawab oleh jawaban lain). Solusi sederhana yang disertakan Ubuntu adalah xmag. Xmag adalah bagian dari paket x11-apps yang seharusnya sudah diinstal secara default.

Mudah. Jalankan xmag, klik untuk memilih wilayah layar, lalu tahan tombol mouse pada tampilan yang diperbesar untuk melihat koordinat piksel yang tepat.

Cuplikan layar xmag, sans pointer

Anda dapat membaca manual xmag dengan mengetik man xmag.


Untuk mengubah perbesaran gunakan -magopsi (default ke 5), misalnya xmag -mag 10untuk meledakkannya sepuluh kali.
hidangan penutup

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.