Comment mesurer les dimensions à l'écran sans utiliser de règle?

27

J'ai une image à l'écran et je veux mesurer sa largeur. Bien sûr, je peux utiliser une règle , mais c'est étrange et lent. Est-ce que je peux cliquer sur une touche de raccourci, faire glisser une zone et indiquer la hauteur et la largeur de cette zone?

Quelque chose de similaire à règle de page pour Google Chrome.

Actuellement, j'utilise Shift + PrtScn et en faisant glisser la zone, enregistrez l'image, puis allez dans Propriétés pour connaître sa hauteur et sa largeur.

    
posée dayuloli 10.02.2015 - 08:59
la source

3 réponses

8

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 Edit - & gt; Préférences et sélectionnez l'onglet comportement.
Cochez "Démarrer l'obturateur à la connexion" et "Masquer la fenêtre lors du premier lancement". Voir la capture d'écran ci-dessous:

Utilisation

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

  1. Sélectionnez votre point de départ et faites-le glisser jusqu'à votre point final. Toute la fenêtre s'assombrira sauf votre sélection. Vous pouvez déplacer les bordures pour obtenir plus de résultats.
  2. Shutter fournira une fenêtre de dialogue avec les coordonnées X et Y et la taille (qui correspond à ce que vous voulez) de la sélection. Voir la capture d'écran ci-dessous dans le coin supérieur gauche d'un exemple.

  1. Une capture d'écran zoomée montrant qu'il fait 727px par 367px:

  1. Enfin, appuyez simplement sur Esc pour fermer la sélection et masquer le déclencheur.
  2. Continuez avec ce que vous faisiez.
réponse donnée Parto 13.02.2015 - 11:06
la source
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)

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

  3. Placez la souris en deuxième position (à nouveau sans cliquer)

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

Options

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

Ou une fenêtre d'informations sur Zenity:

(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’option notify-send )

    ou:

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

    pour l'option Zenity .

  3. Enregistrez le script dans ~/bin (vous devrez probablement créer le répertoire) sous la forme 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 & gt; "Clavier" & gt; "Raccourcis" & gt; "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:

    measure_area
    

Notes

  • Vous devrez d'abord vous déconnecter / entrer
  • Cela ne fait pas de différence ce que vous prenez en première / deuxième position; le script mesure les 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é pour la première fois, il obtient la position actuelle de la souris avec la commande xdotool :

xdotool getmouselocation

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

Modifier

Mise à jour du script avec plusieurs améliorations:

  • Commandes subprocess.Popen() / subprocess.check_output() optimisées (grâce à @muru, @Trengot)
  • Ajout d’une procédure de réparation en cas de problème avec le fichier de première donnée (par exemple, si l’utilisateur a tenté d’exécuter le script sans que xdotool soit installé)
  • Ajout d’un petit écran de confirmation dim-flash lorsque vous appuyez sur la combinaison de touches pour les premières coordonnées. Il semble un peu plus convivial de donner à l'utilisateur un type de confirmation de l'action .
réponse donnée Jacob Vlijm 10.02.2015 - 11:29
la source
2

Utilisation de slop

Un autre moyen simple de déterminer la zone d’une sélection consiste à utiliser slop (opération de sélection), une ligne de commande. Utilitaire "qui interroge une sélection de l'utilisateur et imprime la région à la sortie standard."

slop est un outil relativement nouveau et n'a pas encore été intégré à Debian / Ubuntu. En l'état, vous devrez le compiler depuis 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. slop lui-même est en fait très facile à travailler. Par exemple, le one-liner suivant vous demandera de sélectionner une zone d'écran et affichera le résultat sous forme de notification et l'écrira dans le presse-papier:

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:

Une description rapide des commandes utilisées:

  • slop -t 0 -b 1 - invite 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 1px ( -b 1 )
  • eval $(...) - lecture de la sortie de slop en variables
  • notify-send ... - envoie une notification par interface graphique avec des informations sur la zone sélectionnée
  • echo ${W}x${H} | xsel -bi - copie les dimensions dans le presse-papiers (requiert xselsudo apt-get install xsel )
réponse donnée Glutanimate 16.02.2015 - 03:28
la source

Lire d'autres questions sur les étiquettes