Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # -*- coding: cp1252 -*-
- import os
- from PIL import Image, ImageTk
- import tkinter as Tk
- import tkinter.filedialog as FD
- import time
- def importerUneImage():
- """ Charger une image """
- rep=os.getcwd
- fic=""
- root=Tk.Tk()
- root.withdraw()
- nomfichier=FD.askopenfilename(title ="Ouvrir le fichier : ",initialdir =rep,
- initialfile=fic,filetypes=[("Fichiers Image","*.jpeg;*.gif;*.jpg;*.png;*.ico")])
- root.destroy()
- # fin de l'importation de l'image
- return(nomfichier)
- def couleursPixels(nomfichier):
- " Conversion des pixels en liste de liste"
- imgPil = Image.open(nomfichier)
- pixPil=imgPil.load() # pixPil est un objet qui contient un tableau de triplets ( R, G, B ) remplace la boucle ci-aprés.
- return(pixPil,imgPil)
- def apercuImage(imgPil,titre):
- """ Mise en place de l'image dans une fenêtre """
- global fen1
- fen1.title(titre)
- w=imgPil.size[0]
- h=imgPil.size[1]
- photoPil = ImageTk.PhotoImage(imgPil)
- can1.delete(Tk.ALL)
- can1.configure(width=w,height=h)
- dessin=can1.create_image(0,0, anchor=Tk.NW, image=photoPil) # configure
- can1.photoPil=photoPil
- can1.update()
- return(photoPil,dessin)
- def Enregistrer(imgPil,nomFichier):
- rep=os.getcwd()
- nomFichier=FD.asksaveasfilename(title ="Enregistrer le fichier : ",initialdir =rep,initialfile=nomFichier,filetypes=[("Fichiers Image","*.jpeg;*.gif;*.jpg;*.png;*.ico")])
- try:
- imgPil.save(nomFichier)
- except:
- erreur=True
- return
- def photogrise(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w):
- for y in range(h):
- r,g,b=pixPil[x,y]
- color=(int((r+g+b)/3),int((r+g+b)/3),int((r+g+b)/3))
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def sepia(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w):
- for y in range(h):
- r,g,b=pixPil[x,y]
- if int((r+g+b)/3) == 155:
- color=(174,137,100)
- elif int((r+g+b)/3) < 155:
- ratio = ((r+g+b)/3)/155
- color=(int(174*ratio),int(137*ratio),int(100*ratio))
- #color=(255,255,255)
- else :
- ratio = (((r+g+b)/3) - 155)/100
- color=(int(174*ratio),int(137*ratio),int(100*ratio))
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def photonegatif(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w):
- for y in range(h):
- r,g,b=pixPil[x,y]
- color=(255-r,255-g,255-b)
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def changeGB(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w):
- for y in range(h):
- r,g,b=pixPil[x,y]
- color=(r,b,g)
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def changeRB(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w):
- for y in range(h):
- r,g,b=pixPil[x,y]
- color=(b,g,r)
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def changeRG(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w):
- for y in range(h):
- r,g,b=pixPil[x,y]
- color=(g,r,b)
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def changeR(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w):
- for y in range(h):
- r,g,b=pixPil[x,y]
- color=(r,0,0)
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def changeG(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w):
- for y in range(h):
- r,g,b=pixPil[x,y]
- color=(0,g,0)
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def changeB(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w):
- for y in range(h):
- r,g,b=pixPil[x,y]
- color=(0,0,b)
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def rot(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w):
- for y in range(h):
- color=pixPil[x,y]
- newimg.putpixel((w-x-1,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def rot90(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(h,w),"black")
- for x in range(w):
- for y in range(h):
- color=pixPil[x,y]
- newimg.putpixel((h-y-1,x),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def rot180(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w,0,-1):
- for y in range(h,0,-1):
- color=pixPil[x,y]
- newimg.putpixel((w-x,h-y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def huitcouleurs(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w):
- for y in range(h):
- r,g,b=pixPil[x,y]
- r=(r//128)*255
- g=(g//128)*255
- b=(b//128)*255
- color=(r,g,b)
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def vingtseptcouleurs(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h),"black")
- for x in range(w):
- for y in range(h):
- r,g,b=pixPil[x,y]
- r=(r//85)*127
- g=(g//85)*127
- b=(b//85)*127
- color=(r,g,b)
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def bordure(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w+60,h+60),"pink")
- for x in range(w):
- for y in range(h):
- color=pixPil[x,y]
- newimg.putpixel((x+30,y+30),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def petit(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w//2,h//2),"black")
- for x in range(0,w-1,2):
- for y in range(0,h-1,2):
- r1,g1,b1=pixPil[x,y]
- r2,g2,b2=pixPil[x+1,y+1]
- color=(int((r1+r2)/2),int((g1+g2)/2),int((b1+b2)/2))
- newimg.putpixel((x//2,y//2),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def largeurdouble(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w*2,h),"black")
- for x in range(w*2):
- for y in range(h):
- try:
- color=pixPil[x//2,y]
- newimg.putpixel((x,y),color)
- newimg.putpixel((x+1,y),color)
- except:
- color=pixPil[x//2,y]
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def hauteurdouble(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w,h*2),"black")
- for x in range(w):
- for y in range(h*2):
- try:
- color=pixPil[x,y//2]
- newimg.putpixel((x,y),color)
- newimg.putpixel((x,y+1),color)
- except:
- color=pixPil[x,y//2]
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def imgdouble(img):
- w,h=img.size
- pixPil=img.load()
- newimg= Image.new("RGB",(w*2,h*2),"black")
- for x in range(w*2):
- for y in range(h*2):
- try:
- color=pixPil[x//2,y//2]
- newimg.putpixel((x,y),color)
- newimg.putpixel((x+1,y+1),color)
- except:
- color=pixPil[x//2,y//2]
- newimg.putpixel((x,y),color)
- apercuImage(newimg,fichier)
- return(newimg)
- def autoImg():
- global fichier, pixels, img
- fichier=importerUneImage()
- pixels,img=couleursPixels(fichier)
- photo,dessin=apercuImage(img,fichier)
- time.sleep(1)
- imgGris=photogrise(img)
- photo,dessin=apercuImage(imgGris,fichier)
- time.sleep(1)
- #Enregistrer(imgGris,"gris.jpg")
- imgNegatif=photonegatif(img)
- photo,dessin=apercuImage(imgNegatif,fichier)
- time.sleep(1)
- #Enregistrer(imgNegatif,"Negatif.jpg")
- imgChangecou=changecouleur(img)
- photo,dessin=apercuImage(imgChangecou,fichier)
- time.sleep(1)
- #Enregistrer(imgChangecou,"Couleur_différente.jpg")
- imgRenverse=photorenverse(img)
- photo,dessin=apercuImage(imgRenverse,fichier)
- time.sleep(1)
- #Enregistrer(imgRenverse,"Renversé.jpg")
- img8couleurs=huitcouleurs(img)
- photo,dessin=apercuImage(img8couleurs,fichier)
- time.sleep(1)
- #Enregistrer(img8couleurs,"huit_couleurs.jpg")
- img27couleurs=vingtseptcouleurs(img)
- photo,dessin=apercuImage(img27couleurs,fichier)
- time.sleep(1)
- #Enregistrer(img27couleurs,"27_couleurs.jpg")
- imgPetit=petit(img)
- photo,dessin=apercuImage(imgPetit,fichier)
- time.sleep(1)
- #Enregistrer(imgPetit,"image_Petit.jpg")
- imgBordure=bordure(img)
- photo,dessin=apercuImage(imgBordure,fichier)
- time.sleep(1)
- #Enregistrer(imgBordure,"image_bordure.jpg")
- imglargeur2x=largeurdouble(imgPetit)
- photo,dessin=apercuImage(imglargeur2x,fichier)
- time.sleep(1)
- #Enregistrer(imglargeur2x,"image_plus_large.jpg")
- imghauteur2x=hauteurdouble(imgPetit)
- photo,dessin=apercuImage(imghauteur2x,fichier)
- time.sleep(1)
- #Enregistrer(imghauteur2x,"image_plus_haute.jpg")
- def importerImg():
- global fichier, pixels, img
- fichier=importerUneImage()
- pixels,img=couleursPixels(fichier)
- return()
- if __name__=='__main__':
- ############ programme principal ################
- fen1=Tk.Tk()
- fen1.title("Manipulation-PHOTOS")
- fen1.withdraw()
- w=300
- h=100
- can1 = Tk.Canvas(fen1, width =w, height =h)
- can1.pack(side=Tk.LEFT)
- barre_menu = Tk.Menu(fen1)
- fichier_menu = Tk.Menu(barre_menu, tearoff=0)
- fichier_menu.add_command(label='Charger fichier',command=lambda:importerImg())
- fichier_menu.add_command(label='Aperçu fichier',command=lambda:apercuImage(img,fichier))
- fichier_menu.add_command(label='Enregistrer',command=lambda:Enregistrer(img,fichier))
- fichier_menu.add_separator()
- fichier_menu.add_command(label='Demo',command=autoImg)
- fichier_menu.add_separator()
- fichier_menu.add_command(label='Quit',command=fen1.destroy)
- barre_menu.add_cascade(label='Fichiers',menu=fichier_menu)
- couleur_menu = Tk.Menu(barre_menu, tearoff=0)
- couleur_menu.add_command(label='Niveau de gris',command=lambda:photogrise(img))
- couleur_menu.add_command(label='Négatif',command=lambda:photonegatif(img))
- couleur_menu.add_command(label='Sépia',command=lambda:sepia(img))
- couleur_menu.add_command(label='8 couleurs',command=lambda:huitcouleurs(img))
- couleur_menu.add_command(label='27 couleurs',command=lambda:vingtseptcouleurs(img))
- scouleur_menu = Tk.Menu(couleur_menu, tearoff=0)
- scouleur_menu.add_command(label='Change RB',command=lambda:changeRB(img))
- scouleur_menu.add_command(label='Change GB',command=lambda:changeGB(img))
- scouleur_menu.add_command(label='Change RG',command=lambda:changeRG(img))
- compo_menu = Tk.Menu(couleur_menu, tearoff=0)
- compo_menu.add_command(label='Rouge',command=lambda:changeR(img))
- compo_menu.add_command(label='Vert',command=lambda:changeG(img))
- compo_menu.add_command(label='Bleu',command=lambda:changeB(img))
- barre_menu.add_cascade(label='Couleurs', menu=couleur_menu)
- couleur_menu.add_cascade(label='Echanger couleurs', menu=scouleur_menu)
- couleur_menu.add_cascade(label='Composantes', menu=compo_menu)
- redi_menu = Tk.Menu(barre_menu, tearoff=0)
- redi_menu.add_command(label='Double L', command=lambda:largeurdouble(img))
- redi_menu.add_command(label='Double H', command=lambda:hauteurdouble(img))
- redi_menu.add_command(label='Double Img', command=lambda:imgdouble(img))
- redi_menu.add_command(label='Petit Img', command=lambda:petit(img))
- barre_menu.add_cascade(label='Redimensionner', menu=redi_menu)
- rot_menu = Tk.Menu(barre_menu, tearoff=0)
- rot_menu.add_command(label='Rotation GD', command=lambda:rot(img))
- rot_menu.add_command(label='Rotation 90°', command=lambda:rot90(img))
- rot_menu.add_command(label='Rotation 180°', command=lambda:rot180(img))
- barre_menu.add_cascade(label='Rotation', menu=rot_menu)
- fen1.deiconify()
- fen1.config(menu=barre_menu)
- fen1.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement