TP3 : Utilisation de la bibliothèque PIL¶

1. Mise en place.¶

  • Créer un dossier tp3 dans votre dossier photo_numerique (du dossier SNT).

  • Lancer Pyzo et copier/coller le programme ci-dessous.

  • Enregistrer le programme sous le nom : intro_pil.py

In [ ]:
from PIL import Image   # import du module Image de la bibliothèque PIL


# Fonctions
def dimensions():
    return image.size


def lire_pixel(coordonnees):
    return image.getpixel(coordonnees)


def changer_pixel(coordonnees, r, v, b):
    global image
    image.putpixel(coordonnees, (r, v, b))
    return image


def afficher():
    image.show()


def degrade(r, v, b):
    global image
    (l, h) = dimensions()
    for y in range(h):
        for x in range(l):
            image = changer_pixel((x, y), r + x, v + y, b)
    afficher()


def enregistrer(nom):
    image.save(nom + ".bmp")
    image.save(nom + ".jpg")
    image.save(nom + ".png")
    image.save(nom + ".gif")


# Programme principal
image = Image.new('RGB',(100, 200) , color=(100, 150, 200))


# 1. Quel est le code RGB du pixel de coordonnées (0, 0) ?
# 1. Quel est maintenant le code couleur du pixel de coodonnées (0, 0) ?
# 1. De quelle couleur est ce pixel ?
# 2. Quelle est cette couleur ?
# 3. Que fait la fonction mystere1 ?
# 4. format d’image le plus efficace pour l'image "blanche" ?
# 4. format d’image le plus efficace pour l'image "dégradée" ?
  1. Dans le shell, appeler successivement les fonctions (et répondre aux questions à la fin du programme Python) :
  • afficher()

  • dimensions()

  • lire_pixel((0, 0))

Quel est le code RGB du pixel de coordonnées (0, 0) ?

  • changer_pixel((0, 0), 255, 255, 255)

  • afficher()

Quel est maintenant le code couleur du pixel de coodonnées (0, 0) ?

De quelle couleur est ce pixel ?

  1. a. Modifier la couleur du pixel de coordonnées (1, 0) avec le code RGB : 255, 255, 0

Quelle est cette couleur ?

b. Modifier la couleur du dernier pixel (en bas à droite) avec le code RGB : 255, 0, 0.

  1. Dans la partie # Fonctions, ajouter la fonction suivante :
In [ ]:
def mystere1(r, v, b):
    global image
    for x in range(dimensions()[0]):
        image = changer_pixel((x, 0), r, v, b)

a. Appeler cette fonction avec les paramètres 0, 0, 0 et afficher l'image. Que fait cette fonction ?

b. Modifier cette fonction pour qu'elle modifie la coueur de la 1ère colonne de l'immage et sauvegarder.

c. Dans la partie #Fonctions, copier/coller la fonction suivante :

In [ ]:
def changer_couleur(r, v, b):
    global image
    (l, h) = dimensions()
    for y in range(h):
        for x in range(l):
            image = changer_pixel((x, y), r, v, b)

Utiliser cette fonction pour obtenir une image formée d'un rectangle rose (vous pouvez vous aider du site http://www.proftnj.com/RGB3.htm).

  1. En utilisant cette fonction, modifier l'image pour obtenir un rectangle blanc. Utiliser la fonction enregistrer() pour enregistrer l'image dans votre dossier avec le nom "blanc".

  2. Appeler la fonction degrade() avec les paramètres 20, 50, 150. Afficher l'image. Modifier les paramètres pour obtenir une image qui vous plaise et la sauvegarder en utilisant la fonction enregistrer() avec le nom "mon_degrade".

  3. Regarder la taille des fichiers enregistrés et déterminer quel est le format d’image le plus efficace en terme de mémoire pour les différentes images obtenues.