Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PIL import Image
- import tkinter as tk
- from tkinter import filedialog
- def pixellise(res):
- #On utilise le module tkinter pour ouvrir une fenêtre
- #afin de sélectionner le fichier à traiter.
- #Le chemin de ce fichier est enregistré dans chemin_fichier
- popup=tk.Tk()
- chemin_fichier = filedialog.askopenfilename(initialdir = "./",title = "Select file",filetypes = (("Images","*.bmp *.jpg"),("all files","*.*")))
- popup.destroy()
- image=Image.open(chemin_fichier)
- #On récupère les dimensions de l'image
- (largeur,hauteur)=image.size
- #On détermine quelle est la plus grande dimension : longueur ou largeur
- pix_max=max(largeur,hauteur)
- #On détermine le 'pas' de l'image pixellisée, c'est à dire à combien de pixels
- #de l'image de départ correspondra un pixel de l'image d'arrivée
- pas=pix_max//res
- largeur_finale,hauteur_finale=int((largeur//pas)*pas),int((hauteur//pas)*pas)
- #On crée une image vide aux dimensions de l'image d'origine
- imagearrivee=Image.new('RGB',(largeur_finale,hauteur_finale))
- #Si jamais on a donné un nombre de pixels supérieur à la résolution decode
- #l'image d'origine, le programme s'arrête et renvoie la valeur "Faux"
- if pas==0:
- return False
- #On va prendre successivement dans l'image des carrés contenant "pas" pixels en hauteur et en largeur
- #On va ensuite faire la moyenne des couleurs sur chaque composante rouge, vert, bleu
- for y in range(int(hauteur_finale/pas)):
- for x in range(int(largeur_finale/pas)):
- couleur=[0,0,0]
- for a in range(pas):
- for b in range(pas):
- pixel=image.getpixel((x*pas+a,y*pas+b))
- couleur[0],couleur[1],couleur[2]=couleur[0]+pixel[0],couleur[1]+pixel[1],couleur[2]+pixel[2]
- couleur[0],couleur[1],couleur[2]=couleur[0]//pas**2,couleur[1]//pas**2,couleur[2]//pas**2
- couleur=(couleur[0],couleur[1],couleur[2])
- #Dans l'image finale, on dessine un carré de "pas" pixels en long et en large de la couleur moyenne que l'on vient de calculer
- imagearrivee=dessine_carre(imagearrivee,x*pas,y*pas,pas,couleur)
- #On enregistre l'image traitée
- imagearrivee.save("image"+str(res)+".jpg")
- #On affiche l'image
- imagearrivee.show()
- return True
- #cette fonction dessine un carré dans une image, de la couleur indiquée
- def dessine_carre(image,x_top,y_top,cote,couleur):
- for x in range(x_top,x_top+cote):
- for y in range(y_top,y_top+cote):
- image.putpixel((x,y),couleur)
- return image
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement