Я ищу инструмент, который позволяет мне выбирать любой пиксель на экране и получать его цвет RGB и абсолютное (x, y) местоположение.
Я использовал инструменты в Windows, которые показывают большой увеличенный квадрат с перекрестием, позволяя мне легко выбрать нужный пиксель и получить его детали.
Есть ли что-нибудь подобное для Ubuntu?
После поиска долго и трудно, кажется, что ни один из доступных инструментов для Ubuntu/Linux не выполняет оба Ваших критерия, т.е. увеличение и координирует дисплей.
Таким образом, мы идем для крошечного инструмента Windows, который - критически - просто работает с ВИННОЙ установкой по умолчанию, никакой конфигурацией, установкой, DLLs, и т.д. необходимым.
Это показывает корректируемое масштабирование, копию с одним щелчком в нескольких форматах и координационном дисплее:
1. Вино установки
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 Comment=ColorPicker via WINE Exec=wine /usr/local/bin/ColorPix.exe Terminal=false Icon=/usr/share/icons/colorpix.png Type=Application StartupNotify=true
От терминала, выполненного:
sudo chmod +x /usr/share/applications/colorpix.desktop
Через несколько секунд это будет доступно в средстве запуска как:
4. Использование ColorPix
Запустите его, и в самый первый раз, когда может потребоваться несколько секунд, в то время как ВИНО инициализирует.
Снимок экрана ниже показывает его в действии, с:
Нажмите любую клавишу, после того как Вы находитесь на своем желаемом пикселе для блокировки значений
Если кто-то захочет сделать это в будущем, вам не нужно ничего скачивать (конечно, не сотни мегабайт Windows-содержимого, как предполагает другой ответ). Простое решение, с которым поставляется Ubuntu, - xmag
. Xmag является частью пакета x11-apps, который уже должен быть установлен по умолчанию.
Это легко. Запустите xmag
, щелкните, чтобы выбрать область экрана, затем нажмите и удерживайте кнопку мыши в увеличенном виде, чтобы увидеть точные координаты пикселей.
Вы можете прочитать руководство по xmag, набрав man xmag
.
Вставьте этот код в текстовый редактор, сделайте его исполняемым файлом и выполните его. При выборе цвета с глазной пипеткой координаты 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()
Это даст тебе то, что ты хочешь, я верю. По общему признанию, это несколько шагов, но это выглядит хуже, чем когда я показывал каждый маленький шаг.
Настройка
Установка ImageMagick & amp; Затвор.
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
Существует инструмент под названием gpick .
Здесь вы можете увидеть изображение инструмента. С помощью gpick вы можете выбирать пиксели, просматривать HTML-код, добавлять цвета в палитру и генерировать цвета.
Чтобы использовать его, щелкните правой кнопкой мыши середину шестиугольника, затем используйте пробел, чтобы сохранить цвета в палитре.