Có công cụ dòng lệnh nào trả về màu của pixel dựa trên tọa độ màn hình không?


11

Có một công cụ dòng lệnh trả về giá trị màu của một pixel, chỉ dựa trên tọa độ màn hình của nó .

Có một công cụ như vậy?

(Ngoài ra: Công cụ không nên yêu cầu bất kỳ hành động nào của người dùng. Nó chạy trong một vòng lặp trong tập lệnh.)


Câu trả lời:


14

Bạn có thể sử dụng chương trình lấy . Nó sẽ biến con trỏ chuột của bạn trong một dấu thập và trả về các giá trị HTML và RGB của màu đã chọn.

sudo apt-get install grabc

Nhược điểm: không thể thực hiện các lựa chọn chính xác về pixel do hình chữ thập không đủ mỏng.


Bạn cũng có thể tạo một tập lệnh python, đại loại như:

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

làm cho nó có thể thực thi được và chạy pixel_rgb="$(/path/to/script.py x y)"trong tập lệnh bash của bạn. Tất nhiên, bạn cần thay đổi tập lệnh theo cách bạn cần, thêm một số xử lý lỗi và như vậy.

Tái bút: Tôi không chắc chắn chính xác bạn có thể làm bất cứ điều gì về Khấu hao, vì vậy tôi đã tắt nó ở dòng đầu tiên.


Cảm ơn htorque, nhưng một lần nữa tôi nhận ra quá muộn rằng tôi đã bỏ qua một yêu cầu quan trọng ... Tôi muốn nó chạy tự động trong một vòng lặp trong một tập lệnh bó. Vì vậy, cảm ơn bạn đã ủng hộ ứng dụng nhỏ này. Nó chắc chắn sẽ có ích vào một lúc nào đó .. (nhưng không phải cho khâu hiện tại của tôi, nơi sẽ chạy "không có người lái")
Peter.O

htorque: Tập lệnh Python của bạn phù hợp hoàn hảo với hóa đơn cho thông số kỹ thuật của tôi (người dùng thông thường! luôn thay đổi thông số kỹ thuật! :) ... làm việc trực tiếp trên tọa độ sẽ tốt hơn nhiều cho "tìm mô hình pixel" của tôi ... và sau đó tôi chỉ có thể xmacro con trỏ đến các đồng quỹ vừa tìm thấy, và sau đó xmacro nhấp chuột phải; đúng mục tiêu .... Dễ dàng! (dành cho Pythonistas :)
Peter.O

Bắt no module named numpy.core.multiarray; Segmentation fault. Phần nào phụ thuộc vào mô-đun này?
vẽ Chapin

6

Điều này hơi khó hiểu, nhưng bạn có thể đạt được điều này với xdotool cho phép bạn tương tác với chuột và lấy màu từ vị trí được nhấp trên màn hình.

sudo apt-get install xdotool grabc

Đầu tiên chạy Grabc nhưng nền nó

grabc &

Sau đó thực hiện một mouseclick bằng xdotool

xdotool click 1

Nhấp chuột sẽ được ghi lại bằng con trỏ của Grabc và quá trình nền với màu đầu ra.


Thật thú vị, misterben .. "cludgy" có thể ổn;) Tôi đã nghe một câu nói gần đây. "mèo đen, mèo trắng, mèo tabby .. miễn là nó bắt được chuột" ... nhưng tôi mơ hồ nhớ lại thấy một cái gì đó trong một trang thông tin của công cụ macro về pixel (nhưng có lẽ nó chỉ liên quan đến tọa độ) ... Tôi muốn truy vấn một dòng pixel trên màn hình và tôi muốn tránh việc chuyển đổi con trỏ do Grabc gây ra ... Bây giờ tôi đã thấy "Grabc" hoạt động, tôi muốn thay một cái gì đó lấy màu sắc dựa trên tọa độ (Tôi đã thực hiện điều này khá thường xuyên trong Windows :( ... Tôi hy vọng có một cái gì đó tương tự cho Linux :)
Peter.O

Bạn có thể sử dụng xdotool để lấy tọa độ con trỏ và sử dụng chúng với tập lệnh python của htorque. xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'sẽ lấy các cuộn dây và làm sạch chúng xuống các giá trị xy được phân tách bằng dấu cách để cung cấp cho tập lệnh đó.
misterben

misterben, nhờ sự giúp đỡ của bạn, tôi đã tìm hiểu thêm về backgrouding (rất tiện dụng) .... Tôi đã không nhận ra điều đó khi lần đầu tiên đặt câu hỏi, nhưng phương pháp "lấy màu bằng cách phối hợp" hóa ra là con đường để đi
Peter.O

Tôi chỉ loanh quanh để thử xdtool getmouselocation... rất tốt, cảm ơn ... sự hữu ích của sed chỉ khiến tôi kinh ngạc!
Peter.O

3

Một giải pháp khác nhau, sử dụng xwdxdotool:

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

nơi $X$Ylà tọa độ của bạn.

Là một phần của Xorg xwdnên được cài đặt sẵn trên hệ thống của bạn. xdotoolcó thể được cài đặt với:

sudo apt-get install xdotool 

Dựa trên câu trả lời của @ Christian trên một câu hỏi và trả lời về StackOverflowchủ đề fantemagick.org này .


Cảm ơn, nó hoạt động tốt, mặc dù nó chậm hơn nhiều (người dùng thực tế là 0,363 sys 0,064s) so với tập lệnh python của htorque (người dùng 0,097s thực tế 0,072s sys 0,020s).
Peter.O

@ Peter.O Có, nhưng điều đó chỉ đúng nếu python và các thư viện đã nhập đã được lưu trong bộ nhớ của bạn. Khi bắt đầu lạnh, kịch bản python sẽ chậm hơn đáng kể. Vì vậy, nếu tập lệnh của bạn chỉ thỉnh thoảng chạy, bạn có thể muốn sử dụng giải pháp của tôi. PS: Bạn có thể tăng tốc mọi thứ nếu bạn biết cửa sổ nào bạn muốn kiểm tra. xwdhỗ trợ việc chụp màn hình của các ID cửa sổ cụ thể, vì vậy bạn có thể truy vấn các ID cửa sổ (ví dụ xdotool search --name "$Win" | head -n1) và sau đó vượt qua nó để xwdxwd -id "$WinID" -silent | .... Lưu ý: tọa độ sẽ liên quan đến cửa sổ trong trường hợp này.
Glutimate

2

Tôi đã viết một mô-đun python cho các hoạt động như thế này, được gọi là Macropolo. Nhưng, nó làm được nhiều việc hơn là chỉ đơn giản là lấy màu của pixel trên màn hình.

Đây là bài viết diễn đàn nơi tôi đã chia sẻ nó: http://ubuntuforums.org/showthread.php?t=2155281

Mô-đun có nhiều chức năng cho phép bạn, ví dụ: đếm số lượng pixel có màu cụ thể trong một khu vực của màn hình, tìm kiếm (các) màu pixel trong khu vực, chờ một pixel hoặc một khu vực của màn hình có một cụ thể màu sắc, đợi màu pixel và chạy một số chức năng khác trong khi chờ đợi (ví dụ: di chuyển con trỏ vì không để màn hình tắt trong khi bạn chờ đợi một màu cụ thể).

Nhưng, như tôi đã nói, nó còn làm được nhiều thứ hơn, như mô phỏng nhấp chuột và bàn phím, chụp màn hình chiếm diện tích màn hình và hơn thế nữa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.