web-dev-qa-db-fra.com

Comment puis-je facilement mettre à l'échelle une capture d'écran prise à partir d'un écran haute résolution?

Depuis que je suis passé sur un écran haute résolution, les captures d'écran que je publie sont maladroites, exemple ci-dessous.

Y a-t-il un moyen de les rendre rapidement normales?
De préférence, quelque chose de plus rapide que de lancer GIMP.

En particulier, y a-t-il une option cachée pour cela dans gnome-screenshot?

enter image description here

  • Il n’existe probablement pas d’outil parfait, car la manière d’adapter Ubuntu à une résolution élevée n’est pas uniforme (polices, décorations de fenêtre, programmes, l’échelle peut être différente), mais un bon outil lirait ces paramètres et déterminerait la meilleure échelle à utiliser. .
  • De préférence, je souhaite conserver la possibilité de ne sélectionner qu'une partie de l'écran (comme dans Maj + PRTSCR) et de choisir le nom du fichier.
  • Au cas où cela serait important, je sauvegarderai toujours mes captures d'écran dans $HOME/Pictures.
3
Nicolas Raoul

1. Faites une capture d'écran comme d'habitude, puis redimensionnez automatiquement la dernière capture d'écran que vous avez prise avec une touche de raccourci.

Placé sous une touche de raccourci, le script ci-dessous va:

  1. Trouvez la dernière capture d'écran ajoutée dans votre répertoire de captures d'écran (qui est ~/Picures, comme vous l'avez mentionné dans un commentaire).
  2. Mettre à l'échelle l'image en un pourcentage arbitraire
  3. Renommez et enregistrez l'image sous le nom renamed_filename.png, où filename.png représente le nom de fichier d'origine.

Comment utiliser

  1. Le script nécessite l'installation de la bibliothèque python3-pil, ce qui peut ne pas être le cas sur votre système:

    Sudo apt-get install python3-pil
    
  2. Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous le nom resize_screenshot.py

  3. Test: exécutez le script en effectuant une capture d'écran, puis exécutez-le à l'aide de la commande suivante:

    python3 /path/to/resize_screenshot.py 80
    

    80 est le pourcentage de taille de sortie souhaité. Le script a maintenant créé la copie redimensionnée de la dernière capture d'écran.

  4. Si tout fonctionne correctement, ajoutez-le à une touche de raccourci: Paramètres système> Clavier> Raccourcis> SHortcuts personnalisés. Ajoutez la commande:

    python3 /path/to/resize_screenshot.py 80
    

Le scénario

#!/usr/bin/env python3
import os
import sys
from PIL import Image

percent = float(sys.argv[1])/100


pic_list = []
# list all .png files in ~/Pictures
pic_dir = os.environ["HOME"]+"/Pictures"
files = [pic_dir+"/"+f for f in os.listdir(pic_dir) if \
         all([f.endswith(".png"), not f.startswith("resized")])]
# create a sorted list + the creation date of relevant files
pics = [[f, int(os.stat(f).st_ctime)] for f in files]
pics.sort(key=lambda x: x[1])
# choose the latest one
resize = pics[-1][0]
# open the image, look up its current size
im = Image.open(resize)
size = im.size
# define the new size; current size * the percentage
newsize = [int(n * percent) for n in size]
# resize the image, save it as renamed file (keeping original)
im.thumbnail(newsize, Image.ANTIALIAS)
newfile = pic_dir+"/resized_"+resize.split("/")[-1]
im.save(newfile, "png")

Un exemple

Un exemple de votre image, redimensionnée par:

python3 <script> 80

enter image description here


2. Option entièrement automatique

Alors que le script ci-dessus fait son travail sur une touche de raccourci, vous pouvez le rendre complètement automatique avec un script en arrière-plan. Tout ce que fait le script, c’est vérifier les nouveaux fichiers dans ~/Picures et exécuter l’action de redimensionnement comme dans le premier script.

Le scénario

#!/usr/bin/env python3
import os
import sys
from PIL import Image
import time

percent = float(sys.argv[1])/100
pic_dir = os.environ["HOME"]+"/Pictures"

def pics_list(dr):
    return [pic_dir+"/"+f for f in os.listdir(pic_dir) if \
            all([f.endswith(".png"), not f.startswith("resized")])]

def scale(f):
    #open the image, look up its current size
    im = Image.open(f)
    size = im.size
    # define the new size; current size * the percentage
    newsize = [int(n * percent) for n in size]
    # resize the image, save it as renamed file (keeping original)
    im.thumbnail(newsize, Image.ANTIALIAS)
    newfile = pic_dir+"/resized_"+f.split("/")[-1]
    im.save(newfile, "png")

p_list1 = pics_list(pic_dir)
while True:
    time.sleep(2)
    p_list2 = pics_list(pic_dir)
    for item in p_list2:
        if not item in p_list1:
            scale(item)
    p_list1 = p_list2

Comment utiliser

La configuration est identique au script ci-dessus (" Comment utiliser "), mais au lieu de [4.], ajoutez-le à Applications de démarrage: Tableau de bord > Applications de démarrage> Ajouter. Ajoutez la commande:

python3 /path/to/resize_screenshot.py 80

3. Option entièrement automatique avec un dialogue de balance

Pratiquement le même script, mais maintenant avec un dialogue de balance, immédiatement après vous avez enregistré l'image sur ~/Pictures:

enter image description here

Cette capture d'écran a été automatiquement redimensionnée à 80%:)

Le scénario

#!/usr/bin/env python3
import os
import sys
from PIL import Image
import time
import subprocess

# --- change if you like the default scale percentage, as proposed by the slider:
default_percent = 80
# --- change if you like the screenshot directory
pic_dir = os.environ["HOME"]+"/Pictures"
# ---

def pics_list(dr):
    return [pic_dir+"/"+f for f in os.listdir(pic_dir) if \
            all([f.endswith(".png"), not f.startswith("resized")])]

def scale(f, size):
    #open the image, look up its current size
    im = Image.open(f)
    currsize = im.size
    # define the new size; current size * the percentage
    newsize = [int(n * size) for n in currsize]
    # resize the image, save it as renamed file (keeping original)
    im.thumbnail(newsize, Image.ANTIALIAS)
    newfile = pic_dir+"/resized_"+f.split("/")[-1]
    im.save(newfile, "png")

p_list1 = pics_list(pic_dir)
while True:
    time.sleep(2)
    p_list2 = pics_list(pic_dir)
    for item in p_list2:
        if not item in p_list1:
            try:
                size = subprocess.check_output([
                    "zenity", "--scale",
                    "--value="+str(default_percent),
                    ]).decode("utf-8")
                scale(item, float(size)/100)
            except subprocess.CalledProcessError:
                pass
    p_list1 = p_list2

Utiliser

La configuration est exactement comme ci-dessus, à part la commande, maintenant sans pourcentage d'échelle

python3 /path/to/resize_screenshot.py

Remarque

Comme toujours, le script d’arrière-plan n’utilise pratiquement aucune ressource, à moins que votre répertoire ~/Pictures ne soit insanement énorme :).

3
Jacob Vlijm

Avec gnome-screenshot , nous ne pouvons pas redimensionner la sortie.

Pour le faire automatiquement, nous pouvons affecter un autre application de terminal de capture d'écran à un raccourci.

Exemples de captures d’écran à 50%:

  1. Image Magick Install imagemagickimport-resize au pourcentage de l'original

    • prendre une capture d'écran de tout le bureau:

      import -window root -resize 50% [-delay <value>] shot.png
      
    • prendre une capture d'écran d'une fenêtre (sélectionnable avec la souris):

      import -window $(xdotool selectwindow) resize 50% shot.png
      
    • prendre une capture d'écran d'une fenêtre et afficher le résultat:

      import -window $(xdotool selectwindow) -resize 50% shot.png && display shot.png
      
    • charger la capture d'écran dans un autre lecteur externe (par exemple, eog)

      import -window $(xdotool selectwindow) -resize 50% shot.png && eog shot.png
      
  2. scrot Install scrot(page de manuel) sortie sur Image Magic convert pour sélectionner une zone d'écran

    scrot <options> -e "convert \$f -resize 50% shot.png && rm \$f"
    <options>
    -s select window or rectangle with mouse
    -u use currently focused windows
    

    L'exemple ci-dessous affiche, puis enregistrez une capture d'écran demi-taille (50%) d'une zone ou d'une fenêtre sélectionnée en utilisant le nom de fichier par défaut de scrot (date/heure/minute/seconde/taille) dans notre répertoire d'images:

    scrot -s -e "convert \$f -resize 50% ~/Pictures/\$f && display \$f && rm \$f"
    
1
Takkat