Vous êtes sur la page 1sur 3

Master « Visualisation et Conception Infographiques en ligne » (VCIEL) Enseignant :

Mardi 12 janvier 2010 Serge Miguet


Université Lumière Lyon 2

EP 32 : PHP / MySQL


Durée : 1h30
Documents manuscrits ou issus de la plate-forme Spiral autorisés

Le but de cet exercice est de concevoir un outil permettant de générer des « reflets » pour des
images, à la mode du web 2.0. Le fonctionnement souhaité est illustré dans la figure ci-
dessous. Tous les fichiers nommés dans cette description sont supposés être présents dans le
même dossier d’un serveur Apache disposant d’un module PHP et de la bibliothèque
graphique GD.
Un fichier HTML intitulé « saisie.html  » permet de saisir le nom d’un fichier image, au
format PNG, supposé également présent dans le même dossier (fichier « serge.png  » sur la
figure). Lors du clic sur le bouton «  Générer le reflet » du formulaire, un script PHP intitulé
«  miroir.php » s’exécute, et affiche d’une part l’image dont le nom a été saisi dans le
formulaire, d’autre part une image reflet, générée dynamiquement par un script PHP intitulé
«  reflet.php  ».

1. Donnez le code HTML du fichier « saisie.html », permettant de saisir le nom du


fichier image, la couleur de fond de la page à générer, la taille du reflet, exprimée
en pourcentage de la hauteur de l’image, et un paramètre d’opacité, exprimé lui
aussi par un pourcentage compris entre 0 et 100.
2. Dans le script « miroir.php », donnez le code permettant de récupérer dans des
variables les données saisies dans le formulaire « saisie.html », et de tester leur
validité. Proposez un ou plusieurs mécanismes permettant de réafficher le
formulaire en cas d’erreur de saisie (on ne traitera pas nécessairement tous les cas
d’erreur possibles).

VCIel Examen de PHP / MySQL, janvier 2010 page 1/2


3. Le script « reflet.php » chargé de générer dynamiquement une version « tête en
bas » de l’image, aura lui aussi besoin d’accéder aux données saisies dans le
formulaire (ce script sera écrit à partir de la question 5). Rajoutez au script
« miroir.php » les instructions qui permettront au script « reflet.php » d’accéder à
ces données.
4. Terminez l’écriture du script « miroir.php » par le bout de code permettant
d’afficher l’une en dessous de l’autre, l’image originale et l’image retournée, dans
une page web ayant pour couleur de fond la couleur saisie dans le formulaire.
5. Le reste de l’examen sera consacré à la rédaction du script « reflet.php ». Donnez
tout d’abord les instructions permettant en début du script, de retrouver dans des
variables les données du formulaire, mémorisées dans la question 3.
6. Donnez l’instruction permettant de générer l’en-tête HTTP indispensable au bon
fonctionnement du script, et rappelez les principales contraintes liées à l’utilisation
de cette instruction.
7. En utilisant les fonctions de la bibliothèque GD données ci-dessous, explicitez
l’accès à l’image dont le nom a été saisi dans le formulaire, et créez en mémoire
l’image permettant de contenir le reflet (même largeur, mais hauteur réduite en
fonction du pourcentage entré).
8. Ecrivez les boucles permettant de recopier « à l’envers » dans l’image reflet, les
dernières lignes de l’image originale. Choisissez (a. b. c. ou d.) le niveau de
complexité qui vous convient pour répondre à cette question :
a. Dans une première version du script, on ne s’occupera pas de l’opacité
(comme si elle avait une valeur maximale de 100%) et on recopiera
simplement les lignes de l’image originale, de bas en haut, dans l’image reflet.
b. dans une deuxième version (un peu plus élaborée) du script, on va chercher à
donner au reflet un effet de transparence. On pourra considérer dans cette
version que le fond est noir, et qu’il s’agit donc simplement d’assombrir
globalement le reflet. Il faut savoir que la couleur d’un pixel est stockée sur 24
bits (un octet par canal), dans l’ordre (rouge, vert, bleu).
c. dans la troisième version (encore plus compliquée), on tiendra compte de la
couleur du fond et de l’opacité souhaitée du reflet, et on calculera un mélange
entre la couleur des pixels et la couleur du fond.
d. dans la dernière version (la plus difficile), on pourra chercher à estomper
progressivement le reflet, pour obtenir un dégradé vers la couleur du fond.
9. Donnez finalement l’instruction permettant de terminer le script en générant
l’image « reflet » à destination du navigateur web.

resource imagecreatefrompng(string $filename)


retourne un identifiant d'image représentant une image obtenue à partir du fichier filename
resource imagecreatetruecolor(int $width, int $height)
crée une nouvelle image en couleurs vraies (par opposition aux images en couleurs indexées utilisant une palette de
couleurs obtenues par imagecreate())
int imagesx (resource $image)
retourne la largeur de l'image référencée par image.
int imagesy (resource $image)
retourne la hauteur de l'image référencée par image.
int imagecolorat (resource $image, int $x, int $y)
Retourne l'index de la couleur du pixel situé aux coordonnées spécifiées
bool imagesetpixel ( resource $image , int $x , int $y , int $color )
dessine un pixel aux coordonnées spécifiées.

VCIel Examen de PHP / MySQL, janvier 2010 page 2/2


bool imagepng(resource $image)
Envoie l’image vers le navigateur au format PNG

VCIel Examen de PHP / MySQL, janvier 2010 page 3/2

Vous aimerez peut-être aussi