Bagaimana cara mengukur dimensi di layar?


29

Saya memiliki gambar di layar, dan saya ingin mengukur lebarnya. Tentu saja saya bisa menggunakan penggaris , tapi itu aneh dan lambat. Apakah ada sesuatu di mana saya bisa mengklik tombol pintas, menarik keluar suatu daerah, dan itu akan memberi tahu saya ketinggian dan lebar daerah itu?

Sesuatu yang mirip dengan Page Ruler untuk Google Chrome.

Saat ini, saya menggunakan Shift+ PrtScndan menyeret keluar area, menyimpan gambar, dan kemudian pergi ke Properties untuk mengetahui tinggi dan lebarnya.

Jawaban:


10

Menggunakan rana

Pertama instal Shutter jika Anda belum menginstalnya.

sudo apt-get install shutter

Buka preferensi di bawah Edit -> Preferences dan pilih tab perilaku.
Periksa 'Mulai rana saat masuk' dan 'Sembunyikan jendela saat peluncuran pertama'. Lihat tangkapan layar di bawah ini:

masukkan deskripsi gambar di sini

Pemakaian

  1. Pastikan ikon panel rana terlihat dan pilih jendela Anda atau apa pun yang ingin Anda ukur.
  2. Klik pada ikon rana dan pilih 'seleksi'.

masukkan deskripsi gambar di sini

  1. Pilih titik awal Anda dan seret ke titik akhir Anda. Seluruh jendela akan menjadi gelap kecuali pilihan Anda. Anda dapat memindahkan batas sekitar untuk mendapatkan lebih banyak hasil 'to the point'.
  2. Shutter akan menyediakan jendela dialog dengan koordinat X dan Y dan ukuran (yang Anda inginkan) dari pilihan. Lihat tangkapan layar di bawah ini di sudut kiri atas contoh.

masukkan deskripsi gambar di sini

  1. Tangkapan layar yang diperbesar yang menunjukkan ukurannya menjadi 727px oleh 367px:

masukkan deskripsi gambar di sini

  1. Akhirnya cukup tekan Escuntuk mengabaikan pilihan dan menyembunyikan rana.
  2. Lanjutkan dengan apa pun yang Anda lakukan.

Sangat rapi! Saya suka fitur crosshair di sini! Fitur sangat lengkap - dapat mengambil Window, seleksi, menunda dll.
dayuloli

42

Bagaimana itu bekerja

Script di bawah ini mengukur ukuran area, antara dua lokasi pointer mouse.

Ini berfungsi sebagai berikut:

  1. Tempatkan pointer mouse di posisi pertama (tanpa mengklik)

    masukkan deskripsi gambar di sini

  2. Tekan kombinasi tombol pilihan Anda (lihat lebih lanjut di bawah)

  3. Tempatkan mouse di posisi kedua (lagi tanpa mengklik)

    masukkan deskripsi gambar di sini

  4. Tekan kombinasi tombol Anda lagi. Pemberitahuan akan memberi tahu Anda ukuran persisnya (px) dari area tersebut.

    masukkan deskripsi gambar di sini

Pilihan

Anda dapat memilih (dengan menghapus komentar salah satu baris) bagaimana Anda ingin diberitahu; baik dengan pemberitahuan:

masukkan deskripsi gambar di sini

Atau jendela info Zenity:

masukkan deskripsi gambar di sini

(Contohnya dari berbagai daerah)

Bagaimana cara menggunakan

  1. Script menggunakan xdotool:

    sudo apt-get install xdotool
    
  2. Salin skrip di bawah ini ke file kosong, batalkan komentar salah satu dari baris berikut:

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

    (untuk diberitahu oleh notify-sendopsi)

    atau:

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

    untuk Zenityopsi.

  3. Simpan skrip di ~/bin(Anda mungkin harus membuat direktori) sebagai measure_area(tanpa ekstensi) dan membuatnya dapat dieksekusi .

  4. Tambahkan kombinasi tombol pilihan Anda untuk menjalankan skrip: Pilih: Pengaturan Sistem> "Keyboard"> "Pintasan"> "Pintasan Khusus". Klik "+" dan tambahkan perintah:

    measure_area
    

Catatan

  • Anda harus keluar / masuk terlebih dahulu
  • Itu tidak membuat perbedaan apa yang Anda ambil sebagai posisi pertama / kedua; script mengukur nilai absolut .

Naskah

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

Penjelasan

Ketika skrip dipanggil pertama kali, skrip ini mendapatkan posisi mouse saat ini dengan xdotoolperintah:

xdotool getmouselocation

Ini kemudian menyimpan posisi ke dalam file (tidak terlihat) .measure_area.txt, menunggu panggilan kedua.
Pada panggilan kedua, ia membaca file, menghapusnya dan membandingkan x/ykoordinat yang tersimpan dengan yang terbaru, dan menghitung ukuran area di antara mereka.

Edit

Diperbarui skrip dengan sejumlah perbaikan:

  • Dioptimalkan subprocess.Popen()/ subprocess.check_output()perintah (terima kasih kepada @muru, @Trengot)
  • Menambahkan prosedur perbaikan jika terjadi kesalahan dengan file data pertama (mis. Jika pengguna pertama kali mencoba menjalankan skrip tanpa xdotoolmenginstal)
  • Menambahkan layar kecil blitz lampu kilat ketika kombinasi tombol ditekan untuk koordinat pertama. Tampaknya sedikit lebih user-friendly untuk memberikan pengguna beberapa jenis konfirmasi tindakan.

1
Luar biasa! Mencoba sekarang, bekerja dengan sempurna! Terima kasih! Anda benar-benar layak mendapatkan medali!
dayuloli

2
@ dayuloli Terima kasih atas pertanyaannya! Saya suka melakukan hal-hal seperti ini.
Jacob Vlijm

Bagus! +1. Penasaran: Kenapa Popen(['/bin/bash',...bukannya Popen(['zenity', '--info', ...?
muru

1
Mengotak-atik kutipan? Oo command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]; subprocess.Popen(command)membutuhkan lebih sedikit bermain-main dengan 'dan ", saya pikir.
muru

1
Mungkinkah perubahan yang sama dilakukan xdotools? Sesuatu seperti check_output(['xdotools', 'getmouseposition'])?
Holloway

2

Menggunakan slop

Cara sederhana lain untuk menentukan area pilihan adalah dengan menggunakan slop(Pilih Operasi), utilitas baris perintah "yang meminta pemilihan dari pengguna dan mencetak wilayah ke stdout."

slopadalah alat yang relatif baru dan belum dikemas untuk Debian / Ubuntu. Anda harus mengkompilasinya dari sumber:

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

Instalasi adalah bagian yang paling sulit. slopitu sendiri sebenarnya sangat mudah untuk dikerjakan. Misalnya, satu-liner berikut akan meminta Anda untuk memilih area layar dan keduanya akan menampilkan hasilnya sebagai pemberitahuan dan menuliskannya ke clipboard:

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

Tangkapan layar:

masukkan deskripsi gambar di sini

Rincian cepat dari perintah yang digunakan:

  • slop -t 0 -b 1- meminta pengguna untuk memilih area layar; jangan pilih jendela penuh ( -t 0), atur batas pilihan ke 1px ( -b 1)
  • eval $(...)- Baca output dari slopmenjadi variabel
  • notify-send ... - Kirim pemberitahuan GUI dengan informasi tentang area yang dipilih
  • echo ${W}x${H} | xsel -bi- menyalin dimensi ke clipboard (membutuhkan xselsudo apt-get install xsel)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.