from PIL import Image

# Liste des petites images à utiliser pour chaque niveau de noirceur
PAT_CHARS = ["p9.png", "p8.png", "p7.png", "p6.png", "p5.png", "p4.png", "p3.png", "p2.png", "p1.png", "p0.png"]

# Chargement de l'image principale
image_path = "linux.png"  # modifier avec le chemin de ton image
image = Image.open(image_path)

# Redimensionnement width fixe et hauteur proportionnelle
new_width = 200  
width, height = image.size
ratio = height / width
new_height = int(new_width * ratio)
image = image.resize((new_width, new_height))

# Conversion en niveaux de gris
image = image.convert("L")

# Préparer les petites images
small_imgs = [Image.open(p).convert("RGBA") for p in PAT_CHARS]

# Taille des petites images (on suppose qu'elles sont toutes de la même taille)
tile_width, tile_height = small_imgs[0].size

# Création de l'image finale
stitched_image = Image.new("RGBA", (new_width * tile_width, new_height * tile_height))

# Récupération des pixels et remplacement par les petites images
pixels = list(image.getdata())

for y in range(new_height):
    for x in range(new_width):
        pixel_value = pixels[y * new_width + x]
        # Choisir l'image correspondante en fonction de la noirceur
        index = pixel_value * (len(PAT_CHARS) - 1) // 255
        tile = small_imgs[index]
        # Coller la petite image dans l'image finale
        stitched_image.paste(tile, (x * tile_width, y * tile_height), tile)

# Sauvegarde de l'image finale
stitched_image.save("stitched_image.png")
print("Image finale créée : stitched_image.png")
