ฉันจะจับภาพหน้าจอจากหน้าต่างด้วยระยะขอบที่กำหนดเองได้อย่างไร


17

ฉันต้องการเครื่องมือที่จะทำสิ่งต่อไปนี้: การเลือกหน้าต่างจะสร้างภาพหน้าจอของหน้าต่างนั้นด้วยการเติมเต็มของxเช่นในภาพต่อไปนี้:

ดังนั้นในกรณีส่วนใหญ่xจะเท่ากับyแต่บางครั้งฉันต้องการระยะทางที่แตกต่างกัน

วิธีการทำภาพหน้าจอดังกล่าวโดยอัตโนมัติ? ฉันลองใช้ Shutter แต่ไม่พบการตั้งค่าแบบนั้น อย่างไรก็ตามมันรองรับปลั๊กอิน ดังนั้นปลั๊กอินอาจจะครอบตัดหน้าต่างด้วยวิธีนี้


ฉันสามารถถามเครื่องมือที่คุณใช้สร้าง mockup นั้นได้ไหม มันดูดีมาก :)
เซท

1
@ กฎของ InkScape! ฉันไม่ใช่ผู้เชี่ยวชาญ แต่ฉันชอบสร้างสิ่งเช่นนี้สำหรับโครงการของฉัน มันดูดีสำหรับดวงตา :-) นี่คือรุ่น PNGและSVG หนึ่ง พื้นที่เก็บข้อมูลนี้มีสิ่งอื่น ๆ ที่สร้างขึ้นด้วย InkScape
IonicăBizău

คำตอบ:


19

สคริปต์โดยใช้ชัตเตอร์

ฉันไม่คิดว่ามันมีอยู่จริง แต่ก็สามารถทำได้

หากคุณทำให้สคริปต์ด้านล่างพร้อมใช้งานภายใต้คีย์ผสม (คำอธิบายเพิ่มเติมด้านล่าง) หน้าต่างจะปรากฏขึ้นเพื่อให้คุณสามารถตั้งค่าระยะขอบของภาพหน้าจอของคุณทางซ้ายขวาบนและล่างโดยคั่นด้วยช่องว่าง:

ป้อนคำอธิบายรูปภาพที่นี่

ผลลัพธ์:

ป้อนคำอธิบายรูปภาพที่นี่

หรือ:

ป้อนคำอธิบายรูปภาพที่นี่

ผลลัพธ์:

ป้อนคำอธิบายรูปภาพที่นี่

เป็นต้น

ฉันตั้งค่าเริ่มต้นเป็น 30 px แต่คุณสามารถตั้งค่าเริ่มต้นใด ๆ (ดูด้านล่าง)

วิธีใช้

  • การใช้สคริปต์และShutter wmctrlสมมติว่าShutterมีอยู่ในระบบของคุณแล้ว (เนื่องจากคุณพูดถึงมัน) ให้ติดตั้งwmctrl:

    sudo apt-get install wmctrl
    

    NB ถ้าคุณใช้Kubuntu , Zenityไม่ได้ติดตั้งโดยค่าเริ่มต้น:

    sudo apt-get install zenity
    
  • คัดลอกสคริปต์ด้านล่างเป็นไฟล์ว่าง หากคุณต้องการคุณสามารถเปลี่ยน "ค่าเริ่มต้น" มาร์จในบรรทัดของสคริปต์:

    `arg =`
    
  • custom_screenshot.pyบันทึกเป็น

  • เพิ่มสคริปต์ไปยังคีย์ผสมทางลัด: เลือก: การตั้งค่าระบบ> "คีย์บอร์ด"> "ทางลัด"> "ทางลัดที่กำหนดเอง" คลิกที่ "+" และเพิ่มคำสั่ง:

    python3 /path/to/custom_screenshot.py
    

บันทึก

สคริปต์ใช้wmctrlเพื่อกำหนดตำแหน่งของหน้าต่าง บนตัวจัดการหน้าต่างที่แตกต่างกันอย่างไรก็ตามผลลัพธ์ของwmctrl -lGคำสั่งแสดงความแตกต่างเล็กน้อยในตำแหน่ง y ของหน้าต่าง ความแตกต่างเหล่านี้ถูกตัดออกโดยค่าที่ตั้งในdeviation=บรรทัดของสคริปต์ ค่าที่ตั้งไว้ในปัจจุบัน (0) เหมาะสมสำหรับ Unity และ KDE

สคริปต์ยังได้รับการทดสอบและใช้งานได้ดีXfceและGnomeแต่ต้องเปลี่ยนค่าตามที่อธิบายไว้ในส่วนหัวของสคริปต์

บท

#!/usr/bin/env python3
import subprocess
import time

"""
On different window managers, the window geometry as output of wmctrl differs slightly.
The "deviation" should compensate these differences. Most likely appropriate (tested) settings:
Unity: 0, Gnome: -36, Xfce (Xubuntu): -26, KDE (Kubuntu): 0
"""
#---
deviation = 0
#---
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
try:
    arg = get('zenity --entry --entry-text "30 30 30 30" --text "border left, right, top, bottom" --title "Screenshot margins"').strip().split()
except:
    pass
else:
    time.sleep(0.5)
    # frontmost window pos
    frontmost = [l.split()[4] for l in get("xprop -root").splitlines() if "ACTIVE_WINDOW(WINDOW)" in l][0].replace(",", "")
    frontmost = frontmost[:2]+"0"+frontmost[2:]
    f_data = [l.split() for l in get("wmctrl -lG").splitlines() if frontmost in l][0][2:6]
    # extent
    xt_data = get("xprop -id "+frontmost).split()
    xt_i = xt_data.index("_NET_FRAME_EXTENTS(CARDINAL)")
    xt = [int(n.replace(",", "")) for n in xt_data[xt_i+2:xt_i+6]]
    # set data for screenshot command
    x = str(int(f_data[0])-int(arg[0])-xt[0])
    y = str(int(f_data[1])-int(arg[2])-xt[2]+deviation)
    w = str(int(f_data[2])+int(arg[0])+int(arg[1])+xt[0]+xt[1])
    h = str(int(f_data[3])+int(arg[3])+int(arg[2])+xt[2]+xt[3])

    command = "shutter -s="+(",").join([x,y,w,h])+" -e"
    subprocess.call(["/bin/bash", "-c", command])

3
ฉันไม่คิดว่ามันมีอยู่ - ตอนนี้มันมีอยู่แล้ว! ขอบคุณมาก!
IonicăBizău

1
@ IonicăBizăuยินดีต้อนรับคุณ! ขอบคุณสำหรับคำถามมันสนุกที่ได้ทำ ฉันทำการแก้ไขเล็กน้อยในคำอธิบายการตั้งค่าเริ่มต้น
Jacob Vlijm

1
@ IonicăBizăuพบ (และแก้ไข) ข้อบกพร่องในรูปทรงเรขาคณิต
Jacob Vlijm

2
ดีมากดี! ฉันตั้งเป็น comand ที่ฉันเรียกใช้เมื่อฉันกดปุ่มพิเศษบนโน้ตบุ๊ค ASUS ของฉัน :-)
IonicăBizău

2

คุณยังสามารถใช้การรวมกันของปุ่ม ShiftและPrtScrเพื่อถ่ายภาพหน้าจอของพื้นที่เฉพาะที่มีมิติที่ผู้ใช้กำหนด

เพียงกดการรวมกันและใช้เคอร์เซอร์ที่ปรับเปลี่ยนแล้ว (มันจะคล้ายกับเครื่องหมายบวก) เพื่อเลือกพื้นที่สำหรับภาพหน้าจอ


โดยปกติฉันไม่สามารถควบคุมมือของฉันเพื่อกำหนดระยะขอบเหล่านี้ได้อย่างแน่นอน :-) แต่ +1 สำหรับทางลัดนี้ฉันไม่รู้
IonicăBizău

2

คุณสามารถจับภาพหน้าจอด้วยscrotยูทิลิตี้การจับภาพหน้าจอบรรทัดคำสั่ง:

scrot -s  

หรือ

scrot -ub -d 5  

คำสั่งที่สองวางเส้นขอบรอบ ๆ หน้าต่างที่เลือกซึ่งมีความกว้างที่ดีเมื่อเทียบกับขนาดของหน้าต่าง -d 5ตัวเลือกที่ยืนสำหรับความล่าช้าและช่วยให้คุณล่าช้า 5 วินาทีเพื่อเลือกหน้าต่างที่จะอยู่ในหน้าจอ

ติดตั้งด้วยสิ่งนี้:

sudo apt-get install scrot

ข้อมูลอ้างอิง: คู่มือ Ubuntu - scrot

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