화면에서 치수를 어떻게 측정합니까?


29

화면에 이미지가 있는데 너비를 측정하고 싶습니다. 물론 통치자를 사용할 수는 있지만 기발하고 느립니다. 바로 가기 키를 클릭하고 영역을 드래그하면 해당 영역의 높이와 너비를 알 수있는 것이 있습니까?

Chrome 용 Page Ruler 와 비슷한 기능 입니다.

현재 Shift+를 사용 PrtScn하고 영역을 드래그하여 이미지를 저장 한 다음 속성으로 이동하여 높이와 너비를 찾습니다.

답변:


10

셔터 사용

셔터 가 설치되어 있지 않은 경우 먼저 설치 하십시오.

sudo apt-get install shutter

편집-> 환경 설정에서 환경 설정을 열고 동작 탭을 선택하십시오.
'로그인시 셔터 시작'및 '첫 실행시 창 숨기기'를 확인하십시오. 아래 스크린 샷을 참조하십시오 :

여기에 이미지 설명을 입력하십시오

용법

  1. 셔터 패널 아이콘이 표시되는지 확인하고 창 또는 측정하려는 항목을 선택하십시오.
  2. 셔터 아이콘을 클릭하고 '선택'을 선택하십시오.

여기에 이미지 설명을 입력하십시오

  1. 시작점을 선택하고 끝점으로 드래그하십시오. 선택을 제외한 전체 창이 어두워집니다. 더 많은 '포인트'결과를 얻기 위해 테두리를 움직일 수 있습니다.
  2. Shutter는 X와 Y 좌표와 선택의 크기 (원하는 크기)를 가진 대화창을 제공합니다. 예제의 왼쪽 상단에서 아래 스크린 샷을 참조하십시오.

여기에 이미지 설명을 입력하십시오

  1. 축소 된 스크린 샷으로 727 x 367px임을 보여줍니다.

여기에 이미지 설명을 입력하십시오

  1. 마지막으로을 눌러 Esc선택을 취소하고 셔터를 숨 깁니다.
  2. 무엇을 하든지 계속하십시오.

매우 깔끔합니다! 나는 여기 십자선 기능을 좋아한다! 매우 완전한 기능-창, 선택, 지연 등을 취할 수 있음
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 2019

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)훨씬 적은 비용으로 장난 필요 '하고 "나는 생각한다.
muru

1
동일한 변경이 가능 xdotools합니까? 같은 것 check_output(['xdotools', 'getmouseposition'])?
Holloway

2

슬로프 사용

선택 영역을 결정하는 또 다른 간단한 방법은 slop"사용자로부터 선택을 쿼리하고 영역을 표준 출력으로 인쇄하는"명령 줄 유틸리티 인 (선택 작업)을 사용하는 것입니다.

slop비교적 새로운 도구이며 데비안 / 우분투 용으로 아직 패키지되지 않았습니다. 서있는 것처럼 소스에서 컴파일해야합니다.

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-치수를 클립 보드에 복사 ( xsel→ 필요 sudo apt-get install xsel)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.