1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| from PIL import Image #importer les fonctions images#
from random import * #importer toutes les fonctions aléatoires#
permut = [] #création d'un vecteur#
img = Image.open("chiens-poker.jpg") #chargement de l'image#
larg, haut = img.size #permet d'avoir les dimensions de l'image#
siz = (larg, haut)
mc = input ("Découpage en largeur") #demande à l'utilisateur le nombre de carré souhaité en largeur#
nc = input ("Découpage en hauteur") #demande à l'utisateur le nombre de carré souhaité en hateur#
m = int(mc) #on choisit de prendre des entiers pour m#
n = int(nc) #ainsi que pour n#
p = m*n #résultat du nombre de carrés attendu en fonction de m et de n#
print (p) #affichage de p pour une visualisation du nombre de carrés demandés pour les découpages de l'image#
permut = [i for i in range(p)] #initialisation du vecteur#
shuffle (permut) #permutation des nombres de 0 à p#
#NB : la fonction shuffle ici présentée est le fruit de nombreuses heures de recherches pour un alégement du code et une meilleure lisibilité#
#De ce fait, la fonction shuffle remplace un code complexe permettant de permuter le numéro de la case avec une autre#
for i in range(p):
print (i, permut [i]) #affichage des permutations#
kmg = Image.new("RGB", siz) #création d'une image vide dans le programme, acceptation des couleurs pour l'image#
la = int(larg/m) #nombre de pixel en largeur et
ha = int(haut/n) #hauteur de case#
#La suite du code permet de faire la permutation des morceaux desimages dans les cases suite au découpage et à la nouvelle position des morceaux des images voulu par shuffle#
for i in range(p): #balaye toutes les cases de la nouvelle image#
x1 = i%m #coordonné de i par projection en x#
y1 = int(i/m) #coordonné de i par projection en y#
x2 = permut[i]%m #coordonné de permut[i] par projection en x#
y2 = int(permut[i]/m) #coordonné de permut[i] par projection en y#
box =(x2*la, y2*ha, (x2+1)*la, (y2+1)*ha) #pour utiliser sel, il faut le nombre de pixel du point en haut à gauche et en bas à droite pour la délimitation du découpage image#
def sel(self, box=None):
self.load()
if box is None:
return self.copy()
return _ImageCrop(self, box)
jmg = img.sel(box) #utilisation d'une image intermédiaire qui prend le bout d'image d'origine calculé avec box#
box1 = (x1*la, y1*ha) #calcul des coordonnées pour la redirection du bout d'image d'origine, contenu dans jmg, dans la nouvelle image kmg (nb de pixel comme pour crop)#
kmg.paste(jmg, box1) #vide jmg dans kmg#
kmg.save('Résultat.png') #sauvegarde de l'image sur le disque#
kmg.show() #apparition de la nouvelle image# |
Partager