Récits d'un GeekTrotter Carnet de bord binaire

28févr./121

Sauvez vos captures d’écran dans un fichier avec Python

Python permet de créer rapidement des applications utiles.
Disons que vous êtes sous papi Windows XP et avez besoin de prendre de captures d'écran et de sauver directement dans un fichier.
Peut-être que souvent vous ouvrez Paint, collez, sauver (en sélectionnant le format dans lequel vous voulez sauver).
Bon c'est pas très lent non plus, mais pourrait-t-on améliorer rapidement ça ?

Le bout de code suivant récupère l'image dans votre presse-papier et vous demande directement où sauver le fichier.
En fonction du nom que vous donnez au fichier, la compression adéquate sera automatiquement appliquée (bmp/png/jpeg...) grâce à la bibliothèque Python Image Library (PIL).

En plus des bibliothèques intégrées à Python, nous n'avons besoin que de cette dernière, soit via PIL ou via PILLOW.

J'ai personellement choisi pillow :

$ pypm install pillow
The following packages will be installed into "%APPDATA%\Python" (2.7):
 pillow-1.7.6
Hit: [pypm-free.activestate.com] pillow 1.7.6
Installing pillow-1.7.6
Fixing script %APPDATA%\Python\Scripts\pilconvert.py
Fixing script %APPDATA%\Python\Scripts\pildriver.py
Fixing script %APPDATA%\Python\Scripts\pilfile.py
Fixing script %APPDATA%\Python\Scripts\pilprint.py

Vous êtes maintenant prêts à exécuter le script :

import os
from PIL import ImageGrab # from PIL or PILLOW
from Tkinter import Tk
from tkFileDialog import asksaveasfile
import tkMessageBox
import subprocess

if __name__=='__main__':
    
    # hide the Tk window
    root = Tk()
    root.withdraw()
    
    # grab the image from the clipboard
    myimage = ImageGrab.grabclipboard()
    
    # quit if it's not an image
    if myimage is None:
        msg = "The clipboard does not contain an image."
        tkMessageBox.showwarning("Error", msg)
        exit()
    
    # choose where to save the file
    fout = asksaveasfile(mode='w', defaultextension=".png")
    
    # quit if the user canceled saving the file
    if fout is None:
        exit()
    
    # finally, save the file (extension will dictate the compression)
    try:
        output = fout.name
        myimage.save(output)
    except Exception, e:
        msg = "Error: %s" % e
        tkMessageBox.showerror("Error", msg)
    else:
        filePath = os.path.abspath(output)
        #tkMessageBox.showinfo("Saved", filePath)
        subprocess.Popen(r'explorer /select,"'+filePath+'"')

Pour utiliser le script, appuyez sur "capture d'écran" et lancez le script.
Lancer le script n'est pas vraiment plus rapide que de lancer Paint, donc je conseille de créer un raccourcit sur le bureau et de lui associer une touche raccourcit.

Par exemple pour lancer le script en tapant "Ctrl + Alt + P":

Maintenant, prenez une capture d'écran et tapez "Ctrl + Alt + P".
Il vous suffit alors de choisir où sauver la capture d'écran.
C'est tout !