Strumento per selezionare facilmente un pixel sullo schermo e ottenere colore e coordinate assolute


18

Sto cercando uno strumento che mi permetta di selezionare qualsiasi pixel sullo schermo e ottenere il suo colore RGB e la posizione assoluta (x, y).

Ho usato strumenti su Windows che mostrano un grande quadrato ingrandito con un mirino che mi permette di selezionare facilmente il pixel che voglio e ottenere i suoi dettagli.

C'è qualcosa del genere per Ubuntu?


solo curioso di sapere perché stai cercando questa particolare combinazione insieme ... che potrebbe aiutarci a pensare a una risposta. perché vuoi conoscere le coordinate x, y e il colore?
snowguy,

Sto scrivendo uno strumento di automazione che invia input da tastiera e mouse in risposta alla visualizzazione di determinate cose sullo schermo. Alcune parti dipendono dall'uso degli offset x, y di alcuni pulsanti ecc. All'interno di una finestra e vorrei un modo semplice per trovare esattamente questi offset.
Flash

Se questo è per il web e sei Firefox, allora c'è un'estensione chiamata ColorZilla. colorzilla.com/firefox
Anonimo il

Andrew, sembra che Ian B abbia scritto uno strumento che fa esattamente quello che vuoi. Sembra che si meriti la generosità.
snowguy,

Risposte:


4

La soluzione migliore è ... un piccolo strumento di Windows chiamato ColorPix (tramite WINE)

Dopo aver cercato a lungo e duramente, sembra che nessuno degli strumenti disponibili per Ubuntu / Linux soddisfi entrambi i criteri, ovvero ingrandimento e visualizzazione delle coordinate .

Quindi optiamo per un piccolo strumento di Windows che, in modo critico , funziona solo con un'installazione WINE predefinita, non è necessaria alcuna configurazione, installazione, DLL, ecc.

  • È dotato di zoom regolabile, copia con un clic in più formati e visualizzazione coordinata:

    inserisci qui la descrizione dell'immagine

1. Installa Wine

sudo apt-get install wine

(questo è tutto!)

2. Scarica ColorPix

ColorPix può essere scaricato ufficialmente come un piccolo exe portatile da 600 KB qui

Suggerisco di scaricare direttamente nella directory binaria locale con:

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

3. Creare un programma di avvio per ColorPix

  • Diamo prima un'icona:

    sudo wget -O/usr/share/icons/colorpix.png http://cdn.alternativeto.net/i/22e49edc-efa7-e011-979d-0025902c7e73_11865.png
    
  • Premi Alt+F2ora e digita gksudo gedit /usr/share/applications/colorpix.desktop, incolla quanto segue e salva il file:

    [Voce desktop]
    Name = ColorPix
    GenericName = ColorPix
    Commento = ColorPicker tramite WINE
    Exec = wine /usr/local/bin/ColorPix.exe
    Terminal = false
    Icona = / usr / share / icons / colorpix.png
    Type = Application
    StartupNotify = true
    
  • Da un terminale, eseguire:

    sudo chmod +x /usr/share/applications/colorpix.desktop
    
  • In pochi secondi, sarà disponibile nel programma di avvio come:

    inserisci qui la descrizione dell'immagine

4. Utilizzo di ColorPix

Avviarlo e la prima volta potrebbero essere necessari alcuni secondi durante l'inizializzazione di WINE.

Lo screenshot seguente mostra in azione, con:

  • Le coordinate in alto
  • Valori di colore in diversi formati di seguito (fare clic per copiare negli appunti)
  • Lente d'ingrandimento regolabile di seguito
  • Premere un tasto qualsiasi una volta che si è sul pixel desiderato per bloccare i valori

    inserisci qui la descrizione dell'immagine


Risposta ben scritta e sorprendente - grazie! Ma è difficile scrivere 625 MB di download per il vino, quindi spero che Ian B ottenga un po 'di aiuto con la sua graziosa piccola app di pitone ....
nealmcb

Basta usare xmag, come descritto di seguito, e tenere premuto il pulsante del mouse sul pixel di cui si desidera le coordinate.
hackerb9,

12

C'è uno strumento chiamato gpick .

Qui puoi vedere un'immagine dello strumento. Con gpick puoi selezionare pixel, vedere il codice HTML, aggiungere colori alla tavolozza e generare colori.

Per usarlo, fai clic con il tasto destro del mouse sull'esagono, quindi usa la barra spaziatrice per salvare i colori nella tavolozza.

gpick


Grazie, quasi fa quello che voglio, ma non sembra mostrare le coordinate dei pixel.
Flash

Potresti anche contrassegnare questa domanda come completata?
barra rovesciata il

No - dato che non ho ancora la risposta :)
Flash

gpick sembra fantastico, basta sudo apt-get install gpickinstallarlo
Bloke,

6

Questo ti porterà quello che vuoi, credo. Devo ammettere che è un paio di passaggi, ma sembra peggio di quanto non sia da quando ho mostrato ogni piccolo passo.

Impostare

Installa ImageMagick e Shutter.

sudo apt-get install imagemagick shutter

Come ottenere le coordinate x, y e il colore

A. Apri l'otturatore e fai clic sul pulsante di selezione

foto del pulsante di selezione clic

B. Nota che quando sposti il ​​mouse ti mostrerà le coordinate x, y che stai cercando.

inserisci qui la descrizione dell'immagine

Quando hai il posto giusto, vai avanti e fai clic con il pulsante del mouse e disegna un quadrato per catturare un'immagine. (Non importa quanto sia grande la tua immagine solo quando la avvii (angolo in alto a sinistra) sul pixel di interesse.)

inserisci qui la descrizione dell'immagine

C. Chiudere l'immagine nell'otturatore

inserisci qui la descrizione dell'immagine

D. Eseguire il comando seguente dal terminale. Questo ti darà i valori di colore del pixel in alto a sinistra.

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

E. Mentre nella riga di comando vai avanti ed elimina l'immagine in modo che la volta successiva in cui l'otturatore scatta una foto le dia lo stesso nome. (Altrimenti dovrai regolare il nome nel passaggio precedente (D).

rm ~/Pictures/Selection_001.png

Convertire è ovviamente l'opzione migliore, ma preferirei scegliere rgba+ od: askubuntu.com/a/874503/52975
Ciro Santilli 21 改造 中心 法轮功 六四 事件

6

Incolla questo codice in un editor di testo, rendilo eseguibile ed eseguilo. Quando scegli un colore con il contagocce, le coordinate xey appariranno in alto.

Modifica : ha scritto il codice per aggiungere una finestra di zoom. Per catturare i pixel all'esterno della finestra, fai clic sul pulsante (non sul contagocce). Fai di nuovo clic sul pulsante per smettere di afferrare il puntatore. Non ho capito come disegnare un mirino con il Cairo, ma probabilmente puoi usarlo così com'è. Ho lasciato del codice cairo lì nel caso qualcuno mi potesse dire perché il mio rettangolo non disegna ...

#!/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
Bella risposta. Molto più semplice.
snowguy,

1
Ha funzionato, ma non riesco a vedere il pixel che sto per selezionare fino a quando non lo faccio clic. Speravo di essere in grado di ingrandire l'area intorno al cursore in modo da poter ottenere esattamente il pixel giusto.
Flash

Provalo ora ... Progetto interessante e ho imparato molto. Spero che qualcuno possa aiutarmi a capire perché non riesco a disegnare sulla finestra dello zoom con Cairo.
Ian B.

4

Se qualcuno vuole farlo in futuro, non è necessario scaricare nulla (certamente non centinaia di megabyte di roba Windows come suggerisce un'altra risposta). Una soluzione semplice fornita da Ubuntu è xmag. Xmag fa parte del pacchetto x11-apps che dovrebbe essere già installato di default.

È facile. Esegui xmag, fai clic per selezionare una regione dello schermo, quindi tieni premuto il pulsante del mouse nella vista ingrandita per visualizzare le coordinate esatte dei pixel.

Schermata di xmag, sans pointer

Puoi leggere il manuale di xmag digitando man xmag.


Per modificare l'ingrandimento utilizzare l' -magopzione (il valore predefinito è 5), ad es. xmag -mag 10Per farlo saltare dieci volte.
dessert,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.