Correction de l'activité AndyWarhol
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Nom du programme : Traitement d'image à la manière d'Andy Warhol
# Version : Version Python
#
# Auteur: Bertrand Yann
# date de création : Mardi 12 mars 2019
#-------------------------------------------------------------------------------
from PIL import Image #Importe le module Image de la bibliothèque PIL
def CreationImage(image0): # Création de la fonction qui permet de créer l'image demandée
dimx = image0.size[0] # largeur de l'image
dimy = image0.size[1] # hauteur de l'image
image1 = Image.new('RGB', (3*dimx, 4*dimy), (0, 0, 0)) # Création d'une nouvelle image 3 fois plus large et 4 fois plus haute
for i in range(dimx): # parcours des deux dimensions pour modifier chaque pixel
for j in range(dimy):
r, v, b = image0.getpixel((i, j)) # On récupère la couleur du pixel (i,j) sous la forme d'un tuple (r, g, b)
image1.putpixel((i, j), (r,v,b)) # On recopie cette image dans le coin en haut à gauche
image1.putpixel((dimx+i, j), (b,r,v)) #Etape 2 : permutation de (r,v,b)
image1.putpixel((2*dimx+i, j), (v,b,r)) #Etape 3 : permutation de (r,v,b)
image1.putpixel((i, dimy+j), (255-r,255-v,255-b)) #Etape 4 : passage au négatif de l'image
#Etape 5 : elle représente l'image en niveaux de gris en faisant la moyenne des composantes (r,v,b) de l'image initiale
g=int((r+v+b)/3)
image1.putpixel((dimx+i, dimy+j), (g,g,g))
image1.putpixel((2*dimx+i, dimy+j), (255-g,255-g,255-g)) #Etape 6 : passage au négatif de l'image de l'étape 5
image1.putpixel((i, 2*dimy+j), (r,v,0)) # Etape 7 : image initiale en supprimant la composante bleue.
image1.putpixel((dimx+i, 2*dimy+j), (0,v,b)) # Etape 8 :image initiale en supprimant la composante rouge
image1.putpixel((2*dimx+i, 2*dimy+j), (r,0,b)) # Etape 9 :image initiale en supprimant la composante verte
image1.putpixel((i, 3*dimy+j), (r,0,0)) # Etape 10 :image initiale en supprimant la composante bleue et verte.
image1.putpixel((dimx+i, 3*dimy+j), (0,v,0)) #Etape 11 :image initiale en supprimant la composante rouge et bleue
image1.putpixel((2*dimx+i, 3*dimy+j), (0,0,b)) #Etape 12 :image initiale en supprimant la composante rouge et verte
return image1
image_initiale = "Femme.jpg"
image_ini = Image.open(image_initiale) # Ouverture du fichier image source et création de l'objet Image
image_finale = CreationImage(image_ini) # On crée l'image
image_finale.save("Etape2.jpg") # on sauvegarde sous un autre nom
image_finale.show()