Чи є інструмент командного рядка повертає значення кольору пікселя, виходячи виключно з його координат екрана .
Чи є такий інструмент?
(Також: Інструмент не повинен вимагати жодних дій користувача. Він запускається в циклі в сценарії.)
Чи є інструмент командного рядка повертає значення кольору пікселя, виходячи виключно з його координат екрана .
Чи є такий інструмент?
(Також: Інструмент не повинен вимагати жодних дій користувача. Він запускається в циклі в сценарії.)
Відповіді:
Ви можете використовувати програму 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, тому я вимкнув це в першому рядку.
no module named numpy.core.multiarray; Segmentation fault
. Яка частина залежить від цього модуля?
Це трохи невдало, але ви можете досягти цього за допомогою xdotool, який дозволяє взаємодіяти з мишею, і grabc, який отримує колір із місця, натиснутого на екрані.
sudo apt-get install xdotool grabc
Спочатку запустіть grabc, але виберіть його
grabc &
Потім виконайте клацання миші за допомогою xdotool
xdotool click 1
Клацання буде зафіксовано курсором grabc та фоновим процесом із виведенням кольору.
xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'
захопить координати та очистить їх до значень xy, розділених пробілом, щоб подати до цього сценарію.
xdtool getmouselocation
... дуже приємно, дякую ... корисність sed просто продовжує дивувати мене!
Інше рішення, використовуючи 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 .
xwd
підтримує скріншоти конкретних ідентифікаторів вікон, так що ви можете запросити ідентифікатор вікна (наприклад xdotool search --name "$Win" | head -n1
) , а потім передати його xwd
з xwd -id "$WinID" -silent | ...
. Примітка: координати в цьому випадку будуть відносно вікна.
Я написав модуль python для таких операцій, які називаються Macropolo. Але це набагато більше речей, ніж просто отримання кольору пікселя на екрані.
Ось повідомлення на форумі, де я ним поділився: http://ubuntuforums.org/showthread.php?t=2155281
Модуль має багато функцій, які дозволяють, наприклад, підрахувати кількість пікселів, які мають певний колір у зоні екрана, шукати кольори пікселів у зоні, чекати, коли піксель чи область екрана мають певний кольором, зачекайте піксельного кольору та запускайте якусь іншу функцію під час очікування (наприклад, перемістіть курсор, щоб екран не вимикався, поки ви чекаєте певного кольору).
Але, як я вже сказав, це робить набагато більше речей, таких як імітація клацань миші та клавіатури, знімання екрана на екрані та багато іншого.