มีเครื่องมือบรรทัดคำสั่งที่ส่งคืนสีของพิกเซลตามพิกัดหน้าจอหรือไม่


11

มีเครื่องมือบรรทัดคำสั่งส่งกลับค่าสีของพิกเซล, เพียงลำพังบนพื้นฐานของหน้าจอพิกัด

มีเครื่องมือดังกล่าวหรือไม่?

(นอกจากนี้: เครื่องมือไม่จำเป็นต้องมีการดำเนินการของผู้ใช้มันคือการทำงานเป็นวนรอบในสคริปต์)


คำตอบ:


14

คุณสามารถใช้โปรแกรมgrabc มันจะเปิดตัวชี้เมาส์ของคุณใน crosshair และคืนค่า HTML และ RGB ของสีที่เลือก

sudo apt-get install grabc

ข้อเสีย: เป็นไปไม่ได้ที่จะทำการเลือกพิกเซลที่แม่นยำเนื่องจาก crosshair ไม่บางพอ


คุณสามารถสร้างสคริปต์ไพ ธ อนได้ดังนี้

#!/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)"ในสคริปต์ทุบตีของคุณ แน่นอนคุณต้องเปลี่ยนสคริปต์ในแบบที่คุณต้องการเพิ่มการจัดการข้อผิดพลาดและอื่น ๆ

PS: ฉันไม่แน่ใจว่าคุณสามารถทำอะไรกับ DeprecationWarning ได้ดังนั้นฉันจึงปิดมันในบรรทัดแรก


ขอบคุณ htorque แต่อีกครั้งฉันก็ตระหนักว่าสายเกินไปที่ฉันได้ออกข้อกำหนดสำคัญ ... ฉันต้องการให้มันทำงานแบบวนซ้ำอัตโนมัติในลูปในชุดสคริปต์ ดังนั้นขอขอบคุณที่เฮดอัพในแอพเล็ก ๆ นี้ มันจะมีประโยชน์แน่นอนในบางครั้ง .. (แต่ไม่ใช่สำหรับการแก้ไขปัจจุบันของฉันที่จะใช้ "un-manned")
Peter.O

htorque: สคริปต์ Python ของคุณเหมาะกับการเรียกเก็บเงินอย่างสมบูรณ์แบบสำหรับสเปคของฉัน (ผู้ใช้ทั่วไป! การเปลี่ยนรายละเอียดเสมอ! :) ... การทำงานโดยตรงกับพิกัดจะดีกว่ามากสำหรับ proc "find the pattern-pixel" ของฉัน ... และจากนั้นฉันก็สามารถ xmacro เคอร์เซอร์ไปยัง co-ords ที่เพิ่งค้นพบแล้ว xmacro คลิกขวา; ถูกต้องกับเป้าหมาย .... ง่าย ๆ ! (สำหรับ Pythonistas :)
Peter.O

no module named numpy.core.multiarray; Segmentation faultการเดินทาง ส่วนใดขึ้นอยู่กับโมดูลนี้
Drew Chapin

6

นี่เป็นสิ่งที่ค่อนข้างยุ่งเหยิง แต่คุณสามารถทำสิ่งนี้ได้ด้วย xdotool ซึ่งช่วยให้คุณสามารถโต้ตอบกับเมาส์และ grabc ที่รับสีจากตำแหน่งที่คลิกบนหน้าจอ

sudo apt-get install xdotool grabc

วิ่งครั้งแรก grabc แต่พื้นหลังมัน

grabc &

จากนั้นดำเนินการ mouseclick โดยใช้ xdotool

xdotool click 1

การคลิกจะถูกจับโดยเคอร์เซอร์ของ grabc และกระบวนการพื้นหลังพร้อมแสดงสี


น่าสนใจ misterben .. "cludgy" สามารถใช้ได้;) ฉันได้ยินคำพูดเมื่อเร็ว ๆ นี้ "แมวดำแมวขาวแมวลายแมว .. ตราบใดที่มันจับเมาส์" ... แต่ฉันจำได้ว่าเห็นบางสิ่งบางอย่างในหน้าข้อมูลเครื่องมือของแมโครเกี่ยวกับพิกเซล (แต่อาจเกี่ยวข้องกับพิกัดเท่านั้น) ... ฉันต้องการสอบถามจำนวนพิกเซลผ่านหน้าจอและฉันต้องการหลีกเลี่ยงการสลับเคอร์เซอร์ที่เกิดจาก grabc ... ตอนนี้ฉันได้เห็น "grabc" ในการดำเนินการฉันต้องการสิ่งที่คว้า สีขึ้นอยู่กับพิกัด (ฉันได้ทำสิ่งนี้บ่อยครั้งใน Windows :( ... ฉันหวังว่าจะมีบางอย่างที่คล้ายคลึงกันสำหรับ Linux :)
Peter.O

คุณสามารถใช้ xdotool เพื่อรับพิกัดตัวชี้และใช้กับสคริปต์หลามของ htorque xdotool getmouselocation | sed -e 's/x://' -e 's/y://' -e 's/ screen:.*$//'จะคว้า coords และทำความสะอาดลงในช่องว่างคั่นค่า xy เพื่อป้อนไปยังสคริปต์นั้น
มิสเตอร์เบ็น

misterben ขอบคุณสำหรับความช่วยเหลือของคุณฉันได้เรียนรู้เพิ่มเติมเกี่ยวกับ backgrouding (มีประโยชน์มาก) .... ฉันไม่ได้ตระหนักถึงมันเมื่อฉันถามคำถามแรก แต่วิธี "รับสีโดยพิกัด" กลายเป็น เป็นวิธีที่จะไป
Peter.O

ฉันได้ลองของคุณแล้วxdtool getmouselocation... ดีมากขอบคุณ ... ความมีประโยชน์ของ sed ช่วยให้ฉันทึ่ง!
Peter.O

3

โซลูชันที่แตกต่างการใช้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 ใน Q&A StackOverflowและเธรด imagemagick.orgนี้


ขอบคุณมันใช้งานได้แม้ว่ามันจะช้ากว่ามาก (ผู้ใช้ 0.363 จริง 0.456s sys 0.064s) กว่าสคริปต์ python ของ htorque (ผู้ใช้จริง 0.097s 0.072s sys 0.020s)
Peter.O

@ Peter.O ใช่ แต่มันก็เป็นจริงถ้างูหลามและไลบรารีที่นำเข้าถูกแคชในหน่วยความจำของคุณแล้ว ในการเริ่มเย็นสคริปต์หลามจะช้าลงอย่างมีนัยสำคัญ ดังนั้นหากสคริปต์ของคุณทำงานเพียงบางครั้งคุณอาจต้องการใช้โซลูชันของฉัน PS: คุณสามารถเพิ่มความเร็วในสิ่งต่าง ๆ ถ้าคุณรู้ว่าคุณต้องการตรวจสอบอะไร xwdสนับสนุนการหน้าจอรหัสหน้าต่างเฉพาะเพื่อให้คุณสามารถสอบถามหน้าต่าง ID (เช่นxdotool search --name "$Win" | head -n1) และจากนั้นจะผ่านมันไปด้วยxwd xwd -id "$WinID" -silent | ...หมายเหตุ: พิกัดจะสัมพันธ์กับหน้าต่างในกรณีนี้
Glutanimate

2

ฉันได้เขียนโมดูล python สำหรับการดำเนินการเช่นนี้เรียกว่า Macropolo แต่มันทำอะไรได้มากกว่าการรับสีของพิกเซลบนหน้าจอ

นี่คือกระทู้ที่ฉันได้แชร์: http://ubuntuforums.org/showthread.php?t=2155281

โมดูลมีฟังก์ชั่นมากมายที่ช่วยให้คุณเช่นนับจำนวนพิกเซลที่มีสีเฉพาะในพื้นที่ของหน้าจอค้นหาสีพิกเซลในพื้นที่รอพิกเซลหรือพื้นที่ของหน้าจอมีเฉพาะ สีรอสีพิกเซลและเรียกใช้ฟังก์ชั่นอื่นขณะรอ (เช่นเลื่อนเคอร์เซอร์เพื่อไม่ให้หน้าจอดับในขณะที่คุณกำลังรอสีที่ต้องการ)

แต่อย่างที่ฉันบอกไปมันทำอะไรได้หลายอย่างเช่นการจำลองการคลิกเมาส์และคีย์บอร์ดการจับภาพหน้าจอของพื้นที่หน้าจอและอื่น ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.