# Créé par Bibi, le 21/12/2017 en Python 3.4.5 # module de traitement d'image basique # implémentation d'une fenêtre graphique import os import numpy as np from PIL import Image as Img from PIL import ImageTk as Itk from tkinter import * import tkinter.messagebox import tkinter.filedialog as fd # Liste des traitements ------------------------------- def negatif(): """ transforme l'image en négatif """ nl,nc = tab.shape # récupération des dimensions de l'image for i in range(0,nl): for j in range(0,nc): tab[i][j]=255-tab[i][j] # application du changement de valeur du pixel def miroirHorizontal(): """ retourne l'image horizontalement """ nl,nc = tab.shape # récupération des dimensions de l'image for i in range(0,nl): for j in range(0,int(nc/2)): # permutation horizontale temp = tab[i][j] tab[i][j]=tab[i][nc-j-1] tab[i][nc-j-1]=temp def miroirVertical(): """ retourne l'image verticalement """ nl,nc = tab.shape # récupération des dimensions de l'image for i in range(0,nc): for j in range(0,int(nl/2)): # permutation verticale temp = tab[j][i] tab[j][i]=tab[nl-j-1][i] tab[nl-j-1][i]=temp def assombri(): """ retourne l'image assombri de 50 pour les pixels > 150 """ nl,nc = tab.shape # récupération des dimensions de l'image for i in range(0,nl): for j in range(0,nc): # si pixel > 50 alors pixel = pixel -50 if tab[i][j]>50:tab[i][j]=tab[i][j]-50 def eclairci(): """ retourne l'image eclairci de 50 pour les pixels < 100 """ nl,nc = tab.shape # récupération des dimensions de l'image for i in range(0,nl): for j in range(0,nc): # si pixel < 250 alors pixel = pixel+250 if tab[i][j]<250:tab[i][j]=tab[i][j]+50 # Gestion des actions des boutons ------------------------- def ouvrirImage(): """ méthode d'ouverture du fichier à traiter transforme l'image en un tableau de type numpy.array pour les traitements """ cnv.delete(ALL) # effacement de la zone de canevas cheminImage=fd.askopenfile(title="Ouvrir une image",filetypes=[("all files",".*")]) # ouverture de l'image img = Img.open(cheminImage.name[2:len(cheminImage.name)]) # conversion de l'image en numpy.array pour traitements tab=np.array(img) # Gestion du canevas pour affichage de l'image photo=Itk.PhotoImage(file=cheminImage.name[2:len(cheminImage.name)]) cnv.create_image(0,0,anchor=NW,image=photo) cnv.config(height=img.height,width=img.width) fen1.title("Image "+str(img.width)+" x "+str(img.height)) def enregistrerImage(): """ méthode d'enregistrement du fichier produit """ print("Méthode non encore implémentée") # Corps du programme -------------------------------------- fen1 = Tk() # Déclaration de la fenêtre barreDeMenu=Menu(fen1) # Déclaration de la barre de menu # Description du menu Fichier menuFichier=Menu(barreDeMenu,tearoff=0) menuFichier.add_command(label="Ouvrir une image",command=ouvrirImage) menuFichier.add_command(label="Enregistrer l'image",command=enregistrerImage) menuFichier.add_separator() menuFichier.add_command(label="Quitter",command=fen1.destroy) barreDeMenu.add_cascade(label="Fichier",menu=menuFichier) # Description du menu Traitements menuTraitements=Menu(barreDeMenu,tearoff=0) menuTraitements.add_command(label="Négatif",command=negatif) menuTraitements.add_command(label="Miroir horizontal",command=miroirHorizontal) menuTraitements.add_command(label="Miroir vertical",command=miroirVertical) menuTraitements.add_command(label="Assombir",command=assombri) menuTraitements.add_command(label="Eclaircir",command=eclairci) barreDeMenu.add_cascade(label="Traitements",menu=menuTraitements) # Affichage du menu fen1.config(menu=barreDeMenu) # Création du widget Canevas cnv=Canvas(fen1) cnv.pack(padx=5,pady=5) fen1.mainloop() # Affichage de la fenêtre