Skip to content
Snippets Groups Projects
Commit 8d017801 authored by Angy Wallot's avatar Angy Wallot
Browse files

classe

parent 084a1aa3
No related branches found
No related tags found
No related merge requests found
from PIL import Image, ImageDraw
from decoupe_im import *
im = Image.open('images/calbuth.png')
im_rgb = im.convert('RGB')
class Bloc:
def __init__(self, *arg):
def __init__(self, *args):
"""
Creer un bloc contenant des arguments variables
Exemple(s) :
$$$
§§§ b1 = Bloc((18,14), True, (255,255,255))
§§§ b1
Bloc('True' '(18, 14)','(255, 255, 255)')
§§§ b2 = Bloc((52, 86), False)
§§§ b2
Bloc('False' '(52, 86)')
"""
assert len(args) >= 2 and len(args) <= 3 , #2 ou 3 arguments car la taille et l'uniforlité sont nécessaire
assert type(args[0]) == tuple, "la taille doit être un tuple contenant 2 nombres"
assert len(args) >= 2 and len(args) <= 3 #2 ou 3 arguments car la taille et l'uniforlité sont nécessaire
assert type(args[0]) == tuple #la taille correspond à un tuple avec deux nombres, le premier etant le pixel en haut à droite et en bas à droite
self.taille = args[0]
assert type(args[1]) == bool, "l'uniformité doit être un booléen"
assert type(args[1]) == bool
self.uni = args[1]
if len(args) > 2:
class Person:
def __init__(self, *args):
"""
initialise une nouvelle personne.
"""
assert len(args) >= 1 and len(args) <= 3 , "1, 2 ou 3 arguments"
assert type(args[0]) == str, "le nom doit être une chaîne de caractères"
self.nom = args[0]
if len(args) > 1:
assert type(args[1]) == str, "le prénom doit être une chaîne de caractères"
self.prenom = args[1]
if len(args) > 2 and self.uni==True:
assert type(args[2]) == tuple
self.couleur = args[2]
else:
self.prenom = ""
if len(args) > 2:
assert type(args[2]) == int, "le numéro de téléphone doir être un entier"
self.tel = args[2]
else:
self.tel = -1
self.couleur = (0,0,0)
def __repr__(self) -> str:
"""
renvoie la représentation de la personne.
Renvoie la representation d'un bloc
Exemples:
§§§ b1 = Bloc((18,14), True, (255,255,255))
§§§ b1
Bloc('True' '(18, 14)','(255, 255, 255)')
"""
p_args = f"'{self.nom}'"
if self.prenom != "":
p_args += f",'{self.prenom}'"
if self.tel >= 0:
p_args += f",{self.tel}"
return f"Person({p_args})"
def __str__(self) -> str:
"""
renvoie une repésentation textuelle de la personne
p_args = f"'{self.uni}' '{self.taille}'"
if self.couleur != (0,0,0):
p_args += f",'{self.couleur}'"
return f"Bloc({p_args})"
def get_taille(self):
"""à_remplacer_par_ce_que_fait_la_fonction
Précondition :
Exemple(s) :
$$$ p = Bloc((56,85), False)
$$$ p.get_taille()
(56,85)
"""
res = self.nom
if self.prenom != "":
res = f"{self.prenom} {res}"
if self.tel >= 0:
res = f"{res}, {self.tel}"
return res
return self.taille
def decouper_image(im, ordre, taille):
"""
Fonction qui ...
Précondition : im doit etre convertit en rgb
"""
if ordre != 0:
b1_taille = ((0,0),(taille[0]//2, taille[1]//2)) # coordonnées correspondant respectivement à en haut à gaucge et en bas à droite
b2_taille = ((taille[0]//2,0),(taille[0], taille[1]//2))
b3_taille = ((0,taille[1]//2),(taille[0]//2,taille[1]))
b4_taille = ((taille[0]//2,taille[1]//2),(taille[0],taille[1]))
couleur_im = couleurs_moyenne(liste_couleur(im, (0,0), taille))
couleur_b1 = couleurs_moyenne(liste_couleur(im, b1_taille[0], b1_taille[1]))
couleur_b2 = couleurs_moyenne(liste_couleur(im, b2_taille[0], b2_taille[1]))
couleur_b3 = couleurs_moyenne(liste_couleur(im, b3_taille[0], b3_taille[1]))
couleur_b4 = couleurs_moyenne(liste_couleur(im, b4_taille[0], b4_taille[1]))
bloc1 = Bloc(b1_taille,True, couleur_b1) # coordonnées correspondant respectivement à en haut à gaucge et en bas à droite
bloc2 = Bloc(b2_taille,True, couleur_b2)
bloc3 = Bloc(b3_taille,True, couleur_b3)
bloc4 = Bloc(b4_taille,True, couleur_b4)
liste = [bloc1,bloc2,bloc3,bloc4]
for element in liste:
decouper_image(element, ordre-1, element.get_taille())
if distance_entre_deux_images(couleur_im, couleur_b1) and distance_entre_deux_images(couleur_im, couleur_b2) and distance_entre_deux_images(couleur_im, couleur_b3) and distance_entre_deux_images(couleur_im, couleur_b4):
res = Bloc((taille, True, couleurs_moyenne[couleur_b1,couleur_b2,couleur_b3,couleur_b4], taille))
else:
res = Bloc((taille, False))
else:
res = Bloc(taille, True, couleur_im)
return res
decouper_image(im_rgb, 2, (256,256))
\ No newline at end of file
from PIL import Image, ImageDraw
def decoupe_image(im, ordre:int):
"""
Précondition :
Exemple(s) :
$$$
"""
if ordre != 0:
taille = im.size
creer bloc1 = ((0,0),(taille[0]//2, taille[1]//2)) # coordonnées correspondant respectivement à en haut à gaucge et en bas à droite
creer bloc2 = ((taille[0]//2,0),(taille, taille[1]//2))
creer bloc3 = ((0,taille[1]//2),(taille[0]//2,taille))
creer bloc4 = ((taille[0]//2,taille[1]//2),(taille,taille))
decoupe_image(avec les blocs im, ordre-1)
couleur_im = couleurs_moyenne(liste_couleur(im, taille[0], taille[1]))
couleur_b1 = couleurs_moyenne(liste_couleur(im, bloc1[0], bloc1[1]))
couleur_b2 = couleurs_moyenne(liste_couleur(im, bloc2[0], bloc2[1]))
couleur_b3 = couleurs_moyenne(liste_couleur(im, bloc3[0], bloc3[1]))
couleur_b4 = couleurs_moyenne(liste_couleur(im, bloc4[0], bloc4[1]))
if distance_entre_deux_images(couleur_im, couleur_b1) and distance_entre_deux_images(couleur_im, couleur_b2) and distance_entre_deux_images(couleur_im, couleur_b3) and distance_entre_deux_images(couleur_im, couleur_b4):
res = creer bloc(couleurs_moyenne[couleur_b1,couleur_b2,couleur_b3,couleur_b4], taille)
else:
res = creer bloc avec les 4 blocs ?
else:
res = creer bloc(couleur_im, taille)
from PIL import Image, ImageDraw
def couleurs_moyenne(liste:list[tuple])->list:
"""
......@@ -43,7 +12,6 @@ def couleurs_moyenne(liste:list[tuple])->list:
[85, 85, 85]
"""
res = []
r = 0
g = 0
b = 0
......@@ -51,10 +19,7 @@ def couleurs_moyenne(liste:list[tuple])->list:
r += element[0]
g += element[1]
b += element[2]
res.append(r//len(liste))
res.append(g//len(liste))
res.append(b//len(liste))
return res
return ((r//len(liste)), (g//len(liste)) ,(b//len(liste)))
def liste_couleur(image, coin_haut_gauche:tuple,coin_bas_droit:tuple)->list:
"""
......@@ -74,8 +39,8 @@ def liste_couleur(image, coin_haut_gauche:tuple,coin_bas_droit:tuple)->list:
x_min, y_min = coin_haut_gauche
x_max, y_max = coin_bas_droit
return [image.getpixel((x,y))
for x in range(x_min, x_max+1)
for y in range(y_min, y_max+1)]
for x in range(x_min, x_max)
for y in range(y_min, y_max)]
def distance_entre_deux_images(couleur1:tuple, couleur2:tuple)->bool:
"""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment