0% ont trouvé ce document utile (0 vote)
51 vues5 pages

Exo 1NSI Introduction - PIL

ifzfeuifibzeh

Transféré par

vicgaming789
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
51 vues5 pages

Exo 1NSI Introduction - PIL

ifzfeuifibzeh

Transféré par

vicgaming789
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TD : MANIPULATION D’IMAGES

On travaillera sur des images bitmap, c’est-à-dire sur des matrices de pixels.

On peut considérer que c’est une liste


de lignes, chaque ligne étant une liste
de pixels.

Chaque pixel est défini par sa position


et sa couleur.
Celle-ci se est un mélange des ses trois
composantes RGB ( Red, Blue, Green).

(255, 255, 255) au blanc et


(255, 0, 0) au rouge par
exemple.

Les valeurs de chaque


composante sont comprises
entre 0 et 255.

La librairie Python Imaging Library (PIL) permet d’importer des images pour les
manipuler comme des tableaux de pixels, et ensuite les réimporter.

L’image à ouvrir sera placée dans le même répertoire que votre programme
python.

Voici un exemple qui permet d’obtenir le drapeau


français.
import PIL
# Pour lire et écrire des images dans un fichier
from PIL import Image

#(0,0,255) : bleu
#(255,255,255) : blanc
#(255,0,0) : rouge

def drapeaux_francais():
# on définit la taille de l’image
xmax,ymax = 300,300

# on crée une variable qui contiendra l’image


img = Image.new(mode = "RGB",size = (xmax,ymax))

# on parcourt tous les pixels de l’images


# px est la couleur du pixel
for x in range(xmax):
for y in range(ymax):
if x < 100:
px = (0,0,255)
elif x < 200:
px = (255,255,255)
else :
px = (255,0,0)

# on met le pixel à la position (x,y) à la couleur px


img.putpixel((x ,y ), px)
return img

img_drapeau = drapeaux_francais()

# on affiche l’image
img_drapeau.show()

# on sauvegarde l’image
img_drapeau.save("drapeau_francais.jpg")

Questions
1. Écrire une fonction qui dessine le drapeau de la Sierra Leone, l’affiche et le
sauvegarde.
Le drapeau devra être de forme rectangulaire.

2. Écrire une fonction qui dessine une image dont chaque pixel est pris au
hasard, l’affiche et le sauvegarde.
On utilisera :
• from random import *
• la fonction randint()

3. Écrire une fonction qui dessine cette image, l’affiche et


le sauvegarde.
L’image sera de forme carrée.
Les coordonnées des pixels bleus vérifie : x < y.

4. Écrire une fonction qui dessine un dégradé à partir


d’une couleur, l’affiche et le sauvegarde.
Vous choisirez votre couleur de départ.
Une composante (r,g,b) devra débuter à 0,pourquoi ?
La taille d’un côté ne pourra pas dépasser 256 pixels,
pourquoi ?

→ Indication : la double boucle dessine l’image colonne par colonne.


5. Écrire une fonction qui prend en entrée une image et qui crée une autre
image dont tous pixels ont une composante rouge nulle et les autres
inchangées.

Pour récupérer la taille de l’image, on utilisera la commande


• (xmax,ymax) = image.size

Pour charger une image, on utilisera la commande


• raphael = Image.open('raphael.jpg')

6. L’image Invisible.jpg contient un message caché.

Le fond de cette image est de couleur (102,255,102).


Un texte a été écrit avec une couleur très légèrement
différente.
Écrire une fonction, qui prend en entrée cette image et
qui renvoie une nouvelle image avec le message visible.

7. Écrire une fonction qui dessine un rectangle avec un texte caché.


Pour écrire du texte dans une image :

img = Image.new(mode = "RGB",size = (xmax,ymax),color = (...,...,...))


phrase_1 = "(-_-)ZZZ "
image_texte = ImageDraw.Draw(img)
myFont = ImageFont.truetype('FreeMono.ttf', 65)
image_texte.text((5, 5), phrase_1,font = myFont,fill = (...,...,...))
8. Écrire une fonction, qui prend en entrée une image et qui renvoit une
nouvelle image dont les composantes r et b sont inversées.
(203,10,45) → (45,10,203)

9. Écrire une fonction, qui prend en entrée une image et qui renvoit une
nouvelle image symétrique.

Vous aimerez peut-être aussi