Le but de ce sujet de TP est d’introduire l’utilisation de modules en Python, à partir de l’exemple de la bibliothèque Pillow : celle-ci permet de manipuler facilement des fichiers d’images dans des formats variés.

Préambule

Pour l’installation éventuelle de Pillow, voir les instructions.

Avant de commencer, je vous suggère d’aller piocher une image de test pas trop grosse (disons au maximum 1024 pixels dans chaque dimension). À défaut en voilà deux, obtenues à partir d’une photo mise à disposition par Hans Stieglitz sur les Wikimedia commons, et soumise à la licence CC-BY-SA 3.0 :

Utilisation du module Pillow

Ouverture et conversion de fichiers

Le bout de code suivant convertit le fichier tigre.jpg (au format JPEG) en tigre.png (au format PNG) :

   1 import PIL.Image as Image
   2 im = Image.open(r'tigre.jpg')
   3 im.save(r'tigre.png')

Essayez chez vous.

Première difficulté : comment expliquer à Python où aller chercher les fichiers ?

   1 import os
   2 os.chdir('/le/chemin/vers/le/bon/dossier')

/!\ Le répertoire courant est la base à partir de laquelle le programme cherche un fichier quand on donne un chemin relatif. C’est différent du chemin de recherche des modules python, qui est situé dans la variable sys.path (en fait c’est une liste de chemins). Testez.

Obtenir des informations sur les objets Python

Dans un interpréteur, essayez successivement :

   1 import PIL.Image as Image
   2 help(Image.open)
   3 help(Image)
   4 im = Image.open(r'tigre.jpg')
   5 print(im.format,im.size,im.mode)
   6 help(im.save)
   7 help(im)
   8 print(dir(im))
   9 print(im.save.__doc__)

Questions :

Dessin basique

Écrivez une fonction croix(im) qui dessine une petite croix au centre de l’image im.

Testez de la manière suivante :

   1 from croix import croix
   2 import PIL.Image as Image
   3 im=Image.open(r'tigre.jpg')
   4 croix(im)
   5 im.save(r'tigre_test_croix.png')

Ajoutez des arguments optionnels à la fonction pour permettre à l’utilisateur de choisir la taille et la couleur du motif. Ça devrait commencer par quelque chose comme :

   1 def croix(im, taille=10, couleur=0):
   2         ...

Dessin plus avancé

Essayez les lignes suivantes :

   1 from PIL.ImageDraw import Draw
   2 dessin = Draw(im)
   3 l,h = im.size
   4 dessin.line([l//2-10,h//2,l//2+10,h//2])
   5 dessin.line([l//2,h//2-10,l//2,h//2+10])
   6 dessin.ellipse([l//2-8,h//2-8,l//2+8,h//2+8])
   7 im.save(r'test_dessin.png')

Explorez les méthodes de dessin disponible (help(dessin)).

EnsInfo: Manipulation d’images (last edited 2017-11-30 22:32:12 by LionelVaux)