La bibliothèque Pil (Python Imaging Library) ajoute des
possibilités de manipulation d'images de tout format avec la présence de quelques fonctions de traitement d'images
Vous pouvez consulter la documentation officielle de Pil qui est
relativement complète (version html et pdf en anglais d'un tutoriel avec présentation et exemples de la majorité des fonctions)
La fonction Image.open(path) permet d'ouvrir une image de tout format (compatible avec la bibliothèque Pil)
la fonction im.getdata() retourne un objet-séquence contenant les valeurs des pixels de l'image. Cependant il n'est lisible
que par Pil. La fonction list permet ensuite de récupérer cette séquence sous un format lisible par l'utilisateur. On récupère
alors une liste de tuples à 3 compoantes si l'image est couleur, une liste simple sinon.
import Image
im = Image.open("Python.jpg")
data =list(im.getdata())
la fonction Image.New(mode, size) permet de créer une nouvelle image où mode ("L" ou "RGB")
définit si l'image sera couleur ou en niveau de gris et size est un tuple (NbColonnes, NbLignes).
la fonction im.putdata(data) remplit l'image avec la séquence de valeurs data
##Récupérationdesvaleursdel'imageimport Image
im = Image.open("Python.jpg")
data =list(im.getdata())
##Reconstructiondel'image
imNew=Image.new(im.mode ,im.size)
imNew.putdata(data)
La bibliothèque Pil fournit plusieurs modules dont le module standart qui se nomme Image. Classiquement, on l'importe par la commande
Import Image. On accède ensuite aux fonctions de ce module par la forme Image.UneFonction. Il arrive parfois que survienne alors
l'erreur AttributeError: class Image has no attribute .... La cause peut être multiple:
Tout d'abord, vous avez un de votre propre module qui se nomme également Image. Ainsi, au lieu d'importer le module de Pil,
vous importez finalement votre propre module qui ne contient pas les fonctions du module Image de Pil.
D'autres bibliothèques que vous utilisez peuvent également contenir un module Image. Si vous les importez de la manière
from ... import *, il se peut donc que vous importiez un module Image qui écrasera celui du module Pil (ou inversement, en fonction
de la position des imports). C'est une des raisons qui font qu'il est déconseillé d'utilisez ce schéma pour l'importation.
Par exemple, le module Tkinter contient un module Image et de ce fait l'instruction from Tkinter import * écrasera le module Image de
Pil que vous auriez pu importer auparavant. C'est pour cela qu'il est préférable pour Tkinter d'importer de la manière import Tkinter as Tk.