Comment mesurer les dimensions à l'écran?


29

J'ai une image à l'écran et je veux mesurer sa largeur. Bien sûr, je peux utiliser une règle , mais c'est lunatique et lent. Y a-t-il quelque chose où je peux cliquer sur une touche de raccourci, faire glisser une zone et cela me dira la hauteur et la largeur de cette zone?

Quelque chose de similaire à Page Ruler pour Google Chrome.

Actuellement, j'utilise Shift+ PrtScnet je fais glisser la zone, j'enregistre l'image, puis je vais dans Propriétés pour connaître sa hauteur et sa largeur.

Réponses:


10

Utilisation de l'obturateur

Installez d'abord Shutter si vous ne l'avez pas installé.

sudo apt-get install shutter

Ouvrez les préférences sous Edition -> Préférences et sélectionnez l'onglet comportement.
Cochez «Démarrer l'obturateur à la connexion» et «Masquer la fenêtre au premier lancement». Voir capture d'écran ci-dessous:

entrez la description de l'image ici

Usage

  1. Assurez-vous que l'icône du volet d'obturation est visible et sélectionnez votre fenêtre ou tout ce que vous souhaitez mesurer.
  2. Cliquez sur l'icône de l'obturateur et sélectionnez «sélection».

entrez la description de l'image ici

  1. Sélectionnez votre point de départ et faites-le glisser vers votre point d'arrivée. La fenêtre entière s'assombrira sauf votre sélection. Vous pouvez déplacer les bordures pour obtenir plus de résultats «au point».
  2. Shutter fournira une fenêtre de dialogue avec les coordonnées X et Y et la taille (ce que vous voulez) de la sélection. Voir la capture d'écran ci-dessous dans le coin supérieur gauche d'un exemple.

entrez la description de l'image ici

  1. Une capture d'écran dézoomée montrant qu'elle est de 727 pixels sur 367 pixels:

entrez la description de l'image ici

  1. Enfin, appuyez simplement sur Escpour annuler la sélection et masquer l'obturateur.
  2. Continuez avec tout ce que vous faisiez.

Très propre! J'aime la fonction réticule ici! Très complet - peut prendre la fenêtre, la sélection, avoir du retard, etc.
dayuloli

42

Comment ça marche

Le script ci-dessous mesure la taille d'une zone, entre deux emplacements du pointeur de la souris.

Cela fonctionne comme suit:

  1. Placez le pointeur de la souris en première position (sans cliquer)

    entrez la description de l'image ici

  2. Appuyez sur la combinaison de touches de votre choix (voir ci-dessous)

  3. Placez la souris dans la deuxième position (encore une fois sans cliquer)

    entrez la description de l'image ici

  4. Appuyez à nouveau sur votre combinaison de touches. Une notification vous indiquera la taille exacte (px) de la zone.

    entrez la description de l'image ici

Les options

Vous pouvez choisir (en décommentant l'une des lignes) la manière dont vous souhaitez être averti; soit par une notification:

entrez la description de l'image ici

Ou une fenêtre d'information Zenity:

entrez la description de l'image ici

(Les exemples proviennent de différents domaines)

Comment utiliser

  1. Le script utilise xdotool:

    sudo apt-get install xdotool
    
  2. Copiez le script ci-dessous dans un fichier vide, décommentez l'une des lignes:

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

    (à notifier par l' notify-sendoption)

    ou:

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

    pour l' Zenityoption.

  3. Enregistrez le script dans ~/bin(vous devrez probablement créer le répertoire) sous measure_area(sans extension) et rendez-le exécutable .

  4. Ajoutez une combinaison de touches de votre choix pour exécuter le script: Choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:

    measure_area
    

Remarques

  • Vous devrez d'abord vous déconnecter / vous connecter
  • Cela ne fait aucune différence ce que vous prenez comme première / deuxième position; le script mesure des valeurs absolues .

Le 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)

Explication

Lorsque le script est appelé la première fois, il obtient la position actuelle de la souris avec la xdotoolcommande:

xdotool getmouselocation

Il enregistre ensuite la position dans un fichier (invisible) .measure_area.txt, en attendant le deuxième appel.
Au deuxième appel, il lit le fichier, le supprime et compare les x/ycoordonnées enregistrées aux dernières, et calcule la taille de la zone entre elles.

modifier

Mise à jour du script avec un certain nombre d'améliorations:

  • Commandes subprocess.Popen()/ optimisées subprocess.check_output()(merci à @muru, @Trengot)
  • Ajout d'une procédure de réparation en cas de problème avec le premier fichier de données (par exemple, si l'utilisateur a d'abord essayé d'exécuter le script sans l'avoir xdotoolinstallé)
  • Ajout d'un petit écran de confirmation dim-flash lorsque la combinaison de touches est pressée pour les premières coordonnées. Il semble un peu plus convivial de donner à l'utilisateur une sorte de confirmation de l'action.

1
Impressionnant! Je l'ai essayé tout à l'heure, fonctionne parfaitement! Merci! Vous méritez vraiment une médaille!
dayuloli

2
@dayuloli Merci pour la question! J'aime faire des trucs comme ça.
Jacob Vlijm

Agréable! +1. Curieux: pourquoi Popen(['/bin/bash',...au lieu de Popen(['zenity', '--info', ...?
muru

1
Jouez avec des citations? Oo command = ['zenity', '--info', '--title', 'Area Size', '--text', str(w) + ' x ' + str(h)]; subprocess.Popen(command)nécessite beaucoup moins de déconner 'et ", je pense.
muru

1
La même modification pourrait-elle être effectuée xdotools? Quelque chose comme ça check_output(['xdotools', 'getmouseposition'])?
Holloway

2

Utilisation de slop

Un autre moyen simple de déterminer la zone d'une sélection consiste à utiliser slop(Select Operation), un utilitaire de ligne de commande "qui interroge une sélection de l'utilisateur et imprime la région sur stdout".

slopest un outil relativement nouveau et n'a pas encore été empaqueté pour Debian / Ubuntu. En l'état, vous devrez le compiler à partir de la source:

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

L'installation est la partie la plus difficile. sloplui-même est en fait très facile à travailler. Par exemple, la ligne unique suivante vous invitera à sélectionner une zone d'écran et affichera le résultat sous forme de notification et l'écrira dans le presse-papiers:

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

Capture d'écran:

entrez la description de l'image ici

Une ventilation rapide des commandes utilisées:

  • slop -t 0 -b 1- inviter l'utilisateur à sélectionner une zone d'écran; ne sélectionnez pas les fenêtres complètes ( -t 0), définissez la bordure de sélection sur 1 px ( -b 1)
  • eval $(...)- lire la sortie de slopdans les variables
  • notify-send ... - envoyer une notification GUI avec des informations sur la zone sélectionnée
  • echo ${W}x${H} | xsel -bi- copier les dimensions dans le presse-papiers (nécessite xselsudo apt-get install xsel)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.