ฉันจะวัดขนาดบนหน้าจอได้อย่างไร


29

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

สิ่งที่คล้ายกับPage Rulerสำหรับ Google Chrome

ขณะนี้ฉันกำลังใช้Shift+ PrtScnและลากพื้นที่บันทึกภาพแล้วไปที่คุณสมบัติเพื่อค้นหาความสูงและความกว้าง

คำตอบ:


10

การใช้ชัตเตอร์

ติดตั้งShutter ก่อนหากคุณยังไม่ได้ติดตั้ง

sudo apt-get install shutter

เปิดการตั้งค่าภายใต้การแก้ไข -> การตั้งค่าและเลือกแท็บพฤติกรรม
ทำเครื่องหมาย 'เริ่มต้นชัตเตอร์เมื่อเข้าสู่ระบบ' และ 'ซ่อนหน้าต่างเมื่อเปิดใช้งานครั้งแรก' ดูภาพหน้าจอด้านล่าง:

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

การใช้

  1. ตรวจสอบให้แน่ใจว่าไอคอนแผงชัตเตอร์ปรากฏขึ้นและเลือกหน้าต่างของคุณหรือสิ่งที่คุณต้องการวัด
  2. คลิกที่ไอคอนชัตเตอร์และเลือก 'การเลือก'

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

  1. เลือกจุดเริ่มต้นของคุณและลากไปยังจุดสิ้นสุด หน้าต่างทั้งหมดจะมืดลงยกเว้นการเลือกของคุณ คุณสามารถย้ายเส้นขอบรอบ ๆ เพื่อรับผลลัพธ์ 'ไปยังจุด' มากขึ้น
  2. ชัตเตอร์จะมีหน้าต่างโต้ตอบพร้อมพิกัด X และ Y และขนาด (ซึ่งเป็นสิ่งที่คุณต้องการ) ของการเลือก ดูภาพหน้าจอด้านล่างที่มุมบนซ้ายของตัวอย่าง

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

  1. สกรีนช็อตที่ซูมออกแสดงว่าเป็น 727px คูณ 367px:

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

  1. ในที่สุดเพียงแค่กดEscเพื่อยกเลิกการเลือกและซ่อนชัตเตอร์
  2. ทำต่อไปกับสิ่งที่คุณทำ

เรียบร้อยมาก! ฉันชอบคุณสมบัติเล็งที่นี่! คุณสมบัติที่โดดเด่นมาก - สามารถใช้ Window การเลือกล่าช้าเป็นต้น
dayuloli

42

มันทำงานอย่างไร

สคริปต์ด้านล่างวัดขนาดของพื้นที่ระหว่างสองตำแหน่งของตัวชี้เมาส์

มันทำงานได้ดังต่อไปนี้:

  1. วางตัวชี้เมาส์ในตำแหน่งแรก (โดยไม่ต้องคลิก)

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

  2. กดปุ่มผสมที่คุณต้องการ (ดูเพิ่มเติมด้านล่าง)

  3. วางเมาส์ในตำแหน่งที่สอง (อีกครั้งโดยไม่ต้องคลิก)

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

  4. กดคีย์ผสมของคุณอีกครั้ง การแจ้งเตือนจะบอกขนาดที่แน่นอน (px) ของพื้นที่

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

ตัวเลือก

คุณสามารถเลือก (โดยไม่ใส่เครื่องหมายในบรรทัดใดบรรทัดหนึ่ง) วิธีที่คุณต้องการรับการแจ้งเตือน ทั้งโดยการแจ้งเตือน:

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

หรือหน้าต่างข้อมูล Zenity:

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

(ตัวอย่างมาจากพื้นที่ที่แตกต่างกัน)

วิธีใช้

  1. สคริปต์ใช้xdotool:

    sudo apt-get install xdotool
    
  2. คัดลอกสคริปต์ด้านล่างลงในไฟล์เปล่าโดยไม่ใส่เครื่องหมายข้อคิดเห็นบรรทัดใดบรรทัดหนึ่ง:

    command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
    

    (ต้องได้รับการแจ้งเตือนจากnotify-sendตัวเลือก)

    หรือ:

    command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
    

    สำหรับZenityตัวเลือก

  3. บันทึกสคริปต์ใน~/bin(คุณอาจจะต้องสร้างไดเรกทอรี) เป็นmeasure_area(ไม่มีส่วนขยาย) และทำให้สามารถเรียกใช้งานได้

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

    measure_area
    

หมายเหตุ

  • คุณจะต้องออกจากระบบ / เข้าก่อน
  • มันไม่ได้สร้างความแตกต่างในสิ่งที่คุณทำในตำแหน่งแรก / วินาที สคริปต์ที่มีขนาดที่แน่นอนค่า

บท

#!/usr/bin/env python3
import subprocess
import os
import math

home = os.environ["HOME"]
area = home+"/"+".measure_area.txt"

def get_pos():
    pos_data = subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8")
    return [m[2:] for m in pos_data.split()[:2]]

def confirm():
    get = subprocess.check_output(["xrandr", "--verbose"]).decode("utf-8").split()
    for s in [get[i-1] for i in range(len(get)) if get[i] == "connected"]:
        br_data = float(get[get.index("Brightness:")+1])
        brightness = lambda br: ["xrandr", "--output", s, "--brightness", br]
        flash = ["sleep", "0.1"]
        for cmd in [brightness(str(br_data-0.1)), flash, brightness(str(br_data))]:
            subprocess.call(cmd)

if not os.path.exists(area):
    with open(area, "wt") as measure:
        measure.write(str(get_pos()))
    confirm()
else:
    second = get_pos()
    with open(area) as first_m:
        try:
            first = eval(first_m.read())
            w = int(math.fabs(int(second[0]) - int(first[0])))
            h = int(math.fabs(int(second[1]) - int(first[1])))
            #--- uncomment either one of the lines below:
            # command = ['notify-send', 'Area size', str(w)+' x '+str(h)]
            command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]
            #---
            confirm()
        except SyntaxError:
            text = "Please try again, there was an error in the data"
            command = ['zenity', '--info', '--title', 'Please try again', '--text', text]
        subprocess.Popen(command)
    os.remove(area)

คำอธิบาย

เมื่อสคริปต์ถูกเรียกครั้งแรกสคริปต์จะรับตำแหน่งเมาส์ปัจจุบันพร้อมxdotoolคำสั่ง:

xdotool getmouselocation

จากนั้นจะบันทึกตำแหน่งลงในไฟล์ (มองไม่เห็น) .measure_area.txtรอสายที่สอง
ในการเรียกครั้งที่สองมันจะอ่านไฟล์ลบออกและเปรียบเทียบx/yพิกัดที่เก็บไว้กับพิกัดล่าสุดและคำนวณขนาดของพื้นที่ระหว่างพวกเขา

แก้ไข

อัปเดตสคริปต์ด้วยการปรับปรุงจำนวนมาก:

  • ปรับให้เหมาะสมsubprocess.Popen()/ subprocess.check_output()คำสั่ง (ขอบคุณ @muru, @Trengot)
  • เพิ่มขั้นตอนการซ่อมแซมในกรณีที่มีสิ่งผิดปกติเกิดขึ้นกับไฟล์ข้อมูลชุดแรก (เช่นหากผู้ใช้พยายามเรียกใช้สคริปต์ครั้งแรกโดยไม่ได้xdotoolติดตั้ง)
  • เพิ่มหน้าจอยืนยันแสงสลัวขนาดเล็กเมื่อกดปุ่มผสมสำหรับพิกัดแรก ดูเหมือนว่าใช้งานง่ายเพื่อให้ผู้ใช้มากขึ้นอีกนิดบางชนิดของการยืนยันของการกระทำ

1
! น่ากลัว พยายามออกมาตอนนี้ทำงานได้อย่างสมบูรณ์แบบ! ขอขอบคุณ! คุณสมควรได้รับเหรียญจริงๆ!
dayuloli

2
@dayuloli ขอบคุณสำหรับคำถาม! ฉันชอบทำสิ่งนี้
Jacob Vlijm

ดี! +1 อยากรู้อยากเห็น: ทำไมPopen(['/bin/bash',...แทนPopen(['zenity', '--info', ...?
muru

1
เล่นซอกับคำพูด? Oo command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]; subprocess.Popen(command)ต้องการมากน้อย messing รอบด้วย'และ"ฉันคิดว่า
muru

1
สามารถทำการเปลี่ยนแปลงเดียวกันได้xdotoolsหรือไม่ สิ่งที่ชอบcheck_output(['xdotools', 'getmouseposition'])?
Holloway

2

การใช้งานเลอะ

อีกวิธีที่ง่าย ๆ ในการกำหนดพื้นที่ของการเลือกคือการใช้slop(เลือกการดำเนินการ) ยูทิลิตีบรรทัดคำสั่ง "ที่สอบถามการเลือกจากผู้ใช้และพิมพ์ภูมิภาคไปยัง stdout"

slopเป็นเครื่องมือใหม่ที่เปรียบเทียบได้และยังไม่ได้รับการบรรจุสำหรับ Debian / Ubuntu คุณจะต้องรวบรวมจากแหล่ง:

sudo apt-get install build-essential cmake libxext-dev
git clone https://github.com/naelstrof/slop.git
cd slop
cmake ./
make && sudo make install

การติดตั้งเป็นส่วนที่ยากที่สุด slopจริงๆแล้วมันง่ายมากที่จะทำงานกับ ตัวอย่างเช่นหนึ่งซับต่อไปนี้จะแจ้งให้คุณเลือกพื้นที่หน้าจอและทั้งคู่จะแสดงผลลัพธ์เป็นการแจ้งเตือนและเขียนลงในคลิปบอร์ด:

eval $(slop -t 0 -b 1) && notify-send  "Selection info" "Area: ${W} x ${Y}px \n Position: X = ${X}px, Y = ${Y}px" && echo ${W}x${H} | xsel -bi

ภาพหน้าจอ:

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

การแบ่งย่อยคำสั่งที่ใช้อย่างรวดเร็ว:

  • slop -t 0 -b 1- แจ้งให้ผู้ใช้เลือกพื้นที่หน้าจอ; ห้ามเลือกเต็มหน้าต่าง ( -t 0) ตั้งค่ากรอบการเลือกเป็น 1px ( -b 1)
  • eval $(...)- อ่านเอาต์พุตของslopเป็นตัวแปร
  • notify-send ... - ส่งการแจ้งเตือน GUI พร้อมข้อมูลเกี่ยวกับพื้นที่ที่เลือก
  • echo ${W}x${H} | xsel -bi- คัดลอกขนาดไปยังคลิปบอร์ด (ต้องใช้xselsudo apt-get install xsel)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.