Skip to content
Snippets Groups Projects
Commit 0930a3b4 authored by Louis Chmielewski's avatar Louis Chmielewski
Browse files

projet terminé

parent 17b7c614
Branches
No related tags found
No related merge requests found
No preview for this file type
......@@ -28,5 +28,10 @@ author : Louis Chmielewski
- 26/03 : corrections d'erreurs dans bloc.py
- 26/03 : réalisation de la fonction decoupe_image
- 27/03 : redéfinition de la fonction decoupe image
- 27/03 : modification du fichier csv_en_png
- 28/03 : modification apportés sur une partie de l'ensemble des fichiers
......@@ -9,10 +9,19 @@
:date: 2024 mars
"""
import sys
sys.path.append("src")
from PIL import Image, ImageDraw
from bloc import Bloc
import manip_couleurs
image = Image.open("assets/calbuth.png")
image_rgb = im.convert('RGB')
image.size = (width, height)
image_rgb.pixel_hl = (0,0)
image_rgb.pixel_lr = (width, height)
draw = ImageDraw.Draw(image)
def decoupe_image(image: Bloc, ordre: int) -> Bloc:
"""
Decoupe un bloc en quatre bloc "ordre" fois
......@@ -20,27 +29,67 @@ def decoupe_image(image: Bloc, ordre: int) -> Bloc:
Exemple(s) :
$$$
"""
draw = ImageDraw.Draw(image)
if ordre != 0:
en_4_blocs(image)
decoupe_image(*arg, ordre - 1)
if sont_4_blocs_uniformes_proches([bloc1, bloc2, bloc3, bloc4]):
couleur_mid = moyenne_couleur([bloc1, bloc2, bloc3, bloc4])
pixel_hl = image.getpixel(image.pixel_hl(bloc1))
pixel_lr = image.getpixel(image.pixel_lr(bloc4))
draw.rectangle((pixel_hl),(pixel_lr), fill(couleur_mid))
"""
if ordre != 0:
blocs = en_4_blocs(image)
for bloc in blocs:
decoupe_image(bloc, ordre - 1, draw)
if sont_4_blocs_uniformes_proches(blocs):
couleur_mid = moyenne_couleur(blocs)
pixel_hl = image.pixel_hl
pixel_lr = image.pixel_lr
draw.rectangle((pixel_hl, pixel_lr), fill=couleur_mid)
else:
pixel_hl = image.getpixel(image.pixel_hl(bloc1))
pixel_lr = image.getpixel(image.pixel_lr(bloc4))
draw.rectangle((pixel_hl),(pixel_lr))
pixel_hl = image.pixel_hl
pixel_lr = image.pixel_lr
draw.rectangle((pixel_hl, pixel_lr))
else:
couleur_mid = moyenne_couleur(bloc)
pixel_hl = image.getpixel(image.pixel_hl(image))
pixel_lr = image.getpixel(image.pixel_lr(image))
draw.rectangle((pixel_hl),(pixel_lr), fill(couleur_mid))
couleur_mid = moyenne_couleur(image)
pixel_hl = image.pixel_hl
pixel_lr = image.pixel_lr
draw.rectangle((pixel_hl, pixel_lr), fill=couleur_mid)
# if ordre != 0:
# blocs = en_4_blocs(image)
# for bloc in blocs:
# decoupe_image(bloc, ordre - 1, draw)
#
# if sont_4_blocs_uniformes_proches(blocs):
# couleur_mid = moyenne_couleur(blocs)
# pixel_hl = image.pixel_hl
# pixel_lr = image.pixel_lr
# draw.rectangle((pixel_hl, pixel_lr), fill=couleur_mid)
# else:
# pixel_hl = image.pixel_hl
# pixel_lr = image.pixel_lr
# draw.rectangle((pixel_hl, pixel_lr))
# else:
# couleur_mid = moyenne_couleur(image)
# pixel_hl = image.pixel_hl
# pixel_lr = image.pixel_lr
# draw.rectangle((pixel_hl, pixel_lr), fill=couleur_mid)
# if ordre != 0:
# en_4_blocs(image)
# decoupe_image(*arg, ordre - 1)
# if sont_4_blocs_uniformes_proches([bloc1, bloc2, bloc3, bloc4]):
# couleur_mid = moyenne_couleur([bloc1, bloc2, bloc3, bloc4])
# pixel_hl = image.getpixel(image.pixel_hl(bloc1))
# pixel_lr = image.getpixel(image.pixel_lr(bloc4))
# draw.rectangle((pixel_hl),(pixel_lr), fill(couleur_mid))
# else:
# pixel_hl = image.getpixel(image.pixel_hl(bloc1))
# pixel_lr = image.getpixel(image.pixel_lr(bloc4))
# draw.rectangle((pixel_hl),(pixel_lr))
# else:
# couleur_mid = moyenne_couleur(bloc)
# pixel_hl = image.getpixel(image.pixel_hl(image))
# pixel_lr = image.getpixel(image.pixel_lr(image))
# draw.rectangle((pixel_hl),(pixel_lr), fill(couleur_mid))
\ No newline at end of file
......@@ -10,25 +10,26 @@
"""
import sys
import argparse
sys.path.append("src")
sys.path.append("assets")
import numpy as np
from PIL import *
import csv_en_png
from csv_en_png import *
def charger_image(chemin_fichier: str):
def charger_image(im: str):
"""
Charger une image depuis un fichier PNG ou CSV
Précondition :
Précondition : im est le chemin d'un fichier
Exemple(s) :
$$$
"""
im = Image.open(input("Entrez le chemin du fichier : "))
im_rgb = im.convert('RGB')
if chemin_fichier.endswith('.png'):
if im.endswith('.png'):
return im.show()
elif chemin_fichier.endswith('.csv'):
return csv_en_png
elif im.endswith('.csv'):
return csv_en_png(im)
else:
raise ValueError("Erreur, veuillez recommencer.")
......@@ -41,7 +42,8 @@ def traitement_image(image):
"""
int(input("Veuillez entrer l'ordre à laquelle vous voulez traiter l'image"))
return decoupe_image(image)
im_rgb = decoupe_image(image)
return im_rgb
def enregistre_image(image):
"""
......@@ -61,6 +63,9 @@ def main():
$$$
"""
charger_image()
traitement_image()
enregistre_image()
if __name__ == "__main__":
main()
......
No preview for this file type
This diff is collapsed.
......@@ -14,15 +14,24 @@ from PIL import Image, ImageDraw
from manip_couleurs import *
class Bloc:
"""Classe d'un bloc d'une image en pixel
"""
Classe d'un bloc d'une image en pixel
Exemple(s) :
$$$ self.pixel_hl = (0, 0)
$$$ self.pixel_lr = (10, 10)
$$$ self.color = (255, 0, 0)
$$$ self.bloc = Bloc(self.pixel_hl, self.pixel_lr, self.color)
"""
def __init__(self, pixel_hl, pixel_lr):
def __init__(self, pixel_hl: tuple[int, int], pixel_lr: tuple[int, int], color:tuple[int, int, int]):
"""
Initialise le type bloc à la valeur de l'image
"""
#
self.pixel_hl = pixel_hl
self.pixel_lr = pixel_lr
self.color = color
def __eq__(self, other):
"""
......@@ -42,12 +51,12 @@ class Bloc:
$$$
"""
return est_couleur_proche(moyenne_couleur_bloc(liste_bloc[0]), moyenne_couleur_bloc(liste_bloc[1])) and \
est_couleur_proche(moyenne_couleur_bloc(liste_bloc[0]), moyenne_couleur_bloc(liste_bloc[2])) and \
est_couleur_proche(moyenne_couleur_bloc(liste_bloc[0]), moyenne_couleur_bloc(liste_bloc[3]))
return est_couleur_proche(moyenne_couleur_bloc(liste_bloc[0].color), moyenne_couleur_bloc(liste_bloc[1].color)) and est_couleur_proche(moyenne_couleur_bloc(liste_bloc[0].color), moyenne_couleur_bloc(liste_bloc[2].color)) and est_couleur_proche(moyenne_couleur_bloc(liste_bloc[0].color), moyenne_couleur_bloc(liste_bloc[3].color))
# est_couleur_proche(moyenne_couleur_bloc(liste_bloc[0].color), moyenne_couleur_bloc(liste_bloc[1].color))
# est_couleur_proche(moyenne_couleur_bloc(liste_bloc[0].color), moyenne_couleur_bloc(liste_bloc[2].color))
# est_couleur_proche(moyenne_couleur_bloc(liste_bloc[0].color), moyenne_couleur_bloc(liste_bloc[3].color))
def est_bloc_non_uniforme()-> bool:
def est_bloc_non_uniforme(liste_bloc: : list[Bloc, Bloc, Bloc, Bloc])-> bool:
"""
Renvoie True si le bloc n'est pas uniforme, c'est à dire
si il peut être divisé en 4 blocs
......@@ -56,9 +65,9 @@ class Bloc:
$$$
"""
return not(est_bloc_uniforme())
return not(est_bloc_uniforme(liste_bloc))
def sont_4_blocs_uniformes_proches(liste_bloc: list[Bloc, Bloc, Bloc, Bloc])-> bool:
def sont_4_blocs_uniformes_proches(liste_bloc: : list[Bloc, Bloc, Bloc, Bloc])-> bool:
"""
Renvoie True si les 4 blocs uniformes sont proches
Précondition : aucune
......@@ -76,7 +85,7 @@ class Bloc:
return res
def en_4_blocs(bloc:Bloc)->bloc:
def en_4_blocs(bloc: Bloc)->Bloc:
"""
Divise un bloc en 4 blocs
Précondition : aucune
......@@ -84,16 +93,44 @@ class Bloc:
$$$
"""
bloc1 = pixel_hl = image.getpixel((0, 0)) and \
pixel_lr = image.getpixel((largeur/2, hauteur/2))
bloc2 = pixel_hl = image.getpixel((largeur/2, 0)) and \
pixel_lr = image.getpixel((largeur, hauteur/2))
bloc3 = pixel_hl = image.getpixel((0, hauteur/2)) and \
pixel_lr = image.getpixel((largeur/2, hauteur))
bloc4 = pixel_hl = image.getpixel((largeur/2, hauteur/2)) and \
pixel_lr = image.getpixel((largeur, hauteur))
new_bloc = [bloc1, bloc2, bloc3, bloc4]
return new_bloc
# Obtenez les coordonnées du coin supérieur gauche et du coin inférieur droit du bloc
x_hl, y_hl = bloc.pixel_hl
x_lr, y_lr = bloc.pixel_lr
# Calculez les coordonnées du milieu du bloc
x_milieu = (x_hl + x_lr) // 2
y_milieu = (y_hl + y_lr) // 2
# Obtenez les couleurs des pixels pour les 4 coins du bloc
couleur_bloc1 = bloc.getpixel((x_hl, y_hl))
couleur_bloc2 = bloc.getpixel((x_milieu, y_hl))
couleur_bloc3 = bloc.getpixel((x_hl, y_milieu))
couleur_bloc4 = bloc.getpixel((x_milieu, y_milieu))
# Créez les 4 nouveaux blocs à partir des pixels obtenus
bloc1 = Bloc((x_hl, y_hl), (x_milieu, y_milieu))
bloc1.pixel_couleur = couleur_bloc1
bloc2 = Bloc((x_milieu, y_hl), (x_lr, y_milieu))
bloc2.pixel_couleur = couleur_bloc2
bloc3 = Bloc((x_hl, y_milieu), (x_milieu, y_lr))
bloc3.pixel_couleur = couleur_bloc3
bloc4 = Bloc((x_milieu, y_milieu), (x_lr, y_lr))
bloc4.pixel_couleur = couleur_bloc4
# Retourner une liste contenant les 4 nouveaux blocs
return [bloc1, bloc2, bloc3, bloc4]
# bloc1 = pixel_hl = image.getpixel((0, 0)) and pixel_lr = image.getpixel((largeur/2, hauteur/2))
# bloc2 = pixel_hl = image.getpixel((largeur/2, 0)) and pixel_lr = image.getpixel((largeur, hauteur/2))
# bloc3 = pixel_hl = image.getpixel((0, hauteur/2)) and pixel_lr = image.getpixel((largeur/2, hauteur))
# bloc4 = pixel_hl = image.getpixel((largeur/2, hauteur/2)) and pixel_lr = image.getpixel((largeur, hauteur))
# new_bloc = [bloc1, bloc2, bloc3, bloc4]
# return new_bloc
......
......@@ -14,7 +14,7 @@ import csv
from PIL import Image, ImageDraw
max_y2 = 0
fichier_csv = "../assets/mystere.csv"
fichier_csv = input("Entrez le chemin du fichier : ")
# Récupère la valeur maximale compris dans la 4eme colonne pour obtenir la dimension max de l'image
with open(fichier_csv, newline='') as csvfile:
......@@ -25,7 +25,7 @@ with open(fichier_csv, newline='') as csvfile:
if y2 > max_y2:
y2 = max_y2
width, height = 512, 512 #max_y2, max_y2
width, height = 512, 512 #max_y2, max_y2 ne marche pas
image = Image.new("RGB", (width, height), "black")
draw = ImageDraw.Draw(image)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment