Prérequis:
- TP1 Ascii art: utiliser des symboles pour dessiner des formes: Lien
- TP2 Lecture/ Ecriture dans un fichier: Lien
TP3 Projet ascii art: des pixels aux symboles ascii
On va remplacer dans une image la couleur d’un pixel par un caractère ascii dont le remplissage permettra de faire varier la clarté d’un zone de l’image.
Video explicative:
lire la video
-
Télécharger les documents sources et décompresser l’archive. Trouver dans ce dossier les fichiers Marylin-original.jpg et le module display_image
-
Ouvrir un fichier python dans le même dossier. Importer les modules suivants:
from PIL import Image
from display_image import *
Votre code devra ensuite:
- Ouvrir en LECTURE le fichier image à traiter.
- redimensionner cette image de façon à ce qu’elle n’ait que 500 pixels de large/haut:
with Image.open("Marylin-original.jpg") as image:
image = image.resize((500,500))
- déterminer une série de caractères allant dans un ordre croissant d’opacité:
- " " l’espace correspond à un pixel blanc
- “@” peut être choisi comme le caractère le plus noir
- choisir des caractères intermédiaires
ascii_char = ' .:-=+....@'
- Ouvrir en ECRITURE le ficher de destination, celui dans lequel on écrira les symboles ascii:
fileout = open("ascii_art.txt","w")
-
Comme vu dans la video:
- Parcourir les pixels de l’image à l’aide de 2 boucles
for - Lire la couleur de chaque pixel:
rgb=image.getpixel((x,y)) - calculer la valeur en niveau de gris du pixel à partir de sa luminosité:
grey = (rgb[0]+rgb[1]+rgb[2])//3 - attribuer à chaque pixel un caractère: calculer l’indice correspondant dans la liste
ascii_char:index = grey * 9 // 255 - puis l’écrire dans une chaine de caractères:
line += ascii_char[index] + ' ' - mettre
'\n'en fin de ligne et passer à la ligne suivante.
- Parcourir les pixels de l’image à l’aide de 2 boucles
-
Une fois la chaine de caractère terminée:
- placer la chaine
linedans le fichier ascii_art.txt:fileout.write(line) - fermer le fichier txt:
fileout.close()
- placer la chaine
Voila, vous pouvez maintenant vérifier son contenu en l’ouvrant avec un editeur de texte, type bloc notes. Mais pour visualiser l’image représentée par ces caractères, il faudra ajouter les lignes suivantes à votre programme:
image = textfile_to_image('ascii_art.txt')
image.show()
image.save('ascii_art.png')
Liens et sources
- notebook du site clogique
- correction du Projet ascii-art
