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