Tout sur les images dynamiques

Description

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

Codes Sources

A voir également

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.