From 1f971f3f03949bae0beb0f09f981e512d55e14da Mon Sep 17 00:00:00 2001 From: Melissa Belkacemi <melissa.belkacemi.etu@univ-lille.fr> Date: Mon, 1 Apr 2024 19:32:33 +0200 Subject: [PATCH] Update file decoupe.py --- PJ/decoupe.py | 78 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 14 deletions(-) diff --git a/PJ/decoupe.py b/PJ/decoupe.py index 80b6991..099c12b 100644 --- a/PJ/decoupe.py +++ b/PJ/decoupe.py @@ -1,6 +1,10 @@ -from PIL import Image, ImageDraw +# Belkacemi Melissa +# 01/03/2024 from bloc import * from couleur import * +from PIL import Image, ImageDraw + + def decoupe(image:Image,p_hg,p_bd,n:int)->Bloc: @@ -12,16 +16,16 @@ def decoupe(image:Image,p_hg,p_bd,n:int)->Bloc: if n >0: b1,b2,b3,b4=quatre_blocs(image,hg,bd) - decoupe(b1,n-1,b1.pixel_hg,b1.pixel_bd) - decoupe(b2,n-1,b2.pixel_hg,b2.pixel_bd) - decoupe(b3,n-1,b3.pixel_hg,b3.pixel_bd) - decoupe(b4,n-1,b4.pixel_hg,b4.pixel_bd) + decoupe(image,b1.pixel_hg,b1.pixel_bd,n-1) + decoupe(image,b2.pixel_hg,b2.pixel_bd,n-1) + decoupe(image,b3.pixel_hg,b3.pixel_bd,n-1) + decoupe(image,b4.pixel_hg,b4.pixel_bd,n-1) if b1.sont_proches(b2,b3,b4): return(Bloc(couleur_moyenne([b1.couleur,b2.couleur,b3.couleur,b4.couleur]),b1.pixel_hg,b4.pixel_bd)) else: return(Bloc((0,0,0),b1.pixel_hg,b4.pixel_bd,b1,b2,b3,b4)) else: - couleurs=[im_rgb.getpixel((i,j)) for i in range(p_hg[0],1+p_bd[0]) for j in range(p_hg[1],1+p_bd[1])] + couleurs=[image.getpixel((i,j)) for i in range(p_hg[0],1+p_bd[0]) for j in range(p_hg[1],1+p_bd[1])] coul_moyenne=couleur_moyenne(couleurs) return Bloc(coul_moyenne,p_hg,p_bd) @@ -47,13 +51,59 @@ def quatre_blocs(im:Image,hg:tuple[int,int],bd:tuple[int,int])->tuple[Bloc,Bloc, couleurs3=[im.getpixel((i,j)) for i in range(pixel_hg3[0],1+pixel_bd3[0]) for j in range(pixel_hg3[1],1+pixel_bd3[1])] couleurs4=[im.getpixel((i,j)) for i in range(pixel_hg4[0],1+pixel_bd4[0]) for j in range(pixel_hg4[1],1+pixel_bd4[1])] return (Bloc(couleur_moyenne(couleurs1),pixel_hg1,pixel_bd1),Bloc(couleur_moyenne(couleurs2),pixel_hg2,pixel_bd2),Bloc(couleur_moyenne(couleurs3),pixel_hg3,pixel_bd3),Bloc(couleur_moyenne(couleurs4),pixel_hg4,pixel_bd4)) - + +def ouvre_image(image:str): + """ouvre et convertit en formay RGB l'image prise en paramètres + + Précondition : le chemin vers l'image est correct + + """ + img= Image.open(image) + img.convert('RGB') + return img + +def dessine_blocs(dessin,bloc:Bloc): + """dessine le bloc dans l'image + + Précondition : + + + """ + + if len(bloc.sous_blocs)==0: + dessin.rectangle((bloc.pixel_hg,bloc.pixel_bd),fill = bloc.couleur) + else : + for elem in bloc.sous_blocs: + dessine_blocs(elem) + +def dessine(img,bloc:Bloc): + """associe à un bloc une image bitmap le représentant + + Précondition : l'image est ouverte + """ + dessin = ImageDraw.Draw(img) + dessine_blocs(dessin,bloc) + + + +if __name__ == "__main__": + import sys + if len(sys.argv) != 4: + print("usage: decoupe.py operation image ordre") + else: + operation, image, ordre= sys.argv[1:] + if operation in {"affiche", "enregistre"}: + ordre = int(ordre) + im_rgb=ouvre_image(image) + t=im_rgb.size + hg=(0,0) + bd=(t[0]-1,t[1]-1) + b=decoupe(im_rgb,hg,bd,ordre) + dessin=dessine(im_rgb,b) + + if operation == "affiche": + im_rgb.show() + else: + im_rgb.save("images/img_rec.png", "PNG") -im = Image.open('images/calbuth.png') -t=im.size -hg=(0,0) -bd=(t[0]-1,t[1]-1) -im_rgb = im.convert('RGB') -b=decoupe(im_rgb,hg,bd,1) -b.sous_blocs -- GitLab