Como faço para medir dimensões na tela sem usar uma régua?

27

Eu tenho uma imagem na tela e quero medir sua largura. É claro que posso usar uma régua , mas isso é caprichoso e lento. Há algo em que eu possa clicar em uma tecla de atalho, arrastar uma área e ela me informará a altura e a largura dessa área?

Algo semelhante ao Régua de páginas para o Google Chrome.

Atualmente, estou usando Shift + PrtScn e arrastando a área, salve a imagem e, em seguida, entre em Propriedades para descobrir sua altura e largura.

    
por dayuloli 10.02.2015 / 08:59

3 respostas

8

Usando o obturador

Primeiro instale o Obturador se você não o tiver instalado.

sudo apt-get install shutter

Abra as preferências em Editar - > Preferências e selecione a guia de comportamento.
Marque 'Iniciar obturador no login' e 'Ocultar janela no primeiro lançamento'. Veja a imagem abaixo:

Uso

  1. Verifiqueseoíconedopaineldoobturadorestávisíveleselecionesuajanelaouoquevocêdesejamedir.
  2. Cliquenoíconedoobturadoreselecione"seleção".

  • Selecione seu ponto de partida e arraste para seu ponto final. A janela inteira será escurecida, exceto sua seleção. Você pode mover as bordas para obter mais resultados "pontuais".
  • O obturador fornecerá uma janela de diálogo com as coordenadas X e Y e o tamanho (que é o que você deseja) da seleção. Veja a captura de tela abaixo no canto superior esquerdo de um exemplo.
  • Uma captura de tela com zoom mostrando que é 727px por 367px:
  • Finalmente, basta pressionar Esc para descartar a seleção e ocultar o obturador.
  • Continue com o que você estava fazendo.
  • por Parto 13.02.2015 / 11:06
    42

    Como funciona

    O script abaixo mede o tamanho de uma área, entre dois locais do ponteiro do mouse.

    Funciona como segue:

    1. Coloque o ponteiro do mouse na primeira posição (sem clicar)

    2. Pressioneacombinaçãodeteclasdesuaescolha(vejaabaixo)

    3. Coloqueomousenasegundaposição(novamentesemclicar)

    4. Pressione sua combinação de teclas novamente. Uma notificação informará o tamanho exato (px) da área.

    Opções

    Vocêpodeescolher(descomentandoumadaslinhas)comogostariadesernotificado;porumanotificação:

    Ou uma janela de informações do Zenity:

    (osexemplossãodediferentesáreas)

    Comousar

    1. Oscriptusaxdotool:

      sudoapt-getinstallxdotool
    2. Copieoscriptabaixoemumarquivovazio,descomenteumadaslinhas:

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

      (parasernotificadopelaopçãonotify-send)

      ou:

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

      paraaopçãoZenity.

    3. Salveoscriptem~/bin(provavelmenteseránecessáriocriarodiretório)comomeasure_area(semextensão)etorná-loexecutável.

    4. Adicioneumacombinaçãodeteclasàsuaescolhaparaexecutaroscript:Escolha:Configuraçõesdosistema>"Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

      measure_area
      

    Notas

    • Você terá que sair / entrar primeiro
    • Não faz diferença o que você considera como primeira / segunda posição; o script mede valores absolutos .

    O script

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

    Explicação

    Quando o script é chamado pela primeira vez, ele obtém a posição atual do mouse com o comando xdotool :

    xdotool getmouselocation
    

    Em seguida, ele salva a posição em um arquivo (invisível) .measure_area.txt , aguardando a segunda chamada.
    Na segunda chamada, ele lê o arquivo, o remove e compara as coordenadas x/y armazenadas com as mais recentes e calcula o tamanho da área entre elas.

    Editar

    Atualizou o script com várias melhorias:

    • Comandos subprocess.Popen() / subprocess.check_output() otimizados (graças a @muru, @Trengot)
    • Foi adicionado um procedimento de reparo caso algo desse errado com o primeiro arquivo de dados (por exemplo, se o usuário primeiro tentasse executar o script sem ter o xdotool instalado)
    • Adicionado um pequeno flash de tela de confirmação quando a combinação de teclas é pressionada para as primeiras coordenadas. Parece um pouco mais fácil de usar para dar ao usuário algum tipo de confirmação da ação.
    por Jacob Vlijm 10.02.2015 / 11:29
    2

    Usando slop

    Outra forma simples de determinar a área de uma seleção é usar slop (Selecionar Operação), uma linha de comando utilitário "que consulta por uma seleção do usuário e imprime a região para stdout."

    slop é uma ferramenta comparativamente nova e ainda não foi empacotada para o Debian / Ubuntu. Como está, você terá que compilá-lo a partir da fonte:

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

    A instalação é a parte mais difícil. O slop em si é muito fácil de trabalhar. Por exemplo, o seguinte one-liner solicitará que você selecione uma área de tela e exibirá o resultado como uma notificação e o gravará na área de transferência:

    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
    

    Screenshot:

    Um rápido detalhamento dos comandos usados:

    • slop -t 0 -b 1 - solicita ao usuário selecionar uma área de tela; não selecione janelas completas ( -t 0 ), defina a borda de seleção como 1px ( -b 1 )
    • eval $(...) - leu a saída de slop em variáveis
    • notify-send ... - envia notificação da GUI com informações sobre a área selecionada
    • echo ${W}x${H} | xsel -bi - copie as dimensões para a área de transferência (requer xselsudo apt-get install xsel )
    por Glutanimate 16.02.2015 / 03:28

    Tags