Ekrandaki boyutları nasıl ölçerim?


29

Ekranda bir görüntüm var ve genişliğini ölçmek istiyorum. Elbette bir cetvel kullanabilirim , ama bu tuhaf ve yavaş. Kısayol tuşunu tıklayabileceğim, bir alanı sürükleyebileceğim ve bana o alanın yüksekliğini ve genişliğini söyleyebileceğim bir şey var mı?

Google Chrome için Sayfa Cetveline benzer bir şey .

Şu anda, Shift+ kullanıyorum PrtScnve alanı sürüklüyorum, görüntüyü kaydediyorum ve yüksekliği ve genişliğini bulmak için Özellikler'e gidiyorum.

Yanıtlar:


10

Deklanşör kullanma

Takılı değilse, önce Shutter'ı yükleyin .

sudo apt-get install shutter

Düzen -> Tercihler altındaki tercihleri ​​açın ve davranış sekmesini seçin.
'Giriş sırasında deklanşörü başlat' ve 'İlk çalıştırmada pencereyi gizle' seçeneğini işaretleyin. Aşağıdaki ekran görüntüsüne bakın:

görüntü tanımını buraya girin

kullanım

  1. Obtüratör paneli simgesinin görünür olduğundan emin olun ve pencerenizi veya ölçmek istediğiniz şeyi seçin.
  2. Deklanşör simgesine tıklayın ve 'seçim' seçeneğini seçin.

görüntü tanımını buraya girin

  1. Başlangıç ​​noktanızı seçin ve bitiş noktanıza sürükleyin. Seçiminiz hariç tüm pencere kararacak. Sınırları 'noktaya' sonuçları daha fazla almak için etrafta hareket ettirebilirsiniz.
  2. Deklanşör, X ve Y koordinatlarını ve seçimin boyutunu (istediğiniz olanı) içeren bir iletişim penceresi sunar. Bir örneğin sol üst köşesinde aşağıdaki ekran görüntüsüne bakın.

görüntü tanımını buraya girin

  1. 367px tarafından 727px olduğunu gösteren bir yakınlaştırılmış ekran görüntüsü:

görüntü tanımını buraya girin

  1. Sonunda Escseçimi kaldırmak ve deklanşörü gizlemek için sadece basın .
  2. Her ne yapıyorsan devam et.

Çok temiz! Crosshair özelliğini burada seviyorum! Çok tam özellikli - Pencere alabilir, seçim yapabilir, gecikebilir vb.
dayuloli

42

Nasıl çalışır

Aşağıdaki komut dosyası, fare işaretçisinin iki konumu arasındaki bir alanın boyutunu ölçer.

Aşağıdaki gibi çalışır:

  1. Fare işaretçisini ilk konumuna getirin (tıklatmadan)

    görüntü tanımını buraya girin

  2. İstediğiniz tuş kombinasyonuna basın (aşağıya bakınız)

  3. Fareyi ikinci pozisyona getirin (tekrar tıklatmadan)

    görüntü tanımını buraya girin

  4. Tuş kombinasyonunuza tekrar basın. Bir bildirim size alanın tam boyutunu (px) söyleyecektir.

    görüntü tanımını buraya girin

Seçenekler

Sizden nasıl haberdar edilmek istediğinizi (satırlardan birini açarak) seçebilirsiniz; ya bir bildirim ile:

görüntü tanımını buraya girin

Veya bir Zenity bilgi penceresi:

görüntü tanımını buraya girin

(Örnekler farklı alanlardandır)

Nasıl kullanılır

  1. Komut xdotoolşunları kullanır :

    sudo apt-get install xdotool
    
  2. Aşağıdaki betiği boş bir dosyaya kopyalayın, satırlardan herhangi birini yorumlayın

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

    ( notify-sendseçenek tarafından bilgilendirilmek için )

    veya:

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

    için Zenityseçenek.

  3. Komut dosyasını ~/bin(muhtemelen dizini oluşturmanız gerekecektir) measure_area(uzantı yok ) olarak kaydedin ve çalıştırılabilir hale getirin .

  4. Komut dosyasını çalıştırmak için istediğiniz bir tuş kombinasyonu ekleyin: Seçin: Sistem Ayarları> "Klavye"> "Kısayollar"> "Özel Kısayollar". "+" İşaretini tıklayın ve şu komutu ekleyin:

    measure_area
    

notlar

  • Önce çıkış yapmanız / giriş yapmanız gerekecek
  • Birinci / ikinci pozisyon olarak aldığınız şeyi değiştirmez; komut dosyası mutlak değerleri ölçer .

Senaryo

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

açıklama

Betik ilk kez çağrıldığında, şu anki fare pozisyonunu şu xdotoolkomutla alır:

xdotool getmouselocation

Daha sonra pozisyonu .measure_area.txt, ikinci aramayı bekleyerek (görünmez) bir dosyaya kaydeder .
İkinci çağrıda dosyayı okur, kaldırır ve kaydedilen x/ykoordinatları en son olanlarla karşılaştırır ve aralarındaki alanın boyutunu hesaplar.

Düzenle

Komut dosyasını bir dizi iyileştirme ile güncellendi:

  • Optimize edilmiş subprocess.Popen()/ subprocess.check_output()komutlar (@muru, @Trengot sayesinde)
  • İlk veri dosyasında bir şeyler ters gittiğinde onarım prosedürü eklendi (örneğin, kullanıcı ilk önce komut dosyasını yüklemeden çalıştırmayı xdotooldenerse)
  • İlk koordinatlar için tuş bileşimine basıldığında, küçük bir onay ekranı karartması eklendi. Kullanıcıya vermek için biraz daha kullanıcı dostu görünüyor bazı eylemin onay tür.

1
Müthiş! Şimdi denedim, mükemmel çalışıyor! Teşekkür ederim! Gerçekten bir madalyayı hak ediyorsun!
dayuloli

2
@dayuloli Soru için teşekkürler! Ben seviyorum böyle şeyler yapıyor.
Jacob Vlijm

Güzel! +1. Meraklı: Neden Popen(['/bin/bash',...yerine Popen(['zenity', '--info', ...?
muru

1
Tırnaklarla uğraşmak? Oo ile uğraşmak command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]; subprocess.Popen(command)çok daha az gerektirir 've "sanırım.
muru

1
Aynı değişiklik yapılabilir xdotoolsmi? Gibi bir şey check_output(['xdotools', 'getmouseposition'])?
Holloway

2

Slop kullanmak

Bir seçimin alanını belirlemenin bir diğer basit yolu, slop(kullanıcının Seçimi sorgulayan ve bölgeyi stdout'a basan bir komut satırı aracı olan "Seçimi Çalıştır" komutunu kullanmaktır.

slopkarşılaştırmalı olarak yeni bir araçtır ve henüz Debian / Ubuntu için paketlenmemiştir. Olduğu gibi, kaynaktan derlemek zorunda kalacaksınız:

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

Kurulum en zor kısımdır. slopkendisi ile çalışmak gerçekten çok kolaydır. Örneğin, aşağıdaki tek astar bir ekran alanı seçmenizi ister ve sonucu hem bildirim olarak görüntüler hem de panoya yazar:

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

Ekran görüntüsü:

görüntü tanımını buraya girin

Kullanılan komutların hızlıca çözülmesi:

  • slop -t 0 -b 1- kullanıcıdan bir ekran alanı seçmesini isteyin; tam pencereleri seçmeyin ( -t 0), seçim kenarlığını 1 piksel ( -b 1) olarak ayarlayın.
  • eval $(...)- slopdeğişkenlerin çıktılarını oku
  • notify-send ... - Seçilen alanla ilgili bilgi içeren GUI bildirimi gönderin
  • echo ${W}x${H} | xsel -bi- boyutları panoya kopyala (gerektirir xselsudo apt-get install xsel)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.