Apakah ada alat baris perintah yang mengembalikan warna piksel berdasarkan koordinat layar?

11

Apakah ada alat baris perintah mengembalikan nilai warna piksel, hanya berdasarkan pada koordinat layarnya .

Apakah ada alat seperti itu?

(Juga: Alat ini tidak memerlukan tindakan pengguna apa pun. Alat ini dijalankan dalam satu lingkaran dalam skrip.)

Peter.O
sumber
Kemungkinan duplikat Alat untuk dengan mudah memilih piksel pada layar dan mendapatkan koordinat warna dan absolut
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Jawaban:

14

Anda dapat menggunakan grabc program . Ini akan mengubah pointer mouse Anda menjadi crosshair dan mengembalikan nilai HTML dan RGB dari warna yang dipilih.

sudo apt-get install grabc

Kelemahannya: tidak mungkin untuk melakukan pemilihan tepat piksel karena crosshair tidak cukup tipis.


Anda juga dapat membuat skrip python, seperti:

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

buat itu bisa dieksekusi, dan jalankan pixel_rgb="$(/path/to/script.py x y)"di skrip bash Anda. Tentu saja Anda harus mengubah skrip seperti yang Anda butuhkan, menambahkan beberapa penanganan kesalahan, dan semacamnya.

PS: Saya tidak yakin bisa melakukan apa-apa tentang DeprecationWarning, jadi saya mematikannya di baris pertama.

htorque
sumber
Terima kasih banyak, tapi sekali lagi saya menyadari sudah terlambat bahwa saya telah meninggalkan persyaratan yang signifikan ... Saya ingin itu berjalan secara otomatis dalam satu lingkaran dalam skrip batch. Jadi terima kasih atas aplikasi kecil ini. Ini pasti akan berguna beberapa saat .. (tetapi tidak untuk sutuation saya saat ini di mana akan menjalankan "un-
manned
htorque: Skrip Python Anda sangat cocok dengan tagihan untuk spesifikasi yang saya amandemen (pengguna umum! selalu mengubah spesifikasi! :) ... bekerja langsung pada koordinat jauh lebih baik untuk proses "find the pixel-pattern" saya ... dan kemudian saya bisa xmacro kursor ke co-ords yang baru saja ditemukan, dan kemudian xmacro klik kanan; tepat sasaran .... Mudah! (untuk Pythonistas :)
Peter.O
Mendapatkan no module named numpy.core.multiarray; Segmentation fault. Bagian mana yang tergantung pada modul ini?
Drew Chapin
6

Ini agak tidak jelas, tetapi Anda dapat mencapainya dengan xdotool yang memungkinkan Anda berinteraksi dengan mouse, dan ambil yang mendapatkan warna dari lokasi yang diklik di layar.

sudo apt-get install xdotool grabc

Jalankan grabc pertama tetapi latar belakangnya

grabc &

Kemudian lakukan mouseclick menggunakan xdotool

xdotool click 1

Klik akan ditangkap oleh kursor grabc dan proses latar belakang dengan menampilkan warna.

misterben
sumber
Menarik, misterben .. "cludgy" bisa oke;) Saya mendengar pepatah baru-baru ini. "kucing hitam, kucing putih, kucing kucing .. selama itu menangkap mouse" ... tapi saya samar-samar ingat melihat sesuatu di salah satu halaman info makro-alat tentang piksel (tapi mungkin itu hanya berkoordinasi) ... Saya ingin meminta garis piksel di layar, dan saya ingin menghindari perpindahan kursor yang disebabkan oleh grabc ... Sekarang saya telah melihat "grabc" beraksi, saya lebih suka sesuatu yang mengambil warna berdasarkan koordinat (Saya sudah cukup sering melakukan ini di Windows :( ... Saya harap ada sesuatu yang serupa untuk Linux :)
Peter.O
Anda bisa menggunakan xdotool untuk mendapatkan koordinat pointer dan menggunakannya dengan skrip python htorque. xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'akan mengambil coord dan membersihkannya ke ruang xy nilai terpisah untuk memberi makan ke skrip itu.
misterben
misterben, terima kasih atas bantuan Anda, saya telah belajar lebih banyak tentang backgrouding (sangat berguna) .... Saya tidak menyadarinya ketika saya pertama kali mengajukan pertanyaan, tetapi metode "dapatkan warna melalui koordinasi" ternyata menjadi jalan untuk pergi.
Peter.O
Saya baru saja mencoba xdtool getmouselocation... Anda sangat bagus, terima kasih ... kegunaan sed hanya membuat saya luar biasa!
Peter.O
3

Solusi berbeda, menggunakan xwddan xdotool:

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

di mana $Xdan $Yadalah koordinat Anda.

Sebagai bagian dari Xorg, xwdharus sudah diinstal sebelumnya di sistem Anda. xdotooldapat diinstal dengan:

sudo apt-get install xdotool 

Berdasarkan jawaban @ Christian pada Q&A StackOverflow dan utas imagemagick.org ini .

Glutanimate
sumber
Terima kasih, itu berhasil, meskipun jauh lebih lambat (pengguna 0,363 s nyata 0,456 s sys 0,064) daripada skrip python htorque (pengguna 0,097 s nyata 0,072 s sys 0,020 s).
Peter.O
@ Peter.O Ya, tapi itu hanya berlaku jika python dan perpustakaan yang diimpor sudah di-cache di memori Anda. Mulai dingin skrip python akan secara signifikan lebih lambat. Jadi, jika skrip Anda hanya berjalan sesekali, Anda mungkin ingin menggunakan solusi saya. PS: Anda bisa mempercepat jika tahu jendela apa yang ingin Anda periksa. xwdmendukung pengambilan tangkapan layar ID jendela tertentu, sehingga Anda dapat meminta ID jendela (mis. xdotool search --name "$Win" | head -n1) lalu meneruskannya xwddengan xwd -id "$WinID" -silent | .... Catatan: koordinat akan relatif ke jendela dalam kasus ini.
Glutanimate
2

Saya telah menulis modul python untuk operasi seperti ini, yang disebut Macropolo. Tapi, ia melakukan lebih banyak hal daripada sekadar mendapatkan warna piksel di layar.

Inilah pos forum tempat saya membagikan: http://ubuntuforums.org/showthread.php?t=2155281

Modul ini memiliki banyak fungsi yang memungkinkan Anda untuk misalnya menghitung jumlah piksel yang memiliki warna tertentu di area layar, mencari warna piksel di area, menunggu piksel atau area layar memiliki area tertentu warna, tunggu warna piksel dan jalankan beberapa fungsi lain sambil menunggu (mis. pindahkan kursor untuk tidak membiarkan layar mati saat Anda sedang menunggu warna tertentu).

Tapi, seperti yang saya katakan, itu melakukan lebih banyak hal, seperti mensimulasikan klik mouse dan keyboard, mengambil screenshot dari area layar dan banyak lagi.

hytromo
sumber