Инструмент, позволяющий легко выбрать пиксель на экране и получить цвет и абсолютные координаты

18

Я ищу инструмент, который позволяет мне выбрать любой пиксель на экране и получить его цвет RGB и абсолютное (x, y) местоположение.

Я использовал инструменты в Windows, которые показывают большой увеличенный квадрат с перекрестием, позволяя мне легко выбрать нужный пиксель и получить его детали.

Есть ли что-нибудь подобное для Ubuntu?

вспышка
источник
просто любопытно, почему вы ищете именно эту комбинацию вместе ... которая может помочь нам придумать ответ. почему вы хотите знать координаты x, y и цвет?
снежный человек
Я пишу инструмент автоматизации, который отправляет ввод с клавиатуры и мыши в ответ на просмотр определенных вещей на экране. Некоторые части зависят от использования смещений x, y определенных кнопок и т. Д. Внутри окна, и я хотел бы найти простой способ точно найти эти смещения.
Вспышка
Если это для сети, и вы Firefox, то есть расширение под названием ColorZilla. colorzilla.com/firefox
Аноним
Эндрю, похоже, Ян Б написал инструмент, который делает то, что ты хочешь. Похоже, он заслуживает награды.
снежный парень

Ответы:

4

Лучше всего подходит ... крошечный инструмент Windows под названием ColorPix (через WINE)

После долгих и трудных поисков кажется, что ни один из доступных инструментов для Ubuntu / Linux не удовлетворяет обоим вашим критериям: увеличение и отображение координат .

Итак, мы выбираем крошечный инструмент Windows, который, что очень важно, просто работает с установкой WINE по умолчанию, без настройки, установки, DLL и т. Д.

  • Он имеет регулируемое масштабирование, копирование одним нажатием в нескольких форматах и ​​отображение координат:

    введите описание изображения здесь

1. Установите Wine

sudo apt-get install wine

(Это оно!)

2. Скачать ColorPix

ColorPix может быть официально загружен как крошечный, портативный 600-килобайтный 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 , вставьте ниже и сохраните файл:

    [Desktop Entry]
    Name = ColorPix
    GenericName = ColorPix
    Комментарий = ColorPicker через WINE
    Exec = wine /usr/local/bin/ColorPix.exe
    Terminal = ложь
    Icon = / USR / доли / иконки / colorpix.png
    Type = Application
    StartupNotify = TRUE
    
  • Из терминала запустите:

    sudo chmod +x /usr/share/applications/colorpix.desktop
    
  • Через несколько секунд он будет доступен в панели запуска как:

    введите описание изображения здесь

4. Использование ColorPix

Запустите его, и в первый раз это может занять несколько секунд, пока WINE инициализируется.

Снимок экрана ниже показывает это в действии, с:

  • Координаты сверху
  • Значения цвета в разных форматах ниже (нажмите, чтобы скопировать в буфер)
  • Регулируемая лупа ниже
  • Нажмите любую клавишу, как только вы на нужном пикселе, чтобы зафиксировать значения

    введите описание изображения здесь

иш
источник
Хорошо написанный, удивительный ответ - спасибо! Но 625 МБ для вина трудно переварить, поэтому я надеюсь, что Ян Б получит некоторую помощь в своем симпатичном маленьком приложении на python ....
nealmcb
Просто используйте xmag, как описано ниже, и удерживайте кнопку мыши на пикселе, координаты которого вы хотите.
hackerb9
12

Существует инструмент под названием gpick .

Здесь вы можете увидеть изображение инструмента. С помощью gpick вы можете выбирать пиксели, просматривать HTML-код, добавлять цвета в палитру и генерировать цвета.

Чтобы использовать его, щелкните правой кнопкой мыши по центру шестиугольника, затем используйте пробел, чтобы сохранить цвета в палитре.

gpick

slashcrack
источник
Спасибо, это почти то, что я хочу, но не показывает координаты пикселей.
Вспышка
Не могли бы вы также отметить этот вопрос как завершенный?
Слэшкрак
Нет - поскольку у меня до сих пор нет ответа :)
Вспышка
gpick выглядит великолепно, просто sudo apt-get install gpickустановите его
Bloke
6

Это даст вам то, что вы хотите, я верю. По общему признанию, это несколько шагов, но это выглядит хуже, чем когда я показывал каждый маленький шаг.

Настроить

Установите 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
snowguy
источник
Конвертировать, безусловно, лучший вариант, но я бы предпочел перейти на rgba+ od: askubuntu.com/a/874503/52975
Сиро Сантилли, 21 января 17
6

Вставьте этот код в текстовый редактор, сделайте его исполняемым и запустите его. Когда вы выбираете цвет с помощью пипетки, координаты x и y появятся вверху.

Редактировать : Написал код для добавления окна масштабирования. Чтобы получить пиксели за пределами окна, нажмите кнопку (не пипетку). Нажмите кнопку еще раз, чтобы остановить захват указателя. Не понял, как нарисовать перекрестие с Каиром, но вы, вероятно, можете использовать как есть. Я оставил там какой-то каирский код на случай, если кто-нибудь скажет мне, почему мой прямоугольник не нарисован ...

#!/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
Хороший ответ. Гораздо проще.
снежный человек
1
Получилось, но я не вижу пиксель, который собираюсь выбрать, пока не щелкну по нему. Я надеялся, что смогу увеличить область вокруг курсора, чтобы убедиться, что я получаю точно правильный пиксель.
Вспышка
Попробуйте сейчас ... Интересный проект, и я многому научился. Надеюсь, кто-нибудь сможет помочь мне понять, почему я не могу нарисовать окно масштабирования с помощью Каира.
Ян Б.
4

Если кто-то захочет сделать это в будущем, вам не нужно ничего скачивать (конечно, не сотни мегабайт Windows-содержимого, как предполагает другой ответ). Простое решение Ubuntu поставляется с это xmag. Xmag является частью пакета x11-apps, который уже должен быть установлен по умолчанию.

Это просто. Запустите xmag, щелкните, чтобы выбрать область экрана, затем нажмите и удерживайте кнопку мыши в увеличенном виде, чтобы увидеть точные координаты пикселей.

Снимок экрана xmag, без указателя

Вы можете прочитать инструкцию xmag Введя man xmag.

hackerb9
источник
Чтобы изменить увеличение, используйте -magопцию (по умолчанию 5), например, xmag -mag 10чтобы увеличить ее десять раз.
десерт