Advertisement
Alex_isaac

TP - Menu édition image

Mar 6th, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 13.47 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: cp1252 -*-
  3.  
  4. import os
  5. from PIL import Image, ImageTk
  6. import  tkinter as Tk
  7. import tkinter.filedialog as FD
  8. import time
  9.  
  10.  
  11. def importerUneImage():
  12.     """ Charger une image """
  13.     rep=os.getcwd
  14.     fic=""
  15.     root=Tk.Tk()
  16.     root.withdraw()
  17.     nomfichier=FD.askopenfilename(title ="Ouvrir le fichier : ",initialdir =rep,
  18.                 initialfile=fic,filetypes=[("Fichiers Image","*.jpeg;*.gif;*.jpg;*.png;*.ico")])
  19.     root.destroy()
  20.     # fin de l'importation de l'image
  21.     return(nomfichier)
  22.  
  23. def couleursPixels(nomfichier):
  24.     " Conversion des pixels en liste de liste"
  25.     imgPil = Image.open(nomfichier)
  26.     pixPil=imgPil.load()                          # pixPil est un objet qui contient un tableau de triplets ( R, G, B ) remplace la boucle ci-aprés.
  27.     return(pixPil,imgPil)    
  28.  
  29.  
  30. def apercuImage(imgPil,titre):
  31.     """ Mise en place de l'image dans une fenêtre  """
  32.     global fen1
  33.     fen1.title(titre)
  34.     w=imgPil.size[0]
  35.     h=imgPil.size[1]
  36.     photoPil = ImageTk.PhotoImage(imgPil)
  37.     can1.delete(Tk.ALL)
  38.     can1.configure(width=w,height=h)
  39.     dessin=can1.create_image(0,0, anchor=Tk.NW, image=photoPil)     # configure  
  40.     can1.photoPil=photoPil
  41.     can1.update()
  42.    
  43.     return(photoPil,dessin)
  44.  
  45. def Enregistrer(imgPil,nomFichier):
  46.     rep=os.getcwd()
  47.     nomFichier=FD.asksaveasfilename(title ="Enregistrer le fichier : ",initialdir =rep,initialfile=nomFichier,filetypes=[("Fichiers Image","*.jpeg;*.gif;*.jpg;*.png;*.ico")])
  48.     try:
  49.         imgPil.save(nomFichier)
  50.     except:
  51.         erreur=True
  52.     return
  53.  
  54. def photogrise(img):
  55.     w,h=img.size
  56.     pixPil=img.load()
  57.     newimg= Image.new("RGB",(w,h),"black")
  58.    
  59.     for x in range(w):
  60.         for y in range(h):
  61.             r,g,b=pixPil[x,y]
  62.             color=(int((r+g+b)/3),int((r+g+b)/3),int((r+g+b)/3))
  63.             newimg.putpixel((x,y),color)
  64.     apercuImage(newimg,fichier)
  65.     return(newimg)
  66.  
  67. def sepia(img):
  68.     w,h=img.size
  69.     pixPil=img.load()
  70.     newimg= Image.new("RGB",(w,h),"black")
  71.     for x in range(w):
  72.         for y in range(h):
  73.             r,g,b=pixPil[x,y]
  74.             if int((r+g+b)/3) == 155:
  75.                 color=(174,137,100)
  76.             elif int((r+g+b)/3) < 155:
  77.                 ratio = ((r+g+b)/3)/155
  78.                 color=(int(174*ratio),int(137*ratio),int(100*ratio))
  79.                 #color=(255,255,255)
  80.             else :
  81.                 ratio = (((r+g+b)/3) - 155)/100
  82.                 color=(int(174*ratio),int(137*ratio),int(100*ratio))
  83.             newimg.putpixel((x,y),color)
  84.     apercuImage(newimg,fichier)
  85.     return(newimg)
  86.  
  87. def photonegatif(img):
  88.     w,h=img.size
  89.     pixPil=img.load()
  90.     newimg= Image.new("RGB",(w,h),"black")
  91.    
  92.     for x in range(w):
  93.         for y in range(h):
  94.             r,g,b=pixPil[x,y]
  95.             color=(255-r,255-g,255-b)
  96.             newimg.putpixel((x,y),color)
  97.     apercuImage(newimg,fichier)        
  98.     return(newimg)
  99.  
  100. def changeGB(img):
  101.     w,h=img.size
  102.     pixPil=img.load()
  103.     newimg= Image.new("RGB",(w,h),"black")
  104.    
  105.     for x in range(w):
  106.         for y in range(h):
  107.             r,g,b=pixPil[x,y]
  108.             color=(r,b,g)
  109.             newimg.putpixel((x,y),color)
  110.     apercuImage(newimg,fichier)      
  111.     return(newimg)
  112.  
  113. def changeRB(img):
  114.     w,h=img.size
  115.     pixPil=img.load()
  116.     newimg= Image.new("RGB",(w,h),"black")
  117.    
  118.     for x in range(w):
  119.         for y in range(h):
  120.             r,g,b=pixPil[x,y]
  121.             color=(b,g,r)
  122.             newimg.putpixel((x,y),color)
  123.     apercuImage(newimg,fichier)      
  124.     return(newimg)
  125.  
  126. def changeRG(img):
  127.     w,h=img.size
  128.     pixPil=img.load()
  129.     newimg= Image.new("RGB",(w,h),"black")
  130.    
  131.     for x in range(w):
  132.         for y in range(h):
  133.             r,g,b=pixPil[x,y]
  134.             color=(g,r,b)
  135.             newimg.putpixel((x,y),color)
  136.     apercuImage(newimg,fichier)      
  137.     return(newimg)
  138.  
  139. def changeR(img):
  140.     w,h=img.size
  141.     pixPil=img.load()
  142.     newimg= Image.new("RGB",(w,h),"black")
  143.    
  144.     for x in range(w):
  145.         for y in range(h):
  146.             r,g,b=pixPil[x,y]
  147.             color=(r,0,0)
  148.             newimg.putpixel((x,y),color)
  149.     apercuImage(newimg,fichier)      
  150.     return(newimg)
  151.  
  152. def changeG(img):
  153.     w,h=img.size
  154.     pixPil=img.load()
  155.     newimg= Image.new("RGB",(w,h),"black")
  156.    
  157.     for x in range(w):
  158.         for y in range(h):
  159.             r,g,b=pixPil[x,y]
  160.             color=(0,g,0)
  161.             newimg.putpixel((x,y),color)
  162.     apercuImage(newimg,fichier)      
  163.     return(newimg)
  164.  
  165. def changeB(img):
  166.     w,h=img.size
  167.     pixPil=img.load()
  168.     newimg= Image.new("RGB",(w,h),"black")
  169.    
  170.     for x in range(w):
  171.         for y in range(h):
  172.             r,g,b=pixPil[x,y]
  173.             color=(0,0,b)
  174.             newimg.putpixel((x,y),color)
  175.     apercuImage(newimg,fichier)      
  176.     return(newimg)
  177.  
  178. def rot(img):
  179.     w,h=img.size
  180.     pixPil=img.load()
  181.     newimg= Image.new("RGB",(w,h),"black")
  182.    
  183.     for x in range(w):
  184.         for y in range(h):
  185.             color=pixPil[x,y]
  186.             newimg.putpixel((w-x-1,y),color)
  187.     apercuImage(newimg,fichier)        
  188.     return(newimg)
  189.  
  190. def rot90(img):
  191.     w,h=img.size
  192.     pixPil=img.load()
  193.     newimg= Image.new("RGB",(h,w),"black")
  194.    
  195.     for x in range(w):
  196.         for y in range(h):
  197.             color=pixPil[x,y]
  198.             newimg.putpixel((h-y-1,x),color)
  199.     apercuImage(newimg,fichier)
  200.     return(newimg)    
  201.  
  202. def rot180(img):
  203.     w,h=img.size
  204.     pixPil=img.load()
  205.     newimg= Image.new("RGB",(w,h),"black")
  206.    
  207.     for x in range(w,0,-1):
  208.         for y in range(h,0,-1):
  209.             color=pixPil[x,y]
  210.             newimg.putpixel((w-x,h-y),color)
  211.     apercuImage(newimg,fichier)
  212.     return(newimg)
  213.  
  214. def huitcouleurs(img):
  215.     w,h=img.size
  216.     pixPil=img.load()
  217.     newimg= Image.new("RGB",(w,h),"black")
  218.    
  219.     for x in range(w):
  220.         for y in range(h):
  221.             r,g,b=pixPil[x,y]
  222.             r=(r//128)*255
  223.             g=(g//128)*255
  224.             b=(b//128)*255
  225.             color=(r,g,b)
  226.             newimg.putpixel((x,y),color)
  227.     apercuImage(newimg,fichier)        
  228.     return(newimg)
  229.  
  230. def vingtseptcouleurs(img):
  231.     w,h=img.size
  232.     pixPil=img.load()
  233.     newimg= Image.new("RGB",(w,h),"black")
  234.    
  235.     for x in range(w):
  236.         for y in range(h):
  237.             r,g,b=pixPil[x,y]
  238.             r=(r//85)*127
  239.             g=(g//85)*127
  240.             b=(b//85)*127
  241.             color=(r,g,b)
  242.             newimg.putpixel((x,y),color)
  243.     apercuImage(newimg,fichier)        
  244.     return(newimg)
  245.  
  246. def bordure(img):
  247.     w,h=img.size
  248.     pixPil=img.load()
  249.     newimg= Image.new("RGB",(w+60,h+60),"pink")
  250.    
  251.     for x in range(w):
  252.         for y in range(h):
  253.             color=pixPil[x,y]
  254.             newimg.putpixel((x+30,y+30),color)
  255.     apercuImage(newimg,fichier)        
  256.     return(newimg)
  257.  
  258. def petit(img):
  259.     w,h=img.size
  260.     pixPil=img.load()
  261.     newimg= Image.new("RGB",(w//2,h//2),"black")
  262.    
  263.     for x in range(0,w-1,2):
  264.         for y in range(0,h-1,2):
  265.             r1,g1,b1=pixPil[x,y]
  266.             r2,g2,b2=pixPil[x+1,y+1]
  267.             color=(int((r1+r2)/2),int((g1+g2)/2),int((b1+b2)/2))
  268.             newimg.putpixel((x//2,y//2),color)
  269.     apercuImage(newimg,fichier)        
  270.     return(newimg)
  271.  
  272. def largeurdouble(img):
  273.     w,h=img.size
  274.     pixPil=img.load()
  275.     newimg= Image.new("RGB",(w*2,h),"black")
  276.    
  277.     for x in range(w*2):
  278.         for y in range(h):
  279.             try:
  280.                 color=pixPil[x//2,y]
  281.                 newimg.putpixel((x,y),color)
  282.                 newimg.putpixel((x+1,y),color)
  283.             except:
  284.                 color=pixPil[x//2,y]
  285.                 newimg.putpixel((x,y),color)
  286.                
  287.     apercuImage(newimg,fichier)
  288.     return(newimg)
  289.  
  290. def hauteurdouble(img):
  291.     w,h=img.size
  292.     pixPil=img.load()
  293.     newimg= Image.new("RGB",(w,h*2),"black")
  294.    
  295.     for x in range(w):
  296.         for y in range(h*2):
  297.             try:
  298.                 color=pixPil[x,y//2]
  299.                 newimg.putpixel((x,y),color)
  300.                 newimg.putpixel((x,y+1),color)
  301.             except:
  302.                 color=pixPil[x,y//2]
  303.                 newimg.putpixel((x,y),color)
  304.                
  305.     apercuImage(newimg,fichier)
  306.     return(newimg)
  307.  
  308. def imgdouble(img):
  309.     w,h=img.size
  310.     pixPil=img.load()
  311.     newimg= Image.new("RGB",(w*2,h*2),"black")
  312.    
  313.     for x in range(w*2):
  314.         for y in range(h*2):
  315.             try:
  316.                 color=pixPil[x//2,y//2]
  317.                 newimg.putpixel((x,y),color)
  318.                 newimg.putpixel((x+1,y+1),color)
  319.             except:
  320.                 color=pixPil[x//2,y//2]
  321.                 newimg.putpixel((x,y),color)
  322.                
  323.     apercuImage(newimg,fichier)
  324.     return(newimg)
  325.  
  326. def autoImg():
  327.     global fichier, pixels, img
  328.     fichier=importerUneImage()
  329.     pixels,img=couleursPixels(fichier)
  330.     photo,dessin=apercuImage(img,fichier)
  331.     time.sleep(1)
  332.  
  333.     imgGris=photogrise(img)
  334.     photo,dessin=apercuImage(imgGris,fichier)
  335.     time.sleep(1)
  336.     #Enregistrer(imgGris,"gris.jpg")
  337.  
  338.     imgNegatif=photonegatif(img)
  339.     photo,dessin=apercuImage(imgNegatif,fichier)
  340.     time.sleep(1)
  341.     #Enregistrer(imgNegatif,"Negatif.jpg")
  342.  
  343.     imgChangecou=changecouleur(img)
  344.     photo,dessin=apercuImage(imgChangecou,fichier)
  345.     time.sleep(1)
  346.     #Enregistrer(imgChangecou,"Couleur_différente.jpg")
  347.  
  348.     imgRenverse=photorenverse(img)
  349.     photo,dessin=apercuImage(imgRenverse,fichier)
  350.     time.sleep(1)
  351.     #Enregistrer(imgRenverse,"Renversé.jpg")
  352.  
  353.     img8couleurs=huitcouleurs(img)
  354.     photo,dessin=apercuImage(img8couleurs,fichier)
  355.     time.sleep(1)
  356.     #Enregistrer(img8couleurs,"huit_couleurs.jpg")
  357.  
  358.     img27couleurs=vingtseptcouleurs(img)
  359.     photo,dessin=apercuImage(img27couleurs,fichier)
  360.     time.sleep(1)
  361.     #Enregistrer(img27couleurs,"27_couleurs.jpg")
  362.  
  363.     imgPetit=petit(img)
  364.     photo,dessin=apercuImage(imgPetit,fichier)
  365.     time.sleep(1)
  366.     #Enregistrer(imgPetit,"image_Petit.jpg")
  367.    
  368.     imgBordure=bordure(img)
  369.     photo,dessin=apercuImage(imgBordure,fichier)
  370.     time.sleep(1)
  371.     #Enregistrer(imgBordure,"image_bordure.jpg")
  372.    
  373.    
  374.     imglargeur2x=largeurdouble(imgPetit)
  375.     photo,dessin=apercuImage(imglargeur2x,fichier)
  376.     time.sleep(1)
  377.     #Enregistrer(imglargeur2x,"image_plus_large.jpg")
  378.  
  379.     imghauteur2x=hauteurdouble(imgPetit)
  380.     photo,dessin=apercuImage(imghauteur2x,fichier)
  381.     time.sleep(1)
  382.     #Enregistrer(imghauteur2x,"image_plus_haute.jpg")
  383.  
  384. def importerImg():
  385.     global fichier, pixels, img
  386.     fichier=importerUneImage()
  387.     pixels,img=couleursPixels(fichier)
  388.     return()
  389.  
  390. if __name__=='__main__':
  391.  
  392. ############   programme principal   ################
  393.     fen1=Tk.Tk()
  394.     fen1.title("Manipulation-PHOTOS")
  395.     fen1.withdraw()
  396.     w=300
  397.     h=100
  398.     can1 = Tk.Canvas(fen1, width =w, height =h)
  399.     can1.pack(side=Tk.LEFT)
  400.     barre_menu = Tk.Menu(fen1)
  401.    
  402.     fichier_menu = Tk.Menu(barre_menu, tearoff=0)
  403.     fichier_menu.add_command(label='Charger fichier',command=lambda:importerImg())
  404.     fichier_menu.add_command(label='Aperçu fichier',command=lambda:apercuImage(img,fichier))
  405.     fichier_menu.add_command(label='Enregistrer',command=lambda:Enregistrer(img,fichier))
  406.     fichier_menu.add_separator()
  407.     fichier_menu.add_command(label='Demo',command=autoImg)
  408.     fichier_menu.add_separator()
  409.     fichier_menu.add_command(label='Quit',command=fen1.destroy)
  410.     barre_menu.add_cascade(label='Fichiers',menu=fichier_menu)
  411.     couleur_menu = Tk.Menu(barre_menu, tearoff=0)
  412.     couleur_menu.add_command(label='Niveau de gris',command=lambda:photogrise(img))
  413.     couleur_menu.add_command(label='Négatif',command=lambda:photonegatif(img))
  414.     couleur_menu.add_command(label='Sépia',command=lambda:sepia(img))
  415.     couleur_menu.add_command(label='8 couleurs',command=lambda:huitcouleurs(img))
  416.     couleur_menu.add_command(label='27 couleurs',command=lambda:vingtseptcouleurs(img))
  417.     scouleur_menu = Tk.Menu(couleur_menu, tearoff=0)
  418.     scouleur_menu.add_command(label='Change RB',command=lambda:changeRB(img))
  419.     scouleur_menu.add_command(label='Change GB',command=lambda:changeGB(img))
  420.     scouleur_menu.add_command(label='Change RG',command=lambda:changeRG(img))
  421.     compo_menu = Tk.Menu(couleur_menu, tearoff=0)
  422.     compo_menu.add_command(label='Rouge',command=lambda:changeR(img))
  423.     compo_menu.add_command(label='Vert',command=lambda:changeG(img))
  424.     compo_menu.add_command(label='Bleu',command=lambda:changeB(img))
  425.     barre_menu.add_cascade(label='Couleurs', menu=couleur_menu)
  426.     couleur_menu.add_cascade(label='Echanger couleurs', menu=scouleur_menu)
  427.     couleur_menu.add_cascade(label='Composantes', menu=compo_menu)
  428.     redi_menu = Tk.Menu(barre_menu, tearoff=0)
  429.     redi_menu.add_command(label='Double L', command=lambda:largeurdouble(img))
  430.     redi_menu.add_command(label='Double H', command=lambda:hauteurdouble(img))
  431.     redi_menu.add_command(label='Double Img', command=lambda:imgdouble(img))
  432.     redi_menu.add_command(label='Petit Img', command=lambda:petit(img))
  433.     barre_menu.add_cascade(label='Redimensionner', menu=redi_menu)
  434.     rot_menu = Tk.Menu(barre_menu, tearoff=0)
  435.     rot_menu.add_command(label='Rotation GD', command=lambda:rot(img))
  436.     rot_menu.add_command(label='Rotation 90°', command=lambda:rot90(img))
  437.     rot_menu.add_command(label='Rotation 180°', command=lambda:rot180(img))
  438.     barre_menu.add_cascade(label='Rotation', menu=rot_menu)
  439.     fen1.deiconify()
  440.    
  441.  
  442.  
  443.     fen1.config(menu=barre_menu)
  444.     fen1.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement