Làm cách nào để đo kích thước trên màn hình?


29

Tôi có một hình ảnh trên màn hình và tôi muốn đo chiều rộng của nó. Tất nhiên tôi có thể sử dụng một cây thước , nhưng điều đó hay thay đổi và chậm chạp. Có thứ gì đó để tôi có thể nhấp vào phím tắt, kéo ra một khu vực và nó sẽ cho tôi biết chiều cao và chiều rộng của khu vực đó?

Một cái gì đó tương tự như Thước kẻ Trang cho Google Chrome.

Hiện tại, tôi đang sử dụng Shift+ PrtScnvà kéo ra khỏi khu vực, lưu hình ảnh và sau đó đi vào Thuộc tính để tìm hiểu chiều cao và chiều rộng của nó.

Câu trả lời:


10

Sử dụng màn trập

Đầu tiên cài đặt Shutter nếu bạn chưa cài đặt nó.

sudo apt-get install shutter

Mở tùy chọn trong Chỉnh sửa -> Tùy chọn và chọn tab hành vi.
Kiểm tra 'Bắt ​​đầu màn trập khi đăng nhập' và 'Ẩn cửa sổ trong lần khởi chạy đầu tiên'. Xem ảnh chụp màn hình bên dưới:

nhập mô tả hình ảnh ở đây

Sử dụng

  1. Đảm bảo biểu tượng bảng điều khiển màn trập hiển thị và chọn cửa sổ của bạn hoặc bất cứ điều gì bạn muốn đo.
  2. Nhấp vào biểu tượng màn trập và chọn 'lựa chọn'.

nhập mô tả hình ảnh ở đây

  1. Chọn điểm bắt đầu của bạn và kéo đến điểm cuối của bạn. Toàn bộ cửa sổ sẽ tối đi trừ lựa chọn của bạn. Bạn có thể di chuyển các đường viền xung quanh để có thêm kết quả 'đến điểm'.
  2. Shutter sẽ cung cấp một cửa sổ hộp thoại với tọa độ X và Y và kích thước (đó là những gì bạn muốn) của lựa chọn. Xem ảnh chụp màn hình bên dưới ở góc trên bên trái của một ví dụ.

nhập mô tả hình ảnh ở đây

  1. Ảnh chụp màn hình thu nhỏ cho thấy nó có kích thước 727px x 367px:

nhập mô tả hình ảnh ở đây

  1. Cuối cùng chỉ cần nhấn Esc để bỏ chọn và ẩn màn trập.
  2. Tiếp tục với bất cứ điều gì bạn đang làm.

Rât gọn gang! Tôi thích tính năng crosshair ở đây! Rất đầy đủ tính năng - có thể lấy Cửa sổ, lựa chọn, trì hoãn, v.v.
dayuloli 16/2/2015

42

Làm thế nào nó hoạt động

Kịch bản dưới đây đo kích thước của một khu vực, giữa hai vị trí của con trỏ chuột.

Nó hoạt động như sau:

  1. Đặt con trỏ chuột ở vị trí đầu tiên (không nhấp)

    nhập mô tả hình ảnh ở đây

  2. Nhấn tổ hợp phím bạn chọn (xem thêm bên dưới)

  3. Đặt chuột ở vị trí thứ hai (một lần nữa mà không cần nhấp)

    nhập mô tả hình ảnh ở đây

  4. Nhấn tổ hợp phím của bạn một lần nữa. Một thông báo sẽ cho bạn biết kích thước chính xác (px) của khu vực.

    nhập mô tả hình ảnh ở đây

Tùy chọn

Bạn có thể chọn (bằng cách bỏ qua một trong các dòng) cách bạn muốn được thông báo; hoặc bằng một thông báo:

nhập mô tả hình ảnh ở đây

Hoặc một cửa sổ thông tin Zenity:

nhập mô tả hình ảnh ở đây

(Các ví dụ từ các khu vực khác nhau)

Cách sử dụng

  1. Kịch bản sử dụng xdotool:

    sudo apt-get install xdotool
    
  2. Sao chép tập lệnh bên dưới vào một tệp trống, bỏ ghi chú một trong hai dòng:

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

    (được thông báo bởi notify-send tùy chọn)

    hoặc là:

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

    cho các Zenitytùy chọn.

  3. Lưu tập lệnh trong ~/bin(có thể bạn sẽ phải tạo thư mục) dưới dạng measure_area(không có phần mở rộng) và làm cho nó có thể thực thi được .

  4. Thêm tổ hợp phím bạn chọn để chạy tập lệnh: Chọn: Cài đặt hệ thống> "Bàn phím"> "Phím tắt"> "Phím tắt tùy chỉnh". Nhấp vào "+" và thêm lệnh:

    measure_area
    

Ghi chú

  • Bạn sẽ phải đăng xuất / đăng nhập trước
  • Nó không tạo ra sự khác biệt những gì bạn đảm nhận ở vị trí thứ nhất / thứ hai; kịch bản đo các giá trị tuyệt đối .

Kịch bản

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

Giải trình

Khi tập lệnh được gọi lần đầu tiên, nó sẽ nhận được vị trí chuột hiện tại bằng xdotoollệnh:

xdotool getmouselocation

Sau đó, nó lưu vị trí vào một tệp (vô hình) .measure_area.txt, chờ cuộc gọi thứ hai.
Trong cuộc gọi thứ hai, nó đọc tệp, loại bỏ nó và so sánh các x/ytọa độ được lưu trữ với các tọa độ mới nhất và tính toán kích thước của khu vực giữa chúng.

Chỉnh sửa

Cập nhật tập lệnh với một số cải tiến:

  • Tối ưu hóa subprocess.Popen()/ subprocess.check_output()lệnh (nhờ @muru, @Trengot)
  • Đã thêm quy trình sửa chữa trong trường hợp xảy ra sự cố với tệp dữ liệu đầu tiên (ví dụ: nếu người dùng lần đầu thử chạy tập lệnh mà không xdotoolcài đặt)
  • Đã thêm đèn flash màn hình xác nhận nhỏ khi nhấn tổ hợp phím cho tọa độ đầu tiên. Có vẻ như một chút thân thiện với người dùng để cung cấp cho người dùng một số loại xác nhận hành động.

1
Tuyệt vời! Đã thử nó ngay bây giờ, hoạt động hoàn hảo! Cảm ơn bạn! Bạn xứng đáng với một huy chương thực sự!
dayuloli

2
@dayuloli Cảm ơn câu hỏi! Tôi thích làm những thứ như thế này.
Jacob Vlijm

Tốt đẹp! +1. Tò mò: Tại sao Popen(['/bin/bash',...thay vì Popen(['zenity', '--info', ...?
muru

1
Loay hoay với dấu ngoặc kép? Oo command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]; subprocess.Popen(command)đòi hỏi ít phải lộn xộn hơn '", tôi nghĩ vậy.
muru

1
Có thể thay đổi tương tự cho xdotools? Một cái gì đó như thế check_output(['xdotools', 'getmouseposition'])nào?
Holloway

2

Sử dụng dốc

Một cách đơn giản khác để xác định vùng chọn là sử dụng slop(Chọn Thao tác), tiện ích dòng lệnh "truy vấn vùng chọn từ người dùng và in vùng ra thiết bị xuất chuẩn".

sloplà một công cụ tương đối mới và chưa được đóng gói cho Debian / Ubuntu. Khi nó đứng, bạn sẽ phải biên dịch nó từ nguồn:

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

Việc cài đặt là phần khó khăn nhất. slopnó thực sự rất dễ dàng để làm việc với. Chẳng hạn, một lớp lót sau đây sẽ nhắc bạn chọn một vùng màn hình và cả hai sẽ hiển thị kết quả dưới dạng thông báo và ghi nó vào bảng tạm:

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

Ảnh chụp màn hình:

nhập mô tả hình ảnh ở đây

Phân tích nhanh các lệnh được sử dụng:

  • slop -t 0 -b 1- nhắc người dùng chọn vùng màn hình; không chọn full windows ( -t 0), đặt viền chọn thành 1px ( -b 1)
  • eval $(...)- đọc đầu ra của slopcác biến
  • notify-send ... - gửi thông báo GUI với thông tin về khu vực được chọn
  • echo ${W}x${H} | xsel -bi- sao chép kích thước vào clipboard (yêu cầu xselsudo apt-get install xsel)
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.