Chapitre 8
COMPLEMENTS DE PHP
Manipulation des images
 
 
Précédent Suivant
 

Compléments de PHP
Manipulation des images
Générer une image avec PHP
* Besoin du module graphique GD2
* Avec EasyPHP, modifier le fichier "php.ini"
* Faire un lien sur une image générée par PHP
* <img src="image.php"/>
* Indiquer que PHP génère une image
* header("Content-type: image/png");
* header("Content-type: image/gif");
* ...
* Exemple
$heure = date("H");
if ($heure < 8) $image = "nuit.gif";
else if ($heure < 12) $image = "matin.gif";
else if ($heure < 14) $image = "midi.gif";
else if ($heure < 18) $image = "apres-midi.gif";
else $image = "soir.gif";
readfile($image);
Dessiner avec PHP
* Créer un objet image
* Fournir la taille en pixels
* $image = imageCreate($largeur,$hauteur);
* Créer des couleurs associées à l'objet image
* Couleur = code RGB (Red-Green-Blue)
* $rouge = imageColorAllocate($image,255,0,0);
* Dessiner dans l'objet image
* Produire un fichier image à partir de l'objet
* A la requête HTTP "image.php" le serveur renvoie une image
* imagePNG($image);
* imageGIF($image);
* ...
* Détruire l'objet image (libérer la mémoire)
* imageDestroy($image);
Quelques fonctions pour dessiner
* Tracer une ligne
* imageLine($image,$x1,$y1,$x2,$y2,$couleur);
* ($x1,$y1): première coordonnée
* ($x2;$y2): seconde coordonnée
* Tracer un rectangle plein
* imageFilledRectangle($image,$x1,$y1,$x2,$y2,$couleur);
* ($x1,$y1): coin supérieur gauche
* ($x2;$y2): coin inférieur droit
* Dessiner un texte
* imageString($image,$fonte,$x,$y,$texte,$couleur);
* $fonte: numéro de la fonte
* ($x;$y): coordonnée de départ du texte
* Copier une image
* imageCopy($cible,$source,$x1,$y1,$x2,$y2,$largeur,$hauteur);
* $cible: image cible
* $source: image source
* ($x1;$y1): coordonnée où copier la source dans la cible
* ($x2;$y2): coin supérieur gauche de la zone de la source à copier
* ($largeur;$hauteur): dimension de la zone de la source à copier
* Créer un objet image à partir d'un fichier
* imageCreateFromPNG($chemin);
Compteur des visites (1/2)
* Identification basée sur l'IP du visiteur
* $ip = $_SERVER["REMOTE_ADDR"];
* Table "trace" stocke adresses IP + dates des visites
* Utiliser fonction "time" (date courante en secondes)
* Table "global" stocke les variables globales du site
* Compteur mémorisé dans table "global"
* Compteur incrémenté si l'IP ne s'est pas connectée depuis 1 heure
* A chaque visite, nettoyage de la table
* Si date courante > date visite + 1 heure ==> suppression trace
* Nettoyage effectué avant chaque comptabilisation de visite
* IP non présente dans "trace" ==> incrémentation compteur
Compteur des visites (2/2)
* Ecrire un code PHP qui compte les visites
* Lien sur ce code dans toutes les pages
* Code HTML
<img src="trace.php"/>
* Code JavaScript
image = new Image();
image.src = "trace.php";
* Ecrire une page qui génère une image du compteur
* Utilisation: <img src="compteur.php"/>
* Un fichier image par chiffre stocké sur le serveur
* A partir de ces images, générer le nombre du compteur
Fichiers binaires en base de données
* Avantages
* Pas de problèmes avec les droits des fichiers
* Sauvegarde des données facilitée
* Plus de risque d'incohérence entre les fichiers et la base
* Données protégées: elles ne sont pas accessibles par URL
* Inconvénients
* Taille importante de la base de données
* Ralentissement de la base de données
* Impossible d'accéder aux fichiers directement par URL
* Attention à la requête "SELECT * from image"
Côté MySQL
* Attribut de type "BLOB"
* Binary Large OBject
* BLOB, TINYBLOB, MEDIUMBLOB, LONGBLOB
* Déterminer le type MIME au moment du dépôt
* $type = $_FILES[$image]["type"];
* Base de données "image"
* Nom ("nom")
* Taille en octets ("taille")
* Type MIME ("type")
* Contenu binaire ("contenu")
Côté PHP
* Récupérer le contenu binaire
* $contenu = file_get_contents($_FILES[$image]["tmp_name"]);
* Insertion en base de données
* Attention aux caractères spéciaux
* $contenu = addSlashes($contenu);
* INSERT INTO image (nom,taille,type,contenu)
VALUES ('$nom','$taille','$type','$contenu')
* Génération image
$requete = "SELECT * FROM image WHERE nom='$nom'";
$resultat = @mysql_query($requete);
$enr = @mysql_fetch_array($resultat);
if ($enr) {
header("Content-type: $enr['type']");
echo $enr["contenu"];
}
Galerie de photos
* Modéliser une galerie de photographies
* Diagramme des cas d'utilisation
* Diagramme de classes
* Modèle de données entité-association
* Hypothèses
* Plusieurs rubriques
* Possibilité de dépôt des images
* Stockage des images en base de données
* Possibilité de se déplacer dans une rubrique