from PIL.Image import * ################################################################# # # Sujet de TP noté. # ################################################################# # # À sauvegarder dans un fichier nom.prenom.py # dans votre répertoire et à envoyer à # paul.dorbec@u-bordeaux.fr ou carole.blanc@u-bordeaux.fr avant 16:25 # # Si l'affichage n'inclut pas de couleur ou si certains caractères # s'affichent mal, vérifiez que vous avez bien ouvert le fichier # avec idle3. # # Le fichier fourni ne contient pas d'erreur, si une erreur de # syntaxe s'affiche sur le code fourni, c'est sans doute la # ligne d'avant qui pose problème. # # Barème : Quelle que soit sa difficulté, chaque question rapporte # 2 points pour un total de 22 points. La difficulté est précisée # avant chaque question : # * facile # *** difficile # ***** challenge. # # Le but de ce TP est de produire des images représentant des illusions # d'optique. Pour chaque illusion un exemple d'image résultat est disponible # ici : https://svn.labri.fr/repos/CPBX/WWW/images/ # # ################# # # RAPPEL: envoyer votre fichier à # paul.dorbec@u-bordeaux.fr ou # carole.blanc@u-bordeaux.fr avant 16:25 # #                   ################# # ################################################################# # # NOM : Prenom : # ################################################################# ################################################################# #### #### Illusion 1 : Dégradé de gris ou pas ? #### ################################################################# # Le but de cet exercice est de produire l'image illusion1.png # que vous pouvez télécharger sur le site : # https://svn.labri.fr/repos/CPBX/WWW/images/illusion1.png # # L'exercice est décomposé en deux étapes. # # Écrivez une fonction qui trace un rectangle plein de couleur gris # moyen au centre d'une image en respectant les positions fournies # sur le schéma rectangleGrisPosition.png #@ https://svn.labri.fr/repos/CPBX/WWW/images/rectangleGrisPosition.png # # Difficulté : * # def rectangleGris(img): print("à compléter") # Écrivez une fonction qui remplit une image avec un dégradé de gris # horizontal (exemple : degradeHorizontal.png) #@ https://svn.labri.fr/repos/CPBX/WWW/images/degradeHorizontal.png # # Difficulté : ** # def degrade(img): print("à compléter") # Écrivez les appels de fonctions permettant de produire une image # semblable à illusion1.png # https://svn.labri.fr/repos/CPBX/WWW/images/illusion1.png # # Difficulté : * # ################################################################# #### #### Illusion 2 : Combien de points ? #### ################################################################# # Le but de cette exercice est de produire une image semblable à # illusion2.png que vous pouvez télécharger sur le site : #@ https://svn.labri.fr/repos/CPBX/WWW/images/illusion2.png # Dans cet exercice on travaillera sur une image noire au départ. image2=new("RGB",(500,300)) # Écrivez une fonction eclaircirLigneH(img,y) qui éclaircit de 126 # la ligne horisontale positionnée en y (c'est à dire qui ajoute 126 # à chacune des valeurs r,g et b des pixels concernés). # # Difficulté : * (compte avec la suivante : 2pts en tout) # def eclaircirLigneH(img,y): print("à compléter") # Écrivez une fonction eclaircirLigneV(img,x) qui éclaircit de 126 # la ligne verticale positionnée en x # # Difficulté : * (compte avec la précédente) # def eclaircirLigneV(img,x): print("à compléter") # En utilisant les fonctions précédentes, écrivez une fonction qui # dessine sur une image une grille de carrés 50*50. L'épaisseur des # lignes claires sur les carrés sera de 9 pixels comme sur l'image # illusion2.png disponible sur le site #@ https://svn.labri.fr/repos/CPBX/WWW/images/illusion2.png # # Difficulté : ** # def grille(img): print("à compléter") # On pourrait améliorer le rendu de l'image en arrondissant un peu # les intersections comme dans l'image #@ https://svn.labri.fr/repos/CPBX/WWW/images/illusion2-complete.png # # MAIS cela ne fait PAS partie du sujet. #################################### # # A ce stade 10 pts/22 sont traités # #################################### ################################################################# #### #### Illusion 3 : Lignes parallèles ou pas... #### ################################################################# # Le but de cet exercice est de produire une image semblable à # illusion3.png que vous pouvez télécharger sur le site : #@ https://svn.labri.fr/repos/CPBX/WWW/images/illusion3.png # Écrivez une fonction ligneGrise(img,y) qui trace sur une image # une ligne horizontale de couleur gris moyen, d'épaisseur 5 pixels # et centrée en y. Voir ligneGriseComplete.png pour un exemple. #@ https://svn.labri.fr/repos/CPBX/WWW/images/ligneGriseComplete.png # Seules les lignes visibles dans l'image seront tracées, voir #@ https://svn.labri.fr/repos/CPBX/WWW/images/ligneGriseIncomplete.png # pour un exemple. # # Difficulté : * # def ligneGrise(img,y): print("à compléter") # Écrivez une fonction LigneDeCarres(img,y) qui dessine une ligne # horizontale d'épaisseur 40 pixels à l'ordonnée y en alternant des # carrés 40*40 noirs et blanc. Voir ligneDeCarre.png pour un exemple : #@ https://svn.labri.fr/repos/CPBX/WWW/images/ligneDeCarre.png # # Difficulté : *** # def ligneDeCarres(img,y): print("à compléter") # Modifiez la fonction précédente afin de ne tracer que les lignes visibles. # # Difficulté : ** (si la fonction précédente est faite) # def ligneDeCarresSure(img,x,y): print("à compléter") # En utlisant les fonctions ligneGrise et ligneDeCarresSure, écrivez la # fonction damierAlterne(img) qui produit une image similaire à #@ https://svn.labri.fr/repos/CPBX/WWW/images/illusion3.png # # Difficulté : *** # def damierAlterne(img): print("à compléter") #################################### # # A ce stade 18pts/22 sont traités # #################################### ################################################################# #### #### Illusion 4 : Illusion dite de Zolner #### ################################################################# # À ce stade, le sujet commence à être très long, ne vous inquiétez pas # si vous n'arrivez pas à tout faire. # # Le but de cet exercice est de produire une image semblable à # illusion4.png que vous pouvez télécharger sur le site : #@ https://svn.labri.fr/repos/CPBX/WWW/images/illusion4.png # Écrivez une fonction diagRayeeHorizontal(img,x,y) qui trace sur une image # une ligne diagonale noire (direction Sud-Est), # démarrant à la position (x,y) jusque sortir de l'image, d'épaisseur 1 pixel. # On veut que cette ligne soit barrée de lignes horizontales de longueur # 21 pixels centrées sur la ligne, tous les 15 pixels de la ligne diagonale. # On pourra ouvrir #@ https://svn.labri.fr/repos/CPBX/WWW/images/illusion4-Horizontale.png # pour comprendre le résultat attendu de diagRayeeHorizontal(img,20,10). # # Difficulté : *** (compte avec la suivante) # def diagRayeeHorizontal(img,x,y): print("à compléter") # Écrivez de même la fonction diagRayeeVertical(img,x,y) qui est définie de # la même façon mais rayée verticalement. # # Difficulté : *** (compte avec la précédente) # def diagRayeeVertical(img,x,y): print("à compléter") # Écrivez la fonction illusionZolner(img,pas) qui appelle de facon appropriée # les fonction précédentes pour produire une image comme #@ https://svn.labri.fr/repos/CPBX/WWW/images/illusion4.png # On définit le pas de cette fonction comme l'espacement entre les lignes # rayées dans l'image, dans l'illustration, il est de 50 # # Difficulté : *** # def illusionZolner(img,pas): print("à compléter") #### Question Bonus: # Reproduisez les étapes précédentes pour produire une image avec des traits # d'épaisseur 3 pixels, comme dans #@ https://svn.labri.fr/repos/CPBX/WWW/images/illusion4Epaisse.png # # Difficulté : ***** Cette question n'apporte AUCUN point # Elle est proposée aux plus rapides qui veulent relever le défi ! # # ################# # # RAPPEL: envoyer votre fichier à # paul.dorbec@u-bordeaux.fr ou # carole.blanc@u-bordeaux.fr avant 16:25 # # ###############