Commit ab80188f authored by Abdessamad Akabli's avatar Abdessamad Akabli

- Les modifications effectuées sur les images se font désormais sur une copie...

- Les modifications effectuées sur les images se font désormais sur une copie l'image_modele() à chaque fois.
- Améliorations sur la fonction save() et save2() => [Pouvoir sauvegarder à chaque modification sur l'image]
parent fb305883
...@@ -8,6 +8,8 @@ from PIL import Image,ImageTk ...@@ -8,6 +8,8 @@ from PIL import Image,ImageTk
import os import os
import tkinter as tk import tkinter as tk
# Variables globales
image_modele = None image_modele = None
chemin_image = None chemin_image = None
image = None image = None
...@@ -15,6 +17,7 @@ quitter = 0 ...@@ -15,6 +17,7 @@ quitter = 0
revenir_menu_principal = 0 revenir_menu_principal = 0
photo = None photo = None
root = None root = None
image_modifie = None
#Fonction qui va chercher l'image et l'ouvrir ( Avec chemin d'accès absolu ou relatif ) #Fonction qui va chercher l'image et l'ouvrir ( Avec chemin d'accès absolu ou relatif )
def ouvrir_image(): def ouvrir_image():
...@@ -50,6 +53,7 @@ def afficher_image(): ...@@ -50,6 +53,7 @@ def afficher_image():
fen.title("Traitement de l'image") fen.title("Traitement de l'image")
tk.Label(fen, text="Un problème est survenu, nous ne pouvons pas ouvrir cette image !").pack() tk.Label(fen, text="Un problème est survenu, nous ne pouvons pas ouvrir cette image !").pack()
else: else:
global image
image_modele.show() image_modele.show()
...@@ -67,6 +71,7 @@ def montrer_image(image): ...@@ -67,6 +71,7 @@ def montrer_image(image):
def afficher_infos_image(): def afficher_infos_image():
global chemin_image global chemin_image
varA = *image.size, varA = *image.size,
root = tk.Tk() root = tk.Tk()
root.title("Traitement de l'image") root.title("Traitement de l'image")
...@@ -79,67 +84,88 @@ def afficher_infos_image(): ...@@ -79,67 +84,88 @@ def afficher_infos_image():
#Fonction qui va inverser la couleur pour chaque pixel ( Boucles ? // Créer la fonction et ne pas se baser sur celles déjà existante ) #Fonction qui va inverser la couleur pour chaque pixel ( Boucles ? // Créer la fonction et ne pas se baser sur celles déjà existante )
def negatif_couleur(): def negatif_couleur():
global image_modifie
image_negatif = image_modele.copy()
(largeur, hauteur)= image.size (largeur, hauteur)= image.size
for x in range(largeur): for x in range(largeur):
for y in range(hauteur): for y in range(hauteur):
(rouge,vert,bleu) = image.getpixel((x,y)) (rouge,vert,bleu) = image_negatif.getpixel((x,y))
(rouge,vert,bleu) = (255-rouge,255-vert,255-bleu) (rouge,vert,bleu) = (255-rouge,255-vert,255-bleu)
image.putpixel((x,y),(rouge,vert,bleu)) image_negatif.putpixel((x,y),(rouge,vert,bleu))
image.show() image_negatif.show()
image_modifie = image_negatif.copy()
#Fonction qui va faire pivoter l'ensemble de l'image (RGB->RBG // RGB->BGR // RGB->GBR // RBG->GRB) #Fonction qui va faire pivoter l'ensemble de l'image (RGB->RBG // RGB->BGR // RGB->GBR // RBG->GRB)
def rotation_couleurs(): def rotation_couleurs():
global image_modele
(largeur, hauteur)= image.size (largeur, hauteur)= image.size
def rgb(): def rgb():
image.show() global image_modifie
image_modele.show()
image_modifie = image_modele.copy()
def bgr(): def bgr():
global image_modifie
image_bgr = image_modele.copy()
for x in range(largeur): #Parcourir la largeur de l'image for x in range(largeur): #Parcourir la largeur de l'image
for y in range(hauteur):#Parcourir la longueur de l'image for y in range(hauteur):#Parcourir la longueur de l'image
(rouge,vert,bleu) = image.getpixel((x,y)) #Récupérer les pixels (x,y) et les stocker dans une liste (rouge,vert,bleu) = image_bgr.getpixel((x,y)) #Récupérer les pixels (x,y) et les stocker dans une liste
(rouge,vert,bleu) = (bleu,vert,rouge) (rouge,vert,bleu) = (bleu,vert,rouge)
image.putpixel((x,y),(rouge,vert,bleu)) image_bgr.putpixel((x,y),(rouge,vert,bleu))
image.show() image_bgr.show()
image_modifie = image_bgr.copy()
def grb(): def grb():
global image_modifie
image_grb = image_modele.copy()
for x in range(largeur): for x in range(largeur):
for y in range(hauteur): for y in range(hauteur):
(rouge,vert,bleu) = image.getpixel((x,y)) (rouge,vert,bleu) = image_grb.getpixel((x,y))
(rouge,vert,bleu) = (vert,bleu,rouge) (rouge,vert,bleu) = (vert,rouge,bleu)
image.putpixel((x,y),(rouge,vert,bleu)) image_grb.putpixel((x,y),(rouge,vert,bleu))
image.show() image_grb.show()
image_modifie = image_grb.copy()
def gbr(): def gbr():
global image_modifie
image_gbr = image_modele.copy()
for x in range(largeur): for x in range(largeur):
for y in range(hauteur): for y in range(hauteur):
(rouge,vert,bleu) = image.getpixel((x,y)) (rouge,vert,bleu) = image_gbr.getpixel((x,y))
(rouge,vert,bleu) = (vert,bleu,rouge) (rouge,vert,bleu) = (vert,bleu,rouge)
image.putpixel((x,y),(rouge,vert,bleu)) image_gbr.putpixel((x,y),(rouge,vert,bleu))
image.show() image_gbr.show()
image_modifie = image_gbr.copy()
root = tk.Tk() root = tk.Tk()
root.title("Traitement de l'image") root.title("Traitement de l'image")
tk.Label(root, text="Quel mode de rotation colorimétrique voulez-vous ?").pack() tk.Label(root, text="Quel mode de rotation colorimétrique voulez-vous ?").pack()
tk.Button(root, text=" - RGB - Rotation RGB->RBG", command = rgb).pack() tk.Button(root, text=" - RBG - Rotation RGB->RBG", command = rgb).pack()
tk.Button(root, text=" - BGR - Rotation RGB->BGR", command = bgr).pack() tk.Button(root, text=" - BGR - Rotation RGB->BGR", command = bgr).pack()
tk.Button(root, text=" - GBR - Rotation RGB->GBR", command = grb).pack()
tk.Button(root, text=" - GRB - Rotation RGB->GRB", command = grb).pack() tk.Button(root, text=" - GRB - Rotation RGB->GRB", command = grb).pack()
tk.Button(root, text=" - GBR - Rotation RGB->GBR", command = gbr).pack()
tk.Button(root, text="Retour",fg = "red", command = root.destroy).pack() tk.Button(root, text="Retour",fg = "red", command = root.destroy).pack()
#Fonction qui va faire pivoter l'ensemble de l'image (-90°,90° et 180° et choix) #Fonction qui va faire pivoter l'ensemble de l'image (-90°,90° et 180° et choix)
def rotation_image(): def rotation_image():
def plus90(): global image
image_modifie = image_modele.copy()
def plus90():
image = image_modele.copy()
global image_modifie
angle = 90 angle = 90
image2 = image.rotate(angle) image_modifie = image.rotate(angle, Image.BICUBIC, True)
image2.show() image_modifie.show()
fen = tk.Tk() fen = tk.Tk()
fen.title("Traitement de l'image") fen.title("Traitement de l'image")
tk.Label(fen, text="Voulez vous sauvegarder cette image ?").pack() tk.Label(fen, text="Voulez vous sauvegarder cette image ?").pack()
tk.Button(fen, text="Oui", command = save2).pack() tk.Button(fen, text="Oui", command = save2).pack()
def moins90(): def moins90():
image = image_modele.copy()
global image_modifie
angle = -90 angle = -90
image2 = image.rotate(angle) image_modifie = image.rotate(angle, Image.BICUBIC, True)
image2.show() image_modifie.show()
fen = tk.Tk() fen = tk.Tk()
fen.title("Traitement de l'image") fen.title("Traitement de l'image")
tk.Label(fen, text="Voulez vous sauvegarder cette image ?").pack() tk.Label(fen, text="Voulez vous sauvegarder cette image ?").pack()
...@@ -147,25 +173,31 @@ def rotation_image(): ...@@ -147,25 +173,31 @@ def rotation_image():
def plus180(): def plus180():
image = image_modele.copy()
global image_modifie
angle = 180 angle = 180
image2 = image.rotate(angle) image_modifie = image.rotate(angle, Image.BICUBIC, True)
image2.show() image_modifie.show()
fen = tk.Tk() fen = tk.Tk()
fen.title("Traitement de l'image") fen.title("Traitement de l'image")
tk.Label(fen, text="Voulez vous sauvegarder cette image ?").pack() tk.Label(fen, text="Voulez vous sauvegarder cette image ?").pack()
tk.Button(fen, text="Oui",fg="blue", command = save2).pack() tk.Button(fen, text="Oui",fg="blue", command = save2).pack()
def angle_choix(): def angle_choix():
image = image_modele.copy()
def test(): def test():
global image_modifie
global image global image
global angle_image global angle_image
angle_image = int(str(angle_image.get())) angle_image = int(str(angle_image.get()))
angle_adapte = angle_image % 360.0 angle_adapte = angle_image % 360.0
image_angle_choix = image.rotate(angle_adapte) image_angle_choix = image.rotate(angle_adapte, Image.BICUBIC, True)
image_angle_choix.show() image_angle_choix.show()
image_modifie = image_angle_choix.copy()
global image
global angle_image global angle_image
global image_modifie
fen2 = tk.Tk() fen2 = tk.Tk()
fen2.title("Traitement de l'image") fen2.title("Traitement de l'image")
tk.Label(fen2, text="Donnez l'angle").pack() tk.Label(fen2, text="Donnez l'angle").pack()
...@@ -192,13 +224,21 @@ def rotation_image(): ...@@ -192,13 +224,21 @@ def rotation_image():
root.mainloop() root.mainloop()
#Fonction qui permet de définir la direction de rotation physique (Gauche, droite, retourner b ) #Fonction qui permet de définir la direction de rotation physique (Gauche, droite, retourner b )
def symetrie_image(): def symetrie_image():
global image
def symetrieV(): def symetrieV():
SymétrieV = image.transpose(Image.FLIP_LEFT_RIGHT) global image_modifie
SymétrieV.show() image = image_modele.copy()
SymetrieV = image.transpose(Image.FLIP_LEFT_RIGHT)
SymetrieV.show()
image_modifie = SymetrieV.copy()
def symetrieH(): def symetrieH():
SymétrieH = image.transpose(Image.FLIP_TOP_BOTTOM) global image_modifie
SymétrieH.show() image = image_modele.copy()
SymetrieH = image.transpose(Image.FLIP_TOP_BOTTOM)
SymetrieH.show()
image_modifie = SymetrieH.copy()
root = tk.Tk() root = tk.Tk()
tk.Label(root, text="Selon quel axe voulez-vous effectuer la symétrie ?").pack() tk.Label(root, text="Selon quel axe voulez-vous effectuer la symétrie ?").pack()
frame=tk.Frame(root) frame=tk.Frame(root)
...@@ -214,11 +254,11 @@ def symetrie_image(): ...@@ -214,11 +254,11 @@ def symetrie_image():
def save2(): def save2():
def sauvegarde(): def sauvegarde():
nom_image = input_utilisateur.get() nom_image = input_utilisateur.get()
image3.save(nom_image) #problème image_save.save(nom_image) #problème
tk.Label(fen, text="Votre sauvegarde s'est effectuée avec succès !", fg = "green").pack() tk.Label(fen, text="Votre sauvegarde s'est effectuée avec succès !", fg = "green").pack()
tk.Button(fen, text="Quitter", fg = "red", command = fen.destroy).pack() tk.Button(fen, text="Quitter", fg = "red", command = fen.destroy).pack()
global image2 global image_modifie
image3 = image2 image_save = image_modifie.copy()
fen = tk.Tk() fen = tk.Tk()
fen.title("Traitement de l'image") fen.title("Traitement de l'image")
label = tk.Label(fen, text="Entrez le nom du fichier") label = tk.Label(fen, text="Entrez le nom du fichier")
...@@ -231,11 +271,11 @@ def save2(): ...@@ -231,11 +271,11 @@ def save2():
def save(): def save():
def sauvegarde(): def sauvegarde():
nom_image = input_utilisateur.get() nom_image = input_utilisateur.get()
image2.save(nom_image) #problème image_save.save(nom_image) #problème
tk.Label(fen, text="Votre sauvegarde s'est effectuée avec succès !", fg = "green").pack() tk.Label(fen, text="Votre sauvegarde s'est effectuée avec succès !", fg = "green").pack()
tk.Button(fen, text="Quitter", fg = "red", command = fen.destroy).pack() tk.Button(fen, text="Quitter", fg = "red", command = fen.destroy).pack()
global image global image
image2 = image image_save = image_modifie.copy()
fen = tk.Tk() fen = tk.Tk()
fen.title("Traitement de l'image") fen.title("Traitement de l'image")
label = tk.Label(fen, text="Entrez le nom du fichier") label = tk.Label(fen, text="Entrez le nom du fichier")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment