- Accueil
- Programmation Web S2
- Index du sujet de TP
- Consignes
- Génération dynamique d'images en
PHP
- Affichage des artistes avec des jaquettes
- Affichage des artistes avec des jaquettes, organisation alphabétique
- Affichage des artistes avec des jaquettes, organisation et menu alphabétique
- Classes
Genre
etGenreCollection
- Affichage des artistes avec des jaquettes, organisation et menu alphabétique, choix du genre
- S'amuser avec les images
Consignes ¶
Ce sujet complémentaire est la suite du TP « Développement d'une application Web de consultation et modification de morceaux de musique ». Les questions seront logiquement traitées dans le même dépôt Git que le sujet principal.
Génération dynamique d'images en PHP
¶
PHP
, associé à la bibliothèque GD
, permet de manipuler des images. Cependant, la bibliothèque propose uniquement une vision non orientée objet. Afin de vous familiariser avec le développement objet en PHP
, une encapsulation objet des fonctionnalités GD
vous est proposée sous la forme d'une classe MyGdImage
.
Toutes les fonctions GD
qui admettent comme premier paramètre une ressource issue de la création d'une image GD
ont été transformées en méthodes de la classe MyGdImage
.
Par exemple, la fonction GD
bool imageFilledRectangle( GdImage $image, int $x1, int $y1, int $x2, int $y2, int $color )
devient la méthode bool filledRectangle( int $x1, int $y1, int $x2, int $y2, int $color )
de la classe MyGdImage
.
Notez la disparition du paramètre de type « GdImage
» (qui est devenu un attribut de l'instance) ainsi que la suppression de la chaîne « image
» dans le nom de la méthode.
Les fonctions de la bibliothèque GD
qui n'admettent pas une ressource comme premier paramètre sont des méthodes statiques de la classe MyGdImage
. Pour connaître l'ensemble des fonctions GD
, consultez la documentation. Pour finir, la construction d'instances de la classe MyGdImage
est possible grâce à trois méthodes de classe :
MyGdImage::createFromSize(int $sx, int $sy)
pour créer une image vide de taille$sx × $sy
MyGdImage::createFromString(string $data)
pour créer une image à partir d'une chaîne de caractères$data
contenant l'équivalent des données d'un fichier image.MyGdImage::createFromFile(string $filename, string $type)
pour créer une image à partir d'un fichier$filename
existant sur le serveur. Le type du fichier est donné par$type
qui prend ses valeurs dans les constantes de la classeMyGdImage
:MyGdImage::GD
pour un fichier de type GDMyGdImage::GD2PART
pour un fichier de type GD2PARTMyGdImage::GD2
pour un fichier de type GD2MyGdImage::GIF
pour un fichier de type GIFMyGdImage::JPEG
pour un fichier de type JPEGMyGdImage::PNG
pour un fichier de type PNGMyGdImage::WBMP
pour un fichier de type WBMPMyGdImage::XBM
pour un fichier de type XBMMyGdImage::XPM
pour un fichier de type XPM
Un exemple de code pourrait être :
et le résultat serait :
Récupérez le code source de la classe MyGdImage
: MyGdImage.php
(télécharger). Le code de cette classe fait appel à des possibilités offertes par PHP
objet que vous découvrirez au semestre 3. Vous devez également télécharger la classe d'exception MyGdImageException.php
(télécharger) associée à « MyGdImage
».
Affichage des artistes avec des jaquettes ¶
Travail à réaliser
- Écrivez un script
coverartist.php
qui admet un paramètreid
correspondant à l'identifiant de l'artiste dont une mosaïque de jaquettes est à afficher. Vous devrez utiliser les fonctionnalités deGD
pour parvenir à vos fins. Vous devrez compléter la méthodegetCover()
de la classeAlbum
. - Modifiez le programme de listage des artistes afin qu'il intègre les jaquettes des CD et adopte une mise en page plus compacte.
Affichage des artistes avec des jaquettes, organisation alphabétique ¶
Modifiez le programme de listage des artistes afin de créer une liste d'artistes pour chaque lettre de l'alphabet présente dans la liste des noms d'artistes.
Affichage des artistes avec des jaquettes, organisation et menu alphabétique ¶
Modifiez le programme de listage des artistes afin de créer un menu pour chaque lettre correspondant à un artiste. Les lettres pour lesquelles aucun artiste n'existe ne seront pas des liens.
Une piste de résolution simple de ce problème consiste à marquer les lettres dans un tableau : marquer true
si un nom d'artiste commence par cette lettre, false
sinon.
Classes Genre
et GenreCollection
¶
Vous pouvez poursuivre l'écriture des classes en réalisant la classe Genre
permettant de manipuler les enregistrements de la table « genre
».
Vous réaliserez également la classe GenreCollection
.
Affichage des artistes avec des jaquettes, organisation et menu alphabétique, choix du genre ¶
Modifiez le programme de listage des artistes afin de proposer la sélection des artistes dont au moins un des albums correspond à un genre donné. Pour cela, votre programme devra admettre un paramètre genreId
correspondant à l'identifiant du genre choisi.
S'amuser avec les images ¶
Réalisez les scripts permettant d'obtenir les images suivantes :
Réalisez un ciel étoilé avec la lune dont la phase est passée en paramètre (de 0 à 100) :
Pour les plus enthousiastes d'entre-vous, utilisation de filter pour réaliser des convolutions :
avec le noyau
, devient :