M2202 - Algorithmique et PHP
Transcription
M2202 - Algorithmique et PHP
M2202 - Algorithmique et PHP David Annebicque 2016 1 1.1 TD : Création et manipulation d’images Introduction Dans ce TD/TP nous allons nous intéresser à la création et à la manipulation d’images avec PHP. Il peut parfois être intéressant de créer des images directement depuis votre site (un graphique par exemple), ou encore manipuler des images pour les redimensionner ou ajouter un copyright. Tout cela PHP peut le faire nativement grâce à la librairie GD. Il existe également beaucoup d’autres librairies qui pourraient vous proposer des fonctionnalités plus ”simples” ou plus ”rapides”. Pour pouvoir manipuler les fichiers, vous devez vous assurer de mettre les droits en écriture et exécution sur votre répertoire. Il faut également vérifier que la librairie GD est activée sur votre hébergement. Pour cela il suffit de faire un fichier php avec une commande phpinfo pour vérifier si GD est bien présent. Vous trouverez toute la document sur la librairie GD sur le site de PHP.net : http://php.net/manual/fr/book.image.php 1 2 3 <?php phpinfo(); ?> Si la librairie est activée vous devriez trouver un bloc ressemblant à celui ci-dessous : 1 1.2 Une histoire de Header Il y a deux façons de générer une image en PHP. — Soit on fait en sorte que notre script PHP renvoie une image (au lieu d’une page web, comme on en avait l’habitude). Dans ce cas, si on va sur la page http://www.monsite.com/testgd.php, une image sera affichée et non pas une page web ! — Soit on demande à PHP d’enregistrer l’image dans un fichier. Il va falloir envoyer ce qu’on appelle un header (un en-tête). Grâce à la fonction header, on va expliquer au navigateur que l’on est en train d’envoyer une image. On peut choisir entre les types d’images suivants : — JPEG : c’est un format très adapté pour les photos par exemple, car on peut utiliser beaucoup de couleurs ; — PNG : c’est le format le plus récent, très adapté dans la plupart des cas. En fait, à moins d’avoir affaire à une photo, le mieux est d’utiliser le PNG. Le code ci-dessous est un exemple de header permettant de renvoyer au navigateur une image PNG. 1 2 3 <?php header ("Content-type: image/png"); ?> ATTENTION : Il ne doit jamais avoir un texte, un espace, un echo, ... avant le header ! Ensuite, on peut créer une image vide par exemple avec le code ci-dessous : 2 1 2 3 4 <?php header ("Content-type: image/png"); $image = imagecreate(200,50); ?> $image ne contient ni un nombre, ni du texte. Cette variable contient une ”image”. On dit que $image est une ”ressource”. Une ressource est une variable un peu spéciale qui contient toutes les informations sur un objet. Ici, il s’agit d’une image, mais il pourrait très bien s’agir d’un PDF ou même d’un fichier que vous avez ouvert avec fopen... 1.3 Exercice Tester le code ci-dessous. Recopier ce code dans un fichier appelé genere image.php 1 2 3 4 5 6 7 <?php header ("Content-type: image/png"); $im = imagecreate(640, 480); $fond = imagecolorallocate($im, 200, 200, 200); $couleur = imagecolorallocate($im, 0, 0, 255); $noir = imagecolorallocate($im, 0, 0, 0); $blanc = imagecolorallocate($im, 255, 255, 255); 8 9 10 11 12 imagefill($im, 0, 0, $fond); Imagefilledrectangle($im, 100, 200, 300, 400, $couleur); // Ecrire des textes avec GD $font = './arial.ttf'; $texte = 'Bonjour !'; 13 14 15 16 17 imagettftext($im, 148, 0, 200, 100, $blanc, $font, $texte ,→ ); imagepng($im); imagedestroy($im); ?> Explications : 1 2 <?php imagettftext($im, 148, 0, 200, 100, $blanc, $font, $texte ,→ ); Les paramètres sont : 3 — L’image — La taille de la police — L’orientation de la police (un angle) — La position x — La position y — La couleur du texte — La police utilisée — Le texte Lancer ce fichier dans votre navigateur est regardé le résultat. Ce résultat est-il correct ? — Créer une image de taille 800x600 pixels, avec un fond noir — Ajouter 100 rectangles de taille et de couleur prise au hasard (utiliser la fonction rand(mini,maxi) qui tire un nombre au hasard entre mini et maxi — Ajouter un texte au milieu de l’image (attention, il faut qu’il soit lisible !) Créez ensuite un fichier php qui va contenir par exemple le code ci-dessous: Toutes les instructions existent pour des images JPEG. 1 2 3 4 5 6 7 8 9 <!DOCTYPE html> <html lang="fr"> <head><meta charset="utf-8" /></head> <body style="font-family: sans-serif;"> <?php echo '<img src="genere_image.php" alt="mon image" />'; ?> </body> </html> Regardez le résultat. 1.4 Manipulation d’une image Nous avons précédemment créé une image à partir de rien. Cette méthode est intéressante pour par exemple obtenir un graphique. Cependant, il peut aussi être intéressant de modifier une image existante. Pour cela on utilise l’instruction suivante : 1 2 3 4 <?php header("Content-type: image/jpeg"); $image = imagecreatefromjpeg("monimage.jpg"); ?> 4 1.5 Exercice — En vous aidant des exemples précédents, indiquez sur l’image un texte. — En utilisant la documentation, récupérez la taille de l’image et essayez d’inscrire un copyright en bas à droite de votre image. Testez avec une autre image pour vous assurer que le copyright reste au bon endroit. — Ecrire un formulaire qui permette l’uplaod d’une image (Semestre 1), et ajoute automatiquement le copyright. Afficher l’image modifiée. 5