Existe uma ferramenta de linha de comando que retorna a cor do pixel com base nas coordenadas da tela?


11

Existe uma ferramenta de linha de comando que retorna o valor da cor de um pixel, com base unicamente nas coordenadas da tela .

Existe tal ferramenta?

(Além disso: a ferramenta não deve exigir nenhuma ação do usuário. É executada em loop em um script.)


Respostas:


14

Você pode usar o programa grabc . Ele transformará o ponteiro do mouse em uma cruz e retornará os valores HTML e RGB da cor selecionada.

sudo apt-get install grabc

Desvantagem: não é possível fazer seleções exatas de pixel porque a mira não é fina o suficiente.


Você também pode criar um script python, algo como:

#!/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]))

torne-o executável e execute pixel_rgb="$(/path/to/script.py x y)"em seu script bash. É claro que você precisaria alterar o script da maneira que precisava, adicionar algum tratamento de erro e assim por diante.

PS: Não sei exatamente se você pode fazer algo sobre o DeprecationWarning, então eu o desliguei na primeira linha.


Obrigado htorque, mas, novamente, percebi tarde demais que deixei de fora um requisito significativo ... Quero que ele seja executado de forma autônoma em um loop em um script em lote. Então, obrigado pelo aviso sobre este pequeno aplicativo. Definitivamente virá a calhar algum tempo .. (mas não para a minha atual sutuação em que está sendo executada "sem tripulação")
Peter

htorque: Seu script Python se encaixa perfeitamente nas minhas especificações recomendadas (usuário típico! sempre alterando as especificações! :) ... trabalhar diretamente nas coordenadas é muito melhor para o meu processo "encontrar o padrão de pixel" ... e então eu posso simplesmente xmacro o cursor para as coordenadas recém-encontradas, e então xmacro um clique com o botão direito; bem no alvo .... Fácil! (para os Pythonistas :)
Peter.O

Obtendo no module named numpy.core.multiarray; Segmentation fault. Qual parte é dependente deste módulo?
Tirou Chapin

6

Isso é um pouco complicado, mas você pode conseguir isso com o xdotool, que permite interagir com o mouse, e o grabc, que obtém a cor de um local clicado na tela.

sudo apt-get install xdotool grabc

Primeira execução grabc, mas em segundo plano

grabc &

Em seguida, execute um clique com o mouse usando o xdotool

xdotool click 1

O clique será capturado pelo cursor de grabc e o processo em segundo plano com a saída da cor.


Interessante, misterben .. "desajeitado" pode ficar bem;) ouvi um ditado recentemente. "gato preto, gato branco, gato tigrado ... desde que pegue o mouse" ... mas eu me lembro vagamente de ter visto algo em uma das páginas de informações da macro-ferramenta sobre pixels (mas talvez fosse apenas sobre coordenadas) ... quero consultar uma linha de pixels na tela e gostaria de evitar a troca de cursor causada por grabc ... Agora que vi "grabc" em ação, prefiro algo que agarre a cor com base em coordenadas (Eu fiz isso muitas vezes no Windows :( ... Eu espero que haja algo semelhante para Linux :)
Peter.O

Você pode usar o xdotool para obter as coordenadas do ponteiro e usá-las com o script python do htorque. xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'vai pegar as cordas e limpá-las para espaçar valores xy separados para alimentar esse script.
misterben

misterben, obrigado por sua ajuda, eu aprendi mais sobre criação de imagens (muito útil) .... Eu não percebi isso quando fiz a pergunta pela primeira vez, mas o método "obter a cor pelas coordenadas" acabou por seja o caminho a percorrer.
precisa saber é o seguinte

Acabei de tentar o seu xdtool getmouselocation... muito bom, obrigado ... a utilidade do sed continua me surpreendendo!
precisa saber é o seguinte

3

Uma solução diferente, usando xwde xdotool:

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

Onde $Xe $Ysuas coordenadas.

Como parte do Xorg xwddeve vir pré-instalado no seu sistema. xdotoolpode ser instalado com:

sudo apt-get install xdotool 

Baseado na resposta de @ Christian nas perguntas e respostas do StackOverflow e neste tópico do imagemagick.org .


Obrigado, ele funciona, embora seja muito mais lento (usuário real de 0.363s usuário 0.456s sys 0.064s) do que o script python do htorque (usuário real de 0.097s usuário 0.072s sys 0.020s).
Peter.O

@ Peter.O Sim, mas isso só é verdade se o python e as bibliotecas importadas já estiverem armazenadas em cache na sua memória. Em um início a frio, o script python será significativamente mais lento. Portanto, se seu script for executado apenas ocasionalmente, convém usar minha solução. PS: Você pode acelerar as coisas se souber qual janela deseja inspecionar. xwdsuportes tirar screenshots de IDs de janela específicas, para que você possa consultar o ID janela (por exemplo xdotool search --name "$Win" | head -n1) e, em seguida, passá-lo para xwdcom xwd -id "$WinID" -silent | .... Nota: neste caso, as coordenadas seriam relativas à janela.
precisa saber é o seguinte

2

Eu escrevi um módulo python para operações como essa, chamado Macropolo. Mas, faz muito mais coisas do que simplesmente obter a cor de um pixel na tela.

Aqui está o post do fórum em que eu o compartilhei: http://ubuntuforums.org/showthread.php?t=2155281

O módulo possui muitas funções que permitem, por exemplo, contar a quantidade de pixels que possuem uma cor específica em uma área da tela, procurar cores de pixel em área, aguardar um pixel ou uma área da tela ter um tamanho específico. cor, aguarde a cor do pixel e execute alguma outra função enquanto aguarda (por exemplo, mova o cursor para não deixar a tela desligar enquanto você espera por uma cor específica).

Mas, como eu disse, ele faz muito mais coisas, como simular cliques do mouse e teclado, captura de tela da área da tela e muito mais.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.