web-dev-qa-db-fra.com

Comment mesurer les dimensions à l'écran?

J'ai une image à l'écran et je veux mesurer sa largeur. Bien sûr, je peux utiliser un 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 semblable à règle de page pour Google Chrome.

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

29
dayuloli

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 lors de la connexion' et 'Masquer la fenêtre lors du premier lancement'. Voir la capture d'écran ci-dessous:

enter image description here

Usage

  1. Assurez-vous que l'icône du panneau de l'obturateur 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".

enter image description here

  1. Sélectionnez votre point de départ et faites-le glisser jusqu'à votre point final. La fenêtre entière s'assombrira sauf votre sélection. Vous pouvez déplacer les frontières pour obtenir davantage de résultats "pertinents".
  2. L'obturateur fournira une fenêtre de dialogue avec les coordonnées X et Y et la taille (qui est ce que vous voulez) de la sélection. Voir la capture d'écran ci-dessous dans le coin supérieur gauche d'un exemple.

enter image description here

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

enter image description here

  1. Enfin, appuyez sur Esc ignorer la sélection et masquer le volet.
  2. Continuez avec ce que vous faisiez.
10
Parto

Comment ça marche

Le script ci-dessous mesure la taille d'une zone située 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)

    enter image description here

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

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

    enter image description here

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

    enter image description here

Les options

Vous pouvez choisir (en supprimant la mise en commentaire de l'une des lignes) comment vous souhaitez être averti; soit par une notification:

enter image description here

Ou une fenêtre d'informations Zenity:

enter image description here

(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 le nom measure_area (sans extension) et le rendre 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/entrer
  • Ce que vous prenez en première/deuxième position ne fait aucune différence. le script mesure absol valeurs.

Le scénario

#!/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 à l'aide de 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, compare les coordonnées x/y enregistrées aux plus récentes et calcule la taille de la zone qui les sépare.

Éditer

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

  • Commandes subprocess.Popen()/subprocess.check_output() optimisées (grâce à @muru, @Trengot)
  • Ajout d'une procédure de réparation au cas où quelque chose n'allait pas avec le premier fichier de données (par exemple, si l'utilisateur a d'abord essayé d'exécuter le script sans avoir installé xdotool)
  • Ajout d’un petit écran de confirmation faiblement éclairé lorsque la combinaison de touches est enfoncée pour les premières coordonnées. Il semble un peu plus convivial de donner à l'utilisateur certains une sorte de confirmation de l'action.
42
Jacob Vlijm

Utilisation du slop

Un autre moyen simple de déterminer l’aire d’une sélection consiste à utiliser slop (Opération de sélection), un utilitaire de ligne de commande "qui interroge une sélection de l’utilisateur et imprime la région sur la sortie standard".

slop est un outil relativement nouveau qui n'a pas encore été empaqueté pour Debian/Ubuntu. Dans l'état actuel des choses, 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. slop est en réalité très facile à utiliser. Par exemple, la ligne suivante vous invite à sélectionner une zone d'écran et à afficher le résultat sous forme de notification et à l'écrire 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:

enter image description here

Une ventilation 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 $(...) - lit le résultat de slop dans les variables
  • notify-send ... - envoie une notification à l'interface graphique avec des informations sur la zone sélectionnée
  • echo ${W}x${H} | xsel -bi - copie les dimensions dans le presse-papier (requiert xselSudo apt-get install xsel)
2
Glutanimate