Существует ли инструмент командной строки, который возвращает цвет пикселя на основе координат экрана?

11

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

Есть ли такой инструмент?

(Также: инструмент не должен требовать каких-либо действий пользователя. Он должен выполняться в цикле в скрипте.)

Peter.O
источник

Ответы:

14

Вы можете использовать программу grabc . Он превратит указатель мыши в перекрестие и вернет значения HTML и RGB выбранного цвета.

sudo apt-get install grabc

Недостаток: невозможно сделать точный выбор пикселей, потому что перекрестие недостаточно тонкое.


Вы также можете создать скрипт на Python, что-то вроде:

#!/usr/bin/python -W ignore::DeprecationWarning
import sys
import gtk

def get_pixel_rgb(x, y):
    pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, 1, 1)
    pixbuf.get_from_drawable(gtk.gdk.get_default_root_window(),
                             gtk.gdk.colormap_get_system(), 
                             x, y, 0, 0, 1, 1)
    return pixbuf.get_pixels_array()[0][0]

print get_pixel_rgb(int(sys.argv[1]), int(sys.argv[2]))

сделайте его исполняемым и запустите его pixel_rgb="$(/path/to/script.py x y)"в своем скрипте bash. Конечно, вам нужно изменить скрипт так, как вам нужно, добавить обработку ошибок и тому подобное.

PS: Я не совсем уверен, что вы можете сделать что-нибудь с DeprecationWarning, поэтому я отключил его в первой строке.

htorque
источник
Спасибо htorque, но опять же я слишком поздно осознаю, что пропустил значительное требование ... Я хочу, чтобы оно выполнялось автономно в цикле в пакетном скрипте. Так что спасибо за хедз-ап на этом маленьком приложении. Это определенно пригодится когда-нибудь .. (но не для моей текущей ситуации, когда будет работать "без человека")
Peter.O
htorque: Ваш скрипт на Python идеально подходит для моих исправленных спецификаций (обычный пользователь! всегда меняю спецификации! :) ... работа с координатами гораздо лучше для моей процедуры "найди пиксельный паттерн" ... а затем я могу просто xmacro курсор на только что найденные co-ords, а затем xmacro правой кнопкой мыши; точно в цель .... легко! (для Pythonistas :)
Peter.O
Получение no module named numpy.core.multiarray; Segmentation fault. Какая часть зависит от этого модуля?
Дрю Чапин
6

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

sudo apt-get install xdotool grabc

Первый запуск grabc, но фон

grabc &

Затем выполните щелчок мышью с помощью xdotool

xdotool click 1

Клик будет захвачен курсором grabc и фоновым процессом с выводом цвета.

misterben
источник
Интересно, мистербен .. "может быть в порядке";) Недавно я услышал поговорку. "черная кошка, белая кошка, полосатый кот ... до тех пор, пока она ловит мышь" ... но я смутно припоминаю, что видел что-то на одной из информационных страниц макро-инструмента о пикселях (но, возможно, это было только в отношении координат) ... Я хочу запросить строку пикселей по экрану, и я бы хотел избежать переключения курсора, вызванного grabc ... Теперь, когда я увидел "grabc" в действии, я бы предпочел что-то, что захватывает цвет, основанный на координатах (я делал это довольно часто в Windows :( ... я надеюсь, что есть что-то похожее для Linux :)
Peter.O
Вы можете использовать xdotool, чтобы получить координаты указателя и использовать их со скриптом htorque на python. xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'возьмет координаты и очистит их до разделенных пробелами значений xy для подачи в этот скрипт.
Мистербен
misterben, спасибо за вашу помощь, я узнал больше о фоновом режиме (очень удобно) .... Я не понял этого, когда впервые задал вопрос, но метод "получить цвет по координатам" оказался будь способ идти.
Peter.O
Я только что попробовал вашу xdtool getmouselocation... очень милую, спасибо ... полезность Сэд просто удивляет меня!
Peter.O
3

Другое решение, используя xwdи xdotool:

xwd -root -silent | convert xwd:- -depth 8 -crop "1x1+$X+$Y" txt:- | grep -om1 '#\w\+'

где $Xи $Yваши координаты.

В составе Xorg xwdдолжна быть предустановленная на вашей системе. xdotoolможет быть установлен с:

sudo apt-get install xdotool 

Основано на ответе @ Christian о вопросах и ответах StackOverflow и этой ветке imagemagick.org .

Glutanimate
источник
Спасибо, это работает, хотя это намного медленнее (реальный пользователь 0.363s 0.456s sys 0.064s), чем скрипт python htorque (реальный пользователь 0.097s 0.072s sys 0.020s).
Peter.O
@ Peter.O Да, но это верно только в том случае, если python и импортированные библиотеки уже кэшированы в вашей памяти. При холодном запуске скрипт на python будет значительно медленнее. Так что, если ваш скрипт запускается только изредка, вы можете использовать мое решение. PS: Вы можете ускорить процесс, если знаете, какое окно вы хотите проверить. xwdподдерживает создание снимков экрана с определенными идентификаторами окон, поэтому вы можете запросить идентификатор окна (например xdotool search --name "$Win" | head -n1), а затем передать его с xwdпомощью xwd -id "$WinID" -silent | .... Примечание: координаты будут относительно окна в этом случае.
Glutanimate
2

Я написал модуль Python для таких операций, который называется Macropolo. Но он делает гораздо больше, чем просто получает цвет пикселя на экране.

Вот сообщение на форуме, где я им поделился: http://ubuntuforums.org/showthread.php?t=2155281

Модуль имеет много функций, которые позволяют, например, подсчитывать количество пикселей, которые имеют определенный цвет в области экрана, искать цвет (ы) пикселей в области, ждать, пока пиксель или область экрана имеют определенный color, дождитесь цвета пикселя и запустите другую функцию во время ожидания (например, переместите курсор, чтобы не дать экрану выключиться, пока вы ждете определенного цвета).

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

hytromo
источник