"""Fonctions fournies pour le projet Pixelisation.

Une image est représentée par un tableau de tableaux de tuples (R, V, B) :
image[ligne][colonne] est le pixel situé à la ligne ligne et à la colonne colonne.
"""

from PIL import Image

TAILLE_MAX = 800  # les images sont réduites à 800 pixels maximum de côté


def charger_image(nom_fichier):
    """Renvoie le tableau de tableaux des pixels (R, V, B) de l'image nom_fichier."""
    img = Image.open(nom_fichier).convert("RGB")
    img.thumbnail((TAILLE_MAX, TAILLE_MAX))
    largeur, hauteur = img.size
    pixels = list(img.getdata())
    img.close()
    return [[pixels[ligne * largeur + colonne] for colonne in range(largeur)]
            for ligne in range(hauteur)]


def sauvegarder_image(image, nom_fichier):
    """Enregistre le tableau de tableaux de pixels image dans le fichier nom_fichier."""
    hauteur = len(image)
    largeur = len(image[0])
    img = Image.new("RGB", (largeur, hauteur))
    for ligne in range(hauteur):
        for colonne in range(largeur):
            img.putpixel((colonne, ligne), image[ligne][colonne])
    img.save(nom_fichier)
    img.close()
