Au programme aujourd'hui un petit tuto sur les images dynamiques.
C'est une des fonctions super puissantes de php.
La création dynamique d'image fonctionne toujours sur le même principe :
+ Création de l'identifiant de l'image
+ Ajout des détails (texte, couleur, image, dessin...)
+ On modifie les entêtes pour afficher l'image
+ Création de l'image dans un fichier ou envoi de l'image créée au navigateur sans enregistrement.
+ Libération des ressources serveur
Source / Exemple :
-------------------------
Créer un identifiant d'image
Image 256 couleurs
$image = imageCreate($largeur,$hauteur);
Variables : largeur et hauteur en pixel
Image 16 millions de couleurs
$image = imageCreateTrueColor($largeur,$hauteur);
Variables : largeur et hauteur en pixel
-------------------------
Créer un identifiant d'image à partir d'une autre image
Un GIF :
$image = ImageCreateFromGIF($nomfichier);
Variable : Nom du fichier à copier (et son chemin s?il n'est pas dans le même dossier)
Un JPEG :
$image = ImageCreateFromJPEG($nomfichier);
Variable : Nom du fichier à copier (et son chemin s?il n'est pas dans le même dossier)
Un PNG :
$image = ImageCreateFromPNG($nomfichier);
Variable : Nom du fichier à copier (et son chemin s?il n'est pas dans le même dossier)
$image contiendra donc l'identifiant de l'image sur lequel sera effectué les divers travaux
-------------------------
Donner une couleur de fond à l'image et création de sa palette de couleurs
Ajouter une couleur à la palette (cette fonction retourne un identifiant de couleur) :
$couleur = ImageColorAllocate($image,$rouge,$vert,$bleu);
Variables : $image : identifiant de l'image, $rouge : entre 0 et 255, $vert : entre 0 et 255, $bleu : entre 0 et 255
Note : cette fonction ne sert pas qu'à ça mais elle définie la couleur du fond la 1ere fois qu'elle est utilisée.
Couleur la plus proche de la couleur voulue et création de la couleur si elle n'existe pas dans la palette. L'identifiant de la couleur la plus proche de cette
couleur est retournée dans le cas ou la palette est pleine.
Ne tien pas compte de la transparence
$couleur = imageColorResolve($image, $rouge, $vert, $bleu);
Variables : $image : ideAntifiant de l'image, $rouge : entre 0 et 255, $vert : entre 0 et 255, $bleu : entre 0 et 255
Couleur la plus proche de la couleur voulue et création de la couleur si elle n'existe pas dans la palette. L'identifiant de la couleur la plus proche de cette
couleur est retournée dans le cas ou la palette est pleine.
Tien compte de la transparence
$couleur = imageColorResolve($image, $rouge, $vert, $bleu, $alpha);
Variables : $image : identifiant de l'image, $rouge : entre 0 et 255, $vert : entre 0 et 255, $bleu : entre 0 et 255, $alpha
-------------------------
Ecrire sur une image
Ecrire horizontalement sur l'image de façon basic
imagestring($image,$police,$coordonnee_x,$coordonnee_y,$texte,$couleur);
Variable : $image : identifiant de l'image, $police : de 1 à 5 pour les polices par défaut (vous pouvez charger une autre police mais il faut une autre gd
installée, voyez plutôt imagettftext() qui suit quelque ligne plus bas),$coordonnee_x : position du texte par rapport au coté gauche de l'image, $coordonnee_y
: position du texte par rapport au haut de l'image, $texte : J?explique pas ça quand même ;) lol, $couleur : couleur de la police
Ecrire verticalement sur l'image de façon basic
imagestringUP($image,$police,$coordonnee_x,$coordonnee_y,$texte,$couleur);
Variable : $image : identifiant de l'image, $police : de 1 à 5 pour les polices par défaut (vous pouvez charger une autre police mais il faut une autre gd
installée, voyez plutôt imagettftext() qui suit quelque ligne plus bas),$coordonnee_x : position du texte par rapport au coté gauche de l'image, $coordonnee_y
: position du texte par rapport au haut de l'image, $texte : j'explique pas ça quand même ;) lol, $couleur : couleur de la police
Ecrire de façon totalement libre avec la police que vous voulez
imagettftext($image,$taille,$angle,$coordonnee_x,$coordonnee_y,$couleur,$nompolice,$texte);
Variable : $image : identifiant de l'image, $taille : Taille de la police, $angle : inclinaison du texte, $coordonnee_x : position du texte par rapAport au coté
gauche de l'image, $coordonnee_y : position du texte par rapport au haut de l'image, $couleur : couleur de la police, $nompolice : nom de la police (ou
chemin si elle n'est pas dans le dossier, $texte : j'explique pas ça quand même ;) lol
-------------------------
Dessiner sur une image
Dessiner une ligne pleine
imageLine($image, $coordonnée_x1, $coordonnee_y1, $coordonnée_x2, $coordonnee_y2, $couleur)
Variables : $image : identifiant de l'image, $coordonnée_x1 : point de départ par rapport au coté gauche de l'image, $coordonnee_y1 : point de départ par
rapport au haut de l'image, $coordonnée_x2 : point d'arrivé par rapport au coté gauche de l'image, $coordonnee_y2 : point d'arrivé par rapport haut de l'image,
$couleur = couleur du trait
Dessiner une ligne pointillée
imageDashedLine($image, $coordonnée_x1, $coordonnee_y1, $coordonnée_x2, $coordonnee_y2, $couleur)
Variables : $image : identifiant de l'image, $coordonnée_x1 : point de départ par rapport au coté gauche de l'image, $coordonnee_y1 : point de départ par
rapport au haut de l'image, $coordonnée_x2 : point d'arrivé par rapport au coté gauche de l'image, $coordonnee_y2 : point d'arrivé par rapport haut de l'image,
$couleur = couleur du trait
Dessiner une ellipse ou un arc
imageArc($image, $centre_X, $centre_Y, $largeur, $hauteur, $angledebut, $anglefin, $couleur)
Variables : $image : identifiant de l'image,
$centre_X : point du centre de l'éllipse par rapport au coté gauche de l'image, $centre_Y : point du centre de l'éllipse par rapport au haut de l'image, $largeur :
largeur de l'ellipse, $hauteur : hauteur de l'ellipse, $angledebut : angle en degrés ou commence le tracé, $anglefin : angle en degrés ou fini le tracé, $couleur =
couleur du trait
Dessiner une ellipse ou un cercle plein
imageArc($image, $centre_X, $centre_Y, $largeur, $hauteur, $angledebut, $anglefin, $couleur, $style)
Variables : $image : identifiant de l'image, $centre_X : point du centre de l'éllipse par rapport au coté gauche de l'image, $centre_Y A: point du centre de
l'éllipse par rapport au haut de l'image, $largeur : largeur de l'ellipse, $hauteur : hauteur de l'ellipse, $angledebut : angle en degrés ou commence le tracé,
$anglefin : angle en degrés ou fini le tracé, $couleur = couleur du trait, $style : Plusieurs style sont dispo et sont compatible entre eux : IMG_ARC_PIE,
IMG_ARC_CHORD, IMG_ARC_NOFILL, IMG_ARC_EDGED
Dessiner un rectangle
imagerectangle($image, $coordonnee_X1, $coordonnee_Y1, $coordonnee_X2, $coordonnee_Y2, $couleur);
Variables : $image : identifiant de l'image, $coordonnee_X1 : point de départ supérieur gauche par rapport à la gauche, $coordonnee_Y1 : point de départ
supérieur gauche par rapport au haut, $coordonnee_X2 : point de fin inférieure droit par rapport à la gauche, $coordonnee_Y2 : point de fin inférieure droit par
rapport au haut, $couleur : couleur du trait
Dessiner un rectangle plein
imageFilledrectangle($image, $coordonnee_X1, $coordonnee_Y1, $coordonnee_X2, $coordonnee_Y2, $couleur);
Variables : $image : identifiant de l'image, $coordonnee_X1 : point de départ supérieur gauche par rapport à la gauche, $coordonnee_Y1 : point de départ
supérieur gauche par rapport au haut, $coordonnee_X2 : point de fin inférieure droit par rapport à la gauche, $coordonnee_Y2 : point de fin inférieure droit par
rapport au haut, $couleur : couleur du trait
Dessiner un polygone (256 points max)
imagePolygon($image, $point[TABLEAU], $nbpoint, $couleur);
Variables : $image : identifiant de l'image, $point contient les coordonnées de tous les points : $coordonnee_X1 : point 1 par rapport à la gauche,
$coordonnee_Y1 : point 1 par rapport au haut, $coordonnee_X2 : point 2 par rapport à la gauche, $coordonnee_Y2 : point 2 par rapport au haut,
$coordonnee_.............., $nbpoint : la moitié du nombre de point dans le tableau, $couleur : couleur du trait
Dessiner un polygone plein(256 points max)
imageFilledPolygon($image, $point[TABLEAU], $nbpoint, $couleur);
Variables : $image : identifiant de l'image, $point contient les coorAdonnées de tous les points : $coordonnee_X1 : point 1 par rapport à la gauche,
$coordonnee_Y1 : point 1 par rapport au haut, $coordonnee_X2 : point 2 par rapport à la gauche, $coordonnee_Y2 : point 2 par rapport au haut,
$coordonnee_.............., $nbpoint : la moitié du nombre de point dans le tableau, $couleur : couleur du trait
-------------------------
Copie d'image
Copier une partie d'une image dans une autre image
imagecopy($imagedest,$imagesource,$coordonnee_xdest,$coordonnee_ydest,$coordonnee_xsource,$coordonnee_ysource,$largeursource,$hauteursource);
Variables : $imagedest : identifiant de l'image de destination, $imagesource : identifiant de l'image source, $coordonnee_xdest : point par rapport à la gauche
sur l'image de destination la ou vous voulez copier, $coordonnee_ydest : point par rapport au haut sur l'image de destination la ou vous voulez copier,
$coordonnee_xsource : point par rapport à la gauche sur l'image source, $coordonnee_ysource : point par rapport au haut sur l'image source, $largeursource :
largeur du morceau d'image à récupérer, $hauteursource : hauteur du morceau d'image à récupérer
Copier une partie d'une image dans une autre image avec effet de transparence
imagecopymerge($imagedest,$imagesource,$coordonnee_xdest,$coordonnee_ydest,$coordonnee_xsource,$coordonnee_ysource,$largeursource,$hauteurso
urce);
Variables : $imagedest : identifiant de l'image de destination, $imagesource : identifiant de l'image source, $coordonnee_xdest : point par rapport à la gauche
sur l'image de destination la ou vous voulez copier, $coordonnee_ydest : point par rapport au haut sur l'image de destination la ou vous voulez copier,
$coordonnee_xsource : point par rapport à la gauche sur l'image source, $coordonnee_ysource : point par rapport au haut sur l'image source, $largeursource :
largeur du morceau d'image à récupérer, $hauteursource : hauteur du morceau d'image à récupérer, $trans : cooef de transparence
Copier une partie d'une image dans une autre image en changeant de taille lAa sélection
imagecopyresized($imagedest,$imagesource,$coordonnee_xdest,$coordonnee_ydest,$coordonnee_xsource,$coordonnee_ysource,
$largeurdest,$hauteurdest ,$largeursource,$hauteursource);
Variables : $imagedest : identifiant de l'image de destination, $imagesource : identifiant de l'image source, $coordonnee_xdest : point par rapport à la gauche
sur l'image de destination la ou vous voulez copier, $coordonnee_ydest : point par rapport au haut sur l'image de destination la ou vous voulez copier,
$coordonnee_xsource : point par rapport à la gauche sur l'image source, $coordonnee_ysource : point par rapport au haut sur l'image source, $largeurdest :
largeur de l'image une fois copiée , $hauteurdest : hauteur de l'image une fois copiée, $largeursource : largeur du morceau d'image à récupérer,
$hauteursource : hauteur du morceau d'image à récupérer, $trans : cooef de transparence
Copier une partie d'une image dans une autre image en changeant de taille la sélection (méthode non pixelisée)
imagecopyresampled($imagedest,$imagesource,$coordonnee_xdest,$coordonnee_ydest,$coordonnee_xsource,$coordonnee_ysource,
$largeurdest,$hauteurdest ,$largeursource,$hauteursource);
Variables : $imagedest : identifiant de l'image de destination, $imagesource : identifiant de l'image source, $coordonnee_xdest : point par rapport à la gauche
sur l'image de destination la ou vous voulez copier, $coordonnee_ydest : point par rapport au haut sur l'image de destination la ou vous voulez copier,
$coordonnee_xsource : point par rapport à la gauche sur l'image source, $coordonnee_ysource : point par rapport au haut sur l'image source, $largeurdest :
largeur de l'image une fois copiée , $hauteurdest : hauteur de l'image une fois copiée, $largeursource : largeur du morceau d'image à récupérer,
$hauteursource : hauteur du morceau d'image à récupérer, $trans : cooef de transparence
Copier une image avec un fond transparent sur une image sans fond transparent (et inversement)
imagealphablending($image,$alpha);
Variables : $image : identiAfiant de l'image, $alpha : TRUE pour garder la transparence, sinon FALSE. Par défaut c'est FALSE.
-------------------------
Taille d'une image
Largeur
imageSX($image);
Variable : $image : identifiant de l'image
Hauteur
imageSY($image);
Variable : $image : identifiant de l'image
Divers
Getimagesize($nom);
Variable : $nom : nom ou chemin du fichier
Renvoi un tableau :
[0] -> largeur en pixel
[1] -> hauteur en pixel
[2] -> Format (1 : GIF, 2 : JPG, 3 : PNG, 4 : SWF, 5 : PSD, 6 : BMP, 7 : TIFF(intel), 8 : TIFF(motorola), 9 : JPC, 10 : JP2, 11 JPX)
[3] -> code html de la taille d'une image witdh="xx" height="xx"
-------------------------
Modification des entêtes
Affichage de GIF
header("Content-type: image/gif");
Affichage de JPEG
header("Content-type: image/jpeg");
Affichage de PNG
header("Content-type: image/png");
ATTENTION
La modification des entêtes empeche l'affichage des messages d'erreur (si vous modifiez les entêtes pour afficher une image et qu'une erreur se produit, le
message ne s'affichera pas puisque le navigateur attend une image).
Donc ne modifiez les entêtes que juste AVANT LA CREATION DE L'IMAGE et pas en haut du script.
-------------------------
Génération de l'image : Envoyer l'image au navigateur ou l'enregistrer dans le format voulu
Un GIF :
ImageGIF($image,$nom);
Variables : $image = identifiant de l'image, $nom = nom final de l'image AVEC le .GIF
Si $nom est vide, l'image ne sera pas enregistrée dans un fichier mais juste envoyée au navigateur.
Un JPEG :
ImageJPEG($image,$nom);
Variables : $image = identifiant de l'image, $nom = nom final de l'image AVEC le .JPEG
Si $nom est vide, l'image ne sera pas enregistrée dans un fichier mais juste envoyée au navigateur.
Un PNG :
ImagePNG($image,$nom);
Variables : $image = identifiant de l'image, $nom = nom final de l'image AVEC le .PNG
Si $nom est vide, l'image ne sera pas enregistrée dans un fichier mais juste envoyée au navigateur.
L'image est donc réellement créée. Le fichier existe sur le serveur (si vous lui avez donnez un nom)
Mais les ressources utilisées par le serveur pour la créer sont toujours occupées.
-------------------------
Libération des ressources
ImageDestroy();
Variable : Aucune
Utilisation des images dynamiques :
+ Si vous créez une image dans un fichier et que vous voulez l'afficher dans une page écrivez <img src="nomdelapageduscript.php">.
>>>>>>>> Page imagecreate.php
<?
//Création de l'identifiant de l'image
$image = imagecreate(200,400);
// couleur de fond de l'image
$fond = imagecolorallocate($image,0,0,0);
// définition des couleurs
$blanc = imagecolorresolve($image,255,255,255);
$rouge = imagecolorresolve($image,240,0,0);
$bleu = imagecolorresolve($image,150,150,255);
$vert = imagecolorresolve($image,0,150,0);
// On écrit une petite pub pour mon site
imagettftext($image,20,350,10,20,$blanc,"DEFTONE.TTF","http://www.kame-house.org");
// On souligne pour mettre en évidence
imagedashedline($image,15,30,180,60,$rouge);
// On met un petit menu
imagettftext($image,18,0,10,75,$bleu,"DEFTONE.TTF","- Accueil");
imagettftext($image,18,0,10,100,$bleu,"DEFTONE.TTF","- Identification");
imagettftext($image,18,0,10,125,$bleu,"DEFTONE.TTF","- Boite de reception");
imagettftext($image,18,0,10,150,$bleu,"DEFTONE.TTF","- Livre d'or");
// On dessine une fleche
imagefilledpolygon($image,array(150,200,140,250,190,300,100,250,150,200),5,$bleu);
// On écrit encore
imagettftext($image,25,0,20,250,$rouge,"DEFTONE.TTF","Image");
imagettftext($image,25,0,10,270,$rouge,"DEFTONE.TTF","Dynamik");
// Image a copier en partie
$imagesource = imagecreatefromjpeg("coyot.jpg");
// On prend un petit morceau de l'image, on le rend presque transparente et on le colle
imagecopymerge($image,$imagesource,25,285,80,80,100,100,35);
imagettftext($image,18,270,180,100,$vert,"DEFTONE.TTF","========= Copyright Tortue Geniale =========");
// modification des entêtes
header("Content-type: image/jpeg");
// Envoi au navigateur
imagejpeg($image, "",100);
// Libération des ressources
imagedestroy();
?>
Conclusion :
Je n'ai pas mis toutes les fonctions (sinon j'y serai encore lol) mais juste celle que j'utilise ainsi que les plus utiles.
J'ai l'habitude de ne pas macher le travail, pourquoi changer aujourd'hui :p lol
Pour completer ce tutorial, vous pouvez regarder du coté de la palette et de sa gestion.
ATTENTION : certaines fonctions (comme imagecreatefromgif();) ne fonction qu'avec une GD 2.0 et pas inférieur. Donc Sous Easy PHP 1.6 ça ne passe pas.
Le Zip contient :
+ Le tuto en .txt
+ L'image que j'ai utilisé pour l'exemple
+ La police (jolie d'ailleur)
+ La page PHP de l'exemple
L'exemple c'est comme d'habitude : Copier coller et ça marche.
Voila bon coding ;)
http://www.kame-house.org
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.