Інструмент для легкого вибору пікселя на екрані та отримання кольорових та абсолютних координат


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. Встановіть вино

sudo apt-get install wine

(Це воно!)

2. Завантажте ColorPix

ColorPix можна офіційно завантажити в крихітному, портативний 600Kb ехе тут

Я пропоную завантажити безпосередньо у свій локальний каталог бінарних файлів за допомогою:

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
    Коментар = ColorPicker через WINE
    Exec = вино /usr/local/bin/ColorPix.exe
    Термінал = хибний
    Icon = / usr / share / icons / colorpix.png
    Тип = Додаток
    StartupNotify = вірно
    
  • З терміналу запустіть:

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

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

4. Використання ColorPix

Почніть це, і в перший раз це може зайняти кілька секунд, коли WINE ініціалізується.

На скріншоті нижче показано його в дії, з:

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

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


Добре написана, дивна відповідь - дякую! Але важко шлунком 625 Мб завантаження вина, тому я сподіваюся, що Іан Б отримає допомогу у своєму
милому

Просто використовуйте xmag, як описано нижче, і утримуйте кнопку миші на пікселі, для якого ви хочете координати.
hackerb9

12

Є інструмент під назвою gpick .

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

Щоб скористатися нею, клацніть правою кнопкою миші посередині шестикутника, а потім використовуйте пробіл, щоб зберегти кольори в палітрі.

gpick


Завдяки цьому майже все, що я хочу, але, схоже, не показує піксельних координат.
Спалах

Чи можете ви також позначити це питання як закінчене?
косинка

Ні - як я досі не маю відповіді :)
Спалах

gpick чудово виглядає, просто зробіть його sudo apt-get install gpickдля встановлення
Bloke

6

Це отримає вам те, що ви хочете, я вірю. Справді, це кілька кроків, але це виглядає гірше, ніж це, оскільки я показував кожен маленький крок.

Налаштування

Встановіть ImageMagick & Shutter.

sudo apt-get install imagemagick shutter

Як отримати координати x, y та колір

A. Відкрийте затвор і натисніть кнопку вибору

pic натискання кнопки вибору

В. Зауважте, що під час переміщення миші навколо неї буде показано координати 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

Перетворення, очевидно, найкращий варіант, але я б краще пішов на rgba+ od: askubuntu.com/a/874503/52975
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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-додатків, який уже повинен бути встановлений за замовчуванням.

Це легко. Запустіть xmag, клацніть, щоб вибрати область екрана, потім утримуйте кнопку миші у збільшеному вікні, щоб побачити точні координати пікселів.

Знімок екрана xmag, sans pointer

Ви можете прочитати посібник xmag, набравши текст man xmag.


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.