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.
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:
Le script ci-dessous mesure la taille d'une zone située entre deux emplacements du pointeur de la souris.
Cela fonctionne comme suit:
Placez le pointeur de la souris en première position (sans cliquer)
Appuyez sur la combinaison de touches de votre choix (voir ci-dessous).
Placez la souris en deuxième position (à nouveau sans cliquer)
Appuyez à nouveau sur votre combinaison de touches. Une notification vous indiquera la taille exacte (px) de la zone.
Vous pouvez choisir (en supprimant la mise en commentaire de l'une des lignes) comment vous souhaitez être averti; soit par une notification:
Ou une fenêtre d'informations Zenity:
(Les exemples proviennent de différents domaines)
Le script utilise xdotool
:
Sudo apt-get install xdotool
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
.
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.
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
#!/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)
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.
Mise à jour du script avec un certain nombre d'améliorations:
subprocess.Popen()
/subprocess.check_output()
optimisées (grâce à @muru, @Trengot)xdotool
)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:
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 variablesnotify-send ...
- envoie une notification à l'interface graphique avec des informations sur la zone sélectionnéeecho ${W}x${H} | xsel -bi
- copie les dimensions dans le presse-papier (requiert xsel
→ Sudo apt-get install xsel
)