C1.3 : TP Immeubles

Présentation du TP

But

On souhaite écrire un programme qui crée une image contenant le dessin d’une rue avec des immeubles dont certaines caractéristiques sont générés aléatoirement.

Contraintes

L'image générée doit avoir la taille de 800×600 pixels.

Les contraintes urbanistiques concernant les immeubles sont les suivantes :

Tout le reste est libre et peut donc être personnalisé.

Travail à faire

Approche globale

Proposer un module et un programme qui utilise les fonctions du module pour répondre au problème posé.

On utilisera le module PIL de Python.

On utilisera le plus de petites fonctions possible. On veillera à bien documenter le module et les fonctions du module.

Quelques pistes

Programme principal

Le programme principale pourrait ne contenir que :

On aurait donc la structure suivante.

from PIL import Image

# ==== Constantes ====
LARGEUR = 800
HAUTEUR = 600
L_IMMEUBLE = 140
H_NIVEAU = 60
C_BLANC = (255,255,255)
C_NOIR = (0,0,0)

# ==== Définition des fonctions ====


# ==== Programme principal =====

objet_image = Image.new('RGB', (largeur, hauteur), c_blanc)

# Appel des fonctions pour ajouter des éléments à l'objet-image

objet_image.save('immeubles.png','png')
objet_image.show()

Fonction pour tracer un rectangle

On peut observer que tous les éléments de l'image à créer sont des rectangles de couleur, entourés d'un trait noir.

On va donc écrire une fonction pour cela.

def rectangle(obj_img, x0, y0, l, h, c)
    """
    Fonction qui permet d'ajouter un rectangle à un objet-image PIL
    Paramètres:
        obj_img (objet-image)
        x0, y0 (int) : coordonnées du pixel en haut à gauche du rectangle à ajouter
        l, h (int) : largeur et hauteur du rectangle à ajouter
        c (tuple) : couleur de fond du rectangle à ajouter
    """
    pass

Autres fonctions

Exemple

La série d'exemples ci-dessous est basée sur :

Quelques liens

Documentation officielle de la librairie PIL : pillow.readthedocs.io/en/stable/