## page was renamed from Des images et des bulles 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, [[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 [[https://commons.wikimedia.org/wiki/File:Tiger-2.jpg?uselang=fr|photo]] mise à disposition par Hans Stieglitz sur les ''[[https://commons.wikimedia.org/wiki/Main_Page?uselang=fr|Wikimedia commons]]'', et soumise à la licence [[ http://creativecommons.org/licenses/by-sa/3.0/deed.fr|CC-BY-SA 3.0]] : * [[attachment:../Filtres d’image/tigre.jpg|tigre.jpg]] * [[attachment:../Filtres d’image/tigrenb.png|tigrenb.png]] == 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) : {{{#!highlight python import PIL.Image as Image im = Image.open(r'tigre.jpg') im.save(r'tigre.png') }}} Essayez chez vous. Première difficulté : comment expliquer à Python où aller chercher les fichiers ? {{{#!highlight python import os 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 : {{{#!highlight python import PIL.Image as Image help(Image.open) help(Image) im = Image.open(r'tigre.jpg') print(im.format,im.size,im.mode) help(im.save) help(im) print(dir(im)) print(im.save.__doc__) }}} Questions : * que se passe-t-il si on oublie la première ligne ? que fait `help(PIL.Image)` ? * comment interprétez-vous l’attribut `im.mode` ? * comment obtenir la valeur d’un pixel ? quel est la forme du résultat pour une image en couleur ? en niveaux de gris ? * comment modifier la valeur d’un pixel ? * comment convertir facilement une image couleur en niveaux de gris ? === Dessin basique === Écrivez une fonction `croix(im)` qui dessine une petite croix au centre de l’image `im`. Testez de la manière suivante : * sauvez votre script par exemple sous le nom `croix.py` * dans un interpréteur, tapez les lignes suivantes : {{{#!highlight python from croix import croix import PIL.Image as Image im=Image.open(r'tigre.jpg') croix(im) 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 : {{{#!highlight python def croix(im, taille=10, couleur=0): ... }}} === Dessin plus avancé === Essayez les lignes suivantes : {{{#!highlight python from PIL.ImageDraw import Draw dessin = Draw(im) l,h = im.size dessin.line([l//2-10,h//2,l//2+10,h//2]) dessin.line([l//2,h//2-10,l//2,h//2+10]) dessin.ellipse([l//2-8,h//2-8,l//2+8,h//2+8]) im.save(r'test_dessin.png') }}} Explorez les méthodes de dessin disponible (`help(dessin)`).