Toujours à l’aide de la bibliothèque PIL nous allons réaliser une succession d’images sous forme de fondu-dégradé entre deux images de départs.
Votre fonction devra donc pour chaque pixel prendre 10% de la 2ème image et 90% de la 1ère puis 20% de la 2ième image et 80% de la 1ère et ainsi de suite jusqu’à obtenir 100% de la 2ième image et 0% de la 1ère image.
Un exemple : A partir des images de la chenille et du papillon obtenir tous les fondu-dégradés intermédiaires :
Exercice 1 : Ecrivez la fonction fondu du script suivant et testez votre programme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#-*- coding:Latin-1 -*- # PIL (Python Imaging Library) est une bibliothèque pour la manipulation des images from PIL import Image #============================================================ def fondu(Pix1,Pix2,Largeur,Hauteur,alpha): """Retourne une liste de Pixels sous forme de tuple (R,V,B) obtenus à partir de ceux des deux images à hauteur de alpha % de la deuxième""" newPix=[] # # # # # # # return newPix #============================================================ # L'image a 3 composantes : RGB im1 = Image.open("chenille.jpg") w1,h1=im1.size im2 = Image.open("papillon.jpg") w2,h2=im2.size if w1!= w2 or h1!=h2 : print("Images de dimensions différentes") else : #transformation des images en liste de pixels sous forme de tuple (R,V,B) ListePixels1=list(im1.getdata()) ListePixels2=list(im2.getdata()) #créer une image RGB de même dimensions par défaut noire ImagePixels=Image.new('RGB',(w1,h1)) for n in range(10): ListePixels=fondu(ListePixels1,ListePixels2,w1,h1,n/10) ImagePixels.putdata(ListePixels) ImagePixels.save("Fondu-degrad"+str(n+1)+".jpg") im1.close() im2.close() ImagePixels.close() |
Autre approche : le fondu-dégradé de deux images dans un logiciel comme Photoshop ou GIMP est souvent progressif sur une direction x ou y dans la seule image résultante. C’est à dire que dans une direction donnée, y par exemple, on a sur les 30% des premières lignes 100% de l’image 1 et 0% de l’image 2, sur les 40% de lignes suivantes on a un dégradé progressif conduisant sur les 30% de lignes restantes à 0% de l’image 1 et 100% de l’image 2.
Exercice 2 : Modifiez votre fonction fondu pour réaliser ces effets.
Selon la direction y | Selon la direction x |
Exercice 3 : Améliorez vos programmes pour que l’utilisateur puisse choisir les deux images à travers des boîtes de dialogues.