Чи є інструмент командного рядка, який повертає колір пікселя на основі координат екрана?


11

Чи є інструмент командного рядка повертає значення кольору пікселя, виходячи виключно з його координат екрана .

Чи є такий інструмент?

(Також: Інструмент не повинен вимагати жодних дій користувача. Він запускається в циклі в сценарії.)


Відповіді:


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: Ваш сценарій Python ідеально підходить для моїх поправлених специфікацій (типовий користувач! завжди змінюючи специфікації! :) ... Робота безпосередньо над координатами набагато краще для моєї процедури "знайти шаблон пікселя" ... і тоді я можу просто запустити курсор у щойно знайдені спілки, а потім xmacro - клацнути правою кнопкою миші; прямо на ціль .... Легко! (для піфоністів :)
Пітер.О

Отримання no module named numpy.core.multiarray; Segmentation fault. Яка частина залежить від цього модуля?
Дрю Шапін

6

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

sudo apt-get install xdotool grabc

Спочатку запустіть grabc, але виберіть його

grabc &

Потім виконайте клацання миші за допомогою xdotool

xdotool click 1

Клацання буде зафіксовано курсором grabc та фоновим процесом із виведенням кольору.


Цікаво, містербен .. "незграбність" може бути гаразд;) Я недавно почула приказку. "чорна кішка, біла кішка, кішка таббі ... до тих пір, поки вона ловить мишу" ... але я туманно згадую, що бачив щось на одній з інформаційних сторінок макроінструменту про пікселі (але, можливо, це стосувалося лише координат) ... Я хочу запитати лінійку пікселів по екрану, і я хотів би уникнути перемикання курсора, викликаного grabc ... Тепер, коли я бачив "grabc" в дії, я б скоріше щось захопив колір на основі координат (я робив це досить часто в Windows :( ... Сподіваюся, є щось подібне для Linux :)
Peter.O

Ви можете використовувати xdotool, щоб отримати координати вказівника та використовувати їх із скриптом python htorque. xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'захопить координати та очистить їх до значень xy, розділених пробілом, щоб подати до цього сценарію.
misterben

misterben, дякую за вашу допомогу, я дізнався більше про backgrouding (дуже зручно) .... Я цього не зрозумів, коли вперше задав питання, але метод "отримати колір за координатами" виявився бути дорогою.
Пітер.О

Я щойно спробував твої xdtool getmouselocation... дуже приємно, дякую ... корисність sed просто продовжує дивувати мене!
Пітер.О

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 Q&A та цю тему imagemagick.org .


Дякую, це працює, хоча це набагато повільніше (реальний користувач 0,363s 0,456s sys 0,064s), ніж сценарій python htorque (справжній користувач 0,097s 0,072s sys 0,020s).
Пітер.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

Модуль має багато функцій, які дозволяють, наприклад, підрахувати кількість пікселів, які мають певний колір у зоні екрана, шукати кольори пікселів у зоні, чекати, коли піксель чи область екрана мають певний кольором, зачекайте піксельного кольору та запускайте якусь іншу функцію під час очікування (наприклад, перемістіть курсор, щоб екран не вимикався, поки ви чекаєте певного кольору).

Але, як я вже сказав, це робить набагато більше речей, таких як імітація клацань миші та клавіатури, знімання екрана на екрані та багато іншого.

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