Génération d'images
👨🏫 Introduction
Objectif
Ces travaux pratiques ont pour objectif de vous faire manipuler des tableaux à deux dimensions dans le cadre de la création d'images.
Les productions réalisées dans le cadre de ce TP seront à rendre en fin de séance :
- Envoyer obligatoirement vos fichiers sous forme d'une archive au format ZIP (et non 7zip ou 7z)
- Effectuer le rendu uniquement depuis l'application Exercices de l'ENT, via l'exercice intitulé [6TP3] Génération d'images
Préparation
Afin de garder organisées les productions réalisées en TP, mettre à jour l'arborescence NSI selon l'ordinateur utilisé :
💻 Ordinateur portable
- Lancer l'explorateur de fichiers
- Se rendre dans le dossier Documents
- Créer le dossier
NSI(s'il n'existe pas déjà) - Dans le dossier
NSI, créer le dossierchapitre_06(s'il n'existe pas déjà) - Dans le dossier
chapitre_06, créer le dossiertp3_images
🖥 Ordinateur fixe des salles informatiques
- Depuis le Bureau, cliquer sur l'icône intitulée Zone personnelle
- Créer le dossier
NSI(s'il n'existe pas déjà) - Dans le dossier
NSI, créer le dossierchapitre_06(s'il n'existe pas déjà) - Dans le dossier
chapitre_06, créer le dossiertp3_images
Téléchargement des fichiers
Pour effectuer ce TP, il est nécessaire de télécharger certains fichiers :
- Télécharger le fichier ZIP contenant les fichiers du TP : 📦 télécharger
- Ouvrir ou décompresser le fichier ZIP
- Copier/coller tous les fichiers dans le dossier
NSI\chapitre_06\tp3_images
👾 Partie 1 - Pixel Art
1.1 Vérification
Afin de vérifier le bon fonctionnement du module images, suivre les instructions ci-après.
🛠 Mise en pratique
- Lancer l'application Thonny
- Créer un nouveau fichier
- Enregistrer le programme dans le fichier
partie1\ex1_test.py - importer le module
images - Appeler la fonction
afficher_test()du moduleimages - Lancer le programme
L'affichage à obtenir si l'ensemble est fonctionnel
PIL n'est pas installé
- Accéder au menu Outils ▸ Gérer les paquets... de Thonny
- Saisir pillow et cliquer sur Rechercher sur PyPI
- Cliquer sur Pillow
- Cliquer sur Installer
L'installation de PIL ne fonctionne pas
- Vérifier que EduPython soit installé sur votre ordinateur et le lancer
- Tester à nouveau le bon fonctionnement du module images
Le module ne fonctionne pas sous EduPython non plus
- Se connecter à https://console.basthon.fr
- Cliquer sur l'icône Ouvrir un script, charger un module ou un fichier
- Charger le fichier
image.py
1.2 Première image
Nous souhaitons afficher une image à partir d'un tableau à deux dimensions.
🛠 Mise en pratique
- Créer un nouveau fichier
- Enregistrer le programme dans le fichier
partie1\ex2_image.py - importer le module
images - Créer un tableau à deux dimensions
pixelscorrespondant à la représentation suivante :
- Appeler la fonction
afficher_imagedu moduleimagesen lui passant la variablepixelsen argument. - Lancer le programme, l'affichage doit être le suivant :
- Modifier les valeurs du tableau à deux dimensions
pixelsde façon à obtenir l'affichage suivant :
1.3. Dessiner une bordure
Pour les images du précédent exercice, les pixels ont été choisis un par un manuellement. Nous souhaitons maintenant définir les pixels d'une image vierge de taille quelconque. Pour cela, il sera nécessaire d'automatiser la définition des pixels.
🛠 Mise en pratique
- Ouvrir le fichier
partie1\ex3_bordure.py - Créer un tableau à deux dimensions
pixelsaux dimensions de votre choix dont toutes les valeurs sont initialisées à zéro - Compléter la procédure
afficher_dimensionsqui prend en paramètre un tableau à deux dimensions représentant une image, et qui affiche ses dimensions
>>> pixels = [[0, 0, 0], [0, 0, 0]]
>>> afficher_dimensions(pixels)
3 x 2
(l'écriture de cette fonction à pour objectif d'avoir l'assurance que vous ayez bien distingué les lignes et les colonnes d'une image représentée par un tableau à deux dimensions)
- Compléter la procédure
dessiner_bordureprenant en paramètre un tableau à deux dimensions et affectant 1 aux éléments de façon à ajouter une bordure à l'image. Attention, cette procédure doit être capable de dessiner une bordure pour toute taille d'image (pour rappel, une procédure est une fonction qui ne renvoie pas de valeur)
>>> pixels = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> dessiner_bordure(pixels)
>>> pixels
[[1, 1, 1], [1, 0, 1], [1, 1, 1]]
- Afficher l'image en utilisant la fonction
afficher_image

Écrire les procédures dessiner_bordure_inverse et dessiner_damier permettant d'obtenir respectivement les rendus suivants :
🏗️ Partie 2 - Générer un tableau 2D
2.1. Affichage d'un tableau
Nous souhaitons disposer d'une procédure afficher_tableau ayant pour seul paramètre un tableau d'entiers tableau.
Cette procédure affiche le contenu de tableau de façon comparable à l'exemple suivant :
>>> afficher_tableau([2, 4, 6, 8])
2 4 6 8
🛠 Mise en pratique
- Ouvrir le fichier
partie2\tableau.py - Compléter la procédure
afficher_tableau - Lancer les tests et corriger le code jusqu'à l'absence d'erreurs
2.2. Affichage d'un tableau 2D
Nous souhaitons disposer d'une procédure afficher_tableau_2D ayant pour seul paramètre un tableau à deux dimensions d'entiers tableau_2D.
Cette procédure affiche le contenu de tableau_2D de façon comparable à l'exemple suivant :
>>> afficher_tableau_2D([[1, 2], [3, 4], [5, 6]])
1 2
3 4
5 6
🛠 Mise en pratique
- Revenir au fichier
partie2\tableau.py - Compléter la procédure
afficher_tableau_2D. Faire appel à la procédureafficher_tableau - Lancer les tests et corriger le code jusqu'à l'absence d'erreurs
2.3. Génération d'un tableau 2D
Nous souhaitons disposer d'une fonction generer_tableau_2D renvoyant un tableau à deux dimensions. Elle dispose des paramètres suivants :
largeur- Entier correspondant à la largeur du tableau (nombre de colonnes)hauteur- Entier correspondant à la hauteur du tableau (nombre de lignes)valeur- Valeur initiale des éléments du tableau
>>> test = generer_tableau_2D(5, 5, 0)
>>> test[2][2] = 1
>>> afficher_tableau_2D(test)
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
🛠 Mise en pratique
- Revenir au fichier
partie2\tableau.py - Compléter la procédure
generer_tableau_2D. - Lancer les tests et corriger le code jusqu'à l'absence d'erreurs
Penser à utiliser les tableaux en compréhension ou l'opérateur *
🎨 Partie 3. Image couleur
Introduction
Les tuples
Un objet de type tuple, un p-uplet, est une suite ordonnée d'éléments pouvant être chacun de n'importe quel type. On parlera indifféremment de p-uplet ou de tuple. On p-uplet utilise comme enregistrement de données hétérogènes liées entre elles.
# Syntaxe
p_uplet = (valeur_1, ..., valeur_p)
# Utilisation d'un p-uplet pour stocker les informations d'un pixel
pixel = (255, 0, 0, 1.0)
La couleur
Une couleur est définie par 3 entiers compris entre 0 et 255 correspondant respectivement aux composantes rouge, vert et bleue.
En Python, nous pouvons représenter une couleur sous forme d'un tuple de 3 éléments : (rouge, vert, bleu)
- Quelle couleur représente le tuple
(255, 0, 0)?
💡 Réponse
La couleur représentée par ce tuple est le rouge.
- Quelle couleur représente le tuple
(255, 255, 0)?
💡 Réponse
La couleur représentée par ce tuple est le jaune.
- Quelle couleur représente le tuple
(150, 150, 150)?
💡 Réponse
La couleur représentée par ce tuple est le gris.
3.1 Générer couleur
Nous souhaitons disposer de la fonction generer_couleur renvoyant une couleur sous forme d'un tuple de 3 valeurs.
Celle-ci prend un unique paramètre nommé intensite, un entier compris entre 0 et 255 définissant l'intensité de la couleur générée.
Le choix de la couleur générée est libre.
Exemple 1
>>> generer_couleur(90)
(90, 90, 90)
Exemple 2
>>> generer_couleur(90)
(90, 0, 90)
🛠 Mise en pratique
- Créer un nouveau fichier et l'enregistrer sous
partie3\main.py - Écrire la fonction
generer_couleuren incluant la docstring et les doctests - Ajouter le code nécessaire au lancement des tests
3.2 Générer un fond uni
On définit une image par un tableau à deux dimensions dont chaque élément correspond à une couleur.
Nous souhaitons disposer de la fonction generer_fond_uni qui renvoie un tableau de couleurs de taille est 256x256.
- Récupérer la fonction
generer_tableaude la partie 2 pour générer le tableau à deux dimensions de l'image - Utiliser la fonction
generer_couleurpour obtenir la couleur qui sera utilisée comme valeur d'initialisation des éléments du tableau à deux dimensions - Utiliser la fonction
afficher_image_couleurdu moduleimagespour visualiser l'image générée
3.3 Générer un dégradé
Nous souhaitons disposer de la fonction generer_degrade qui renvoie un tableau de couleurs de taille est 256x256 dont l'image correspond à un dégradé.
- Commencer par générer une image de type fond uni
- Parcourir ensuite chaque ligne de l'image en faisant varier l'intensité de la couleur renvoyée par
generer_couleur
Créer une fonction renvoie un tableau de couleurs de taille est 256x256 dont l'image correspond à des dégradés superposés.
Pour cela, faire varier horizontalement et verticalement les composantes des couleurs.
L'utilisation de la fonction generer_couleur n'est plus nécessaire.