Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Officiels > Site Web > Lecture du tutoriel

Créer des images en PHP

Avatar
Auteur : M@teo21
Créé : le 20/08/2005 15:25:36
Modifié : le 03/07/2008 11:09:14
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Vous savez quoi ? Il y a des gens qui croient que le PHP c'est fait que pour générer des pages web !
Si si je vous jure ! :lol:

Quoi, vous aussi ? :euh:
Bon remarquez, je peux pas vous en vouloir non plus : tout le long de ce cours, on n'a fait "que" générer des pages HTML avec PHP. Difficile de croire que l'on pourrait faire autre chose...

En fait, à la base, PHP a bien été créé pour réaliser des pages web. Mais, au fur et à mesure, on s'est rendu compte qu'il serait dommage de le limiter à ça. On a donc prévu de pouvoir lui rajouter des "extensions". Ainsi, en rajoutant certains fichiers (des DLL sous Windows), PHP peut alors se mettre à générer des images, ou même des PDF !
Dans ce chapitre, nous allons parler de l'extension spécialisée dans la génération d'images, il s'agit de la librairie GD.

Ne vous y trompez pas : ce que je vais vous apprendre c'est toujours du PHP ! Et vous allez pouvoir faire grâce à ce chapitre des choses vraiment passionnantes, vous pouvez me croire ! :D
Sommaire du chapitre :
Chapitre précédent Sommaire Chapitre suivant

Activer la librairie GD

On a déjà un problème (ça commence fort :p )
En effet, la librairie GD (qui vous permet de créer des images) est livrée avec PHP, mais elle n'est pas activée. Ca veut dire quoi ? Qu'il va falloir demander de l'activer tout simplement ;)

Pour ce faire, il suffit de cliquer avec le bouton gauche de la souris sur l'icône de WAMP dans la barre des tâches, puis d'aller dans "Configuration PHP", "Extension PHP" (tout en bas), et enfin de cliquer sur "php_gd2" dans la longue liste qui s'affiche devant vous.

Autrement dit, en image :

Image utilisateur


WAMP va relancer automatiquement le serveur Apache pour qu'il prenne en compte les changements. Vous n'avez rien de plus à faire, GD est activé sur votre ordinateur :)

Et sur Internet avec mon hébergeur ? Est-ce que je peux utiliser GD ?
Ca dépend des hébergeurs. Une grande partie des hébergeurs gratuits désactivent GD parce que ça consomme beaucoup de ressources du processeur.
Si des dizaines de sites se mettent à générer des images en même temps, ça risquerait de faire ramer toute la machine et donc de ralentir tous les autres sites ^^

Ne désespérez pas pour autant, il existe certainement des hébergeurs gratuits qui acceptent la librairie GD... Sinon, il faudra peut-être trouver un hébergement payant (on peut en trouver des pas chers qui ont activé GD !).

Les bases de la création d'image

Vous avez réussi à surmonter le premier problème ?
Bravo, c'était le plus difficile :p

Voici le plan que nous allons suivre pour créer une image :
  1. On va voir ce que c'est un header.
  2. Ensuite, on va créer l'image de base.
  3. Enfin, on verra comment on affiche l'image quand on a fini.
Y'a du boulot ^^

Le header



Il y a 2 façons de générer une image en PHP :
Dans les 2 cas, on utilisera exactement les mêmes fonctions.
On va commencer par la première façon de générer l'image, c'est-à-dire qu'on va faire en sorte que notre script "renvoie" une image au lieu d'une page web.

Mais comment faire pour que le navigateur sache que c'est une image et non pas une page HTML qu'il doit afficher ?

Il va falloir envoyer ce qu'on appelle un header (en-tête). Grâce à la fonction header, on va "dire" au navigateur que l'on est en train d'envoyer une image.
Je vous rappelle les types d'images les plus courants sur le web :

Donc pour faire simple : si c'est une photo, vous faites un JPEG, sinon dans tous les autres cas vous faites un PNG

Voici le code PHP qu'il faut mettre pour "annoncer" au navigateur que l'on va renvoyer une image PNG :

Code : PHP
1
2
3
<?php
header ("Content-type: image/png");
?>

Voilà, c'est assez simple. Ce code signifiera pour le navigateur que l'on envoit une image PNG, et non pas une page HTML.
Si vous envoyez un JPEG, c'est presque pareil, mais vous remplacez le "png" par "jpeg".

La fonction header est particulière. Comme setcookie, elle doit être utilisée avant d'avoir écrit le moindre code HTML.
En clair, mettez cette ligne tout au début de votre code, et vous n'aurez pas de problèmes.


Créer l'image de base



Il faut savoir qu'il y a 2 façons de créer une image : soit vous créez une nouvelle image vide, soit vous chargez une image qui existe déjà et qui servira de fond à votre nouvelle image.

Voilà, vous savez créer une nouvelle image.
Nous allons maintenant voir comment afficher cette image que vous venez de créer.

Quand on a terminé : on affiche l'image



Une fois que vous avez chargé l'image, vous vous amusez à écrire du texte dedans, à faire des cercles, des carrés etc... Ca, nous allons l'apprendre juste après.
Là, je vais vous montrer comment on fait pour dire à PHP qu'on a fini et qu'on veut afficher l'image.

La fonction à utiliser dépend du type de l'image que vous êtes en train de créer :

Ces 2 fonctions marchent de la même manière : vous avez juste besoin d'indiquer quelle est l'image que vous voulez afficher.

Il faut savoir qu'il y a 2 façons d'utiliser les images en PHP : vous pouvez les afficher directement après les avoir créées, ou vous pouvez les enregistrer sur le disque pour pouvoir les réafficher plus tard sans avoir à refaire tous les calculs.

Mais... Mais ??? Si je teste ces codes, ça crée une image toute blanche ! C'est nul, il s'est rien passé de bien !

Oui, je sais. Vous avez été patients et c'est bien parce que c'est maintenant que ça va devenir intéressant.
Allez donc chercher votre baguette magique, je vous attends :magicien:

Texte et couleur

C'est bon, vous avez votre baguette magique ? :lol:
Alors voici ce que nous allons apprendre à faire maintenant :

Vous allez commencer à voir un peu ce qu'il est possible de faire grâce à la librairie GD, mais vous verrez plus loin qu'on peut faire bien plus ^^

Manipuler les couleurs



Un ordinateur, il faut le savoir, décompose chaque couleur en Rouge-Vert-Bleu. En mélangeant les quantités de rouge, vert et bleu, ça nous donne une couleur parmi les millions de possibilités !

On indique la "quantité" de rouge, vert et bleu par un nombre compris entre 0 et 255.

On doit écrire les 3 quantités dans l'ordre RVB (Rouge Vert Bleu). Par exemple :
255 0 0
Ca, c'est une couleur qui contient plein de rouge, et pas du tout de vert ni de bleu. C'est donc la couleur... rouge ! Bravo ! :D

Maintenant, si je mets plein de rouge et de vert :
255 255 0
Ca nous donne la couleur : jaune !

Allez un dernier essai pour la route et on arrête là :
255 128 0
Ca, c'est la couleur orange !

Pour info, la couleur blanche correspond à (255 255 255), et la couleur noire à (0 0 0).

Si vous avez un logiciel de dessin comme Paint et que vous allez dans le menu Couleur / Modifier les couleurs, vous pouvez choisir la couleur que vous voulez :

Image utilisateur

Comme vous pouvez le voir, en cliquant sur la couleur qui vous intéresse on vous donne les quantités de Rouge Vert Bleu.
Vous pouvez donc choisir la couleur que vous voulez. Allez-y, servez-vous ^^

Mais revenons à ce qui nous intéresse : PHP (c'est bien pour ça que vous êtes là non ? :lol: )
Pour définir une couleur en PHP, on doit utiliser la fonction : imagecolorallocate.

On lui donne 4 paramètres : l'image sur laquelle on travaille, la quantité de rouge, la quantité de vert, et la quantité de bleu.
Cette fonction nous renvoit la couleur dans une variable. Grâce à cette fonction, on va pouvoir se créer plein de "variables-couleur" qui vont nous être utiles pour indiquer la couleur ensuite.
Voici quelques exemples de création de couleur :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
header ("Content-type: image/png");
$image = imagecreate(200,50);

$orange = imagecolorallocate($image, 255, 128, 0);
$bleu = imagecolorallocate($image, 0, 0, 255);
$bleuclair = imagecolorallocate($image, 156, 227, 254);
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);

imagepng($image);
?>

Et voilà, on s'est préparés plein de couleurs qui vont beaucoup nous servir ensuite ! :)

Une chose très importante à noter : la première fois que vous faites un imagecolorallocate, cette couleur devient la couleur de fond de votre image.
Donc, si vous avez bien compris, ce code doit créer une image... toute orange ! Essayez !

Si j'avais voulu que le fond soit blanc et pas orange, il aurait fallu mettre la ligne "$blanc..." en premier.

Voilà, vous savez maintenant créer toutes les couleurs de l'arc-en-ciel en PHP (et même plus :lol: )

Ecrire du texte



Nous voici enfin dans le vif du sujet (ouf !).
Nous avons une belle image avec un maaagnifique fond orange, et nous voulons écrire du texte dedans.
Avec la fonction imagestring, c'est facile !

Cette fonction prend pas mal de paramètres. Elle s'utilise comme suit :
imagestring($image, $police, $x, $y, $texte_a_ecrire, $couleur);

Il existe aussi la fonction imagestringup qui fonctionne exactement pareil, sauf qu'elle écrit le texte verticalement au lieu d'horizontalement !

Je vous détaille les paramètres dans l'ordre, c'est important que vous compreniez bien :

Voici un exemple concret de ce qu'on peut faire :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?php
header ("Content-type: image/png");
$image = imagecreate(200,50);

$orange = imagecolorallocate($image, 255, 128, 0);
$bleu = imagecolorallocate($image, 0, 0, 255);
$bleuclair = imagecolorallocate($image, 156, 227, 254);
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);

imagestring($image, 4, 35, 15, "Salut les Zér0s !", $blanc);

imagepng($image);
?>


La ligne avec imagestring peut se traduire par : Mets dans l'image $image, avec la police de taille 4, aux coordonnées (35, 15), le texte "Salut les Zér0s !", de couleur blanche.

Bien entendu, vous me direz qu'avec un bon Photoshop (ou même Paint), on peut faire pareil et c'est moins compliqué.
Oui c'est vrai, mais l'avantage c'est qu'on est en PHP là ! On peut donc faire varier le texte à afficher.

Un exemple ? Je souhaite afficher l'heure qu'il est, mais sur un fond différent selon qu'il fait jour ou qu'il fait nuit :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
header ("Content-type: image/png");
$image = imagecreate(200,50);

if (date("H") > 8 AND date("H") < 20) // Il fait jour
{
    $fond = imagecolorallocate($image, 143, 190, 241); // Fond bleu clair
    $couleur_texte = imagecolorallocate($image, 0, 255, 0); // Texte en vert
}
else // Il fait nuit
{
    $fond = imagecolorallocate($image, 0, 0, 0); // Fond noir
    $couleur_texte = imagecolorallocate($image, 255, 255, 255); // Texte en blanc
}

$heure = 'Il est ' . date('H\h i'); // On stocke l'heure et les minutes dans une variable

imagestring($image, 5, 40, 15, $heure, $couleur_texte); // On affiche l'heure dans la bonne couleur

imagepng($image);
?>


C'est assez simple : je teste l'heure pour voir s'il fait jour ou pas, et en fonction de ça j'utilise des couleurs différentes. Je vous rappelle que le premier imagecolorallocate définit la couleur de fond de l'image.
Je stocke la couleur du texte dans une variable pour m'en resservir plus loin : ça me permettra d'afficher le texte dans la bonne couleur, selon qu'il fait jour ou qu'il fait nuit.

Pour vérifier si le changement de couleur fonctionne bien (et que je ne bluffe pas :lol: ), revenez tester cet exemple à un autre moment de la journée :p

Vous pourriez améliorer ce script en chargeant une image de fond différente selon qu'il fait jour ou qu'il fait nuit. S'il fait jour vous chargez une photo de soleil en fond, et s'il fait nuit vous chargez une photo de Lune.
Vous allez voir que ça a de suite plus de classe ! ^^

Dessiner une forme

Dessiner du texte c'est bien, mais ça serait bête si on était limités à ça. Heureusement, PHP a pensé à tout !
Graphistes en herbe, vous allez certainement trouver votre bonheur dans toutes ces fonctions : vous pouvez créer des lignes, des rectangles, des cercles, des polygones...

Je vais vous présenter la plupart de ces fonctions ci-dessous, et je vous montrerai ce que ça donne dans une image de taille 200x200, histoire d'avoir un aperçu :)

FonctionDescriptionAperçu
ImageSetPixel ($image, $x, $y, $couleur); Dessine un pixel aux coordonnées (x, y) Image utilisateur
ImageSetPixel ($image, 100, 100, $noir);
ImageLine ($image, $x1, $y1, $x2, $y2, $couleur); Dessine une ligne entre 2 points de coordonnées (x1, y1) et (x2, y2) Image utilisateur
ImageLine ($image, 30, 30, 120, 120, $noir);
ImageEllipse ($image, $x, $y, $largeur, $hauteur, $couleur); Dessine une ellipse, dont le centre est aux coordonnées (x, y), de largeur $largeur et de hauteur $hauteur. Image utilisateur
ImageEllipse ($image, 100, 100, 100, 50, $noir);
ImageFilledEllipse ($image, $x, $y, $largeur, $hauteur, $couleur); Pareil que ImageEllipse, sauf que l'ellipse est entièrement coloriée dans la couleur que vous avez demandée. Image utilisateur
ImageFilledEllipse ($image, 100, 100, 100, 50, $noir);
ImageRectangle ($image, $x1, $y1, $x2, $y2, $couleur); Dessine un rectangle, dont le coin en haut à gauche est de coordonnées (x1, y1) et celui en bas à droite (x2, y2) Image utilisateur
ImageRectangle ($image, 30, 30, 160, 120, $noir);
ImageFilledRectangle ($image, $x1, $y1, $x2, $y2, $couleur); Pareil que ImageRectangle, sauf que le rectangle est cette fois entièrement colorié. Image utilisateur
ImageFilledRectangle ($image, 30, 30, 160, 120, $noir);
ImagePolygon ($image, $array_points, $nombre_de_points, $couleur); Dessine un polygône ayant un nombre de points égal à $nombre_de_points (s'il y a 3 points, c'est donc un triangle).L'array $array_points contient les coordonnées de tous les points du polygone dans l'ordre : x1, y1, x2, y2, x3, y3, x4, y4... Image utilisateur
$points = array(10, 40, 120, 50, 160, 160);
ImagePolygon ($image, $points, 3, $noir);
ImageFilledPolygon ($image, $array_points, $nombre_de_points, $couleur); Pareil que ImagePolygon, mais cette fois le polygône est colorié à l'intérieur. Image utilisateur
$points = array(10, 40, 120, 50, 160, 160);
ImageFilledPolygon ($image, $points, 3, $noir);


On peut aussi dessiner des lignes plus épaisses. Pour cela, il faut utiliser la fonction ImageSetThickness. On doit préciser l'image concernée et l'épaisseur voulue (en pixels) :
ImageSetThickness ($image, $epaisseur);
Lorsque vous changez l'épaisseur, toutes les formes que vous dessinez après gardent cette épaisseur. Pour revenir à l'épaisseur initiale (1 pixel), il faut donc refaire appel à ImageSetThickness en demandant une épaisseur de 1.

Voilà, c'est pas bien compliqué pourvu qu'on sache bien manier les coordonnées des pixels ;)

Des fonctions encore plus puissantes

Des rectangles, des ellipses, des lignes... Ouais bof. C'est tout ce qu'on peut faire ?

Bien sûr que non ! Il y a d'autres fonctions que je veux absoluement vous montrer parce qu'elles permettent de faire de très belles choses facilement !
Nous allons apprendre à :

J'espère que vous êtes encore en forme, ça serait dommage de s'endormir sur les fonctions les plus intéressantes :p

Rendre une image transparente



Tout d'abord, il faut savoir que seul le PNG peut être rendu transparent. En effet, un des gros défauts du JPEG est qu'il ne supporte pas la transparence.
Nous allons donc ici travailler sur un PNG.

Rendre une image transparente est d'une facilité déconcertante
Il suffit d'utiliser la fonction imagecolortransparent et de lui indiquer quelle est la couleur que l'on veut rendre transparente. Cette fonction s'utilise comme ceci :
imagecolortransparent($image, $couleur);

Je vais reprendre l'exemple de l'image où j'ai écrit "Salut les Zér0s !" sur un vieux fond orange, et je vais y rajouter la fonction imagecolortransparent pour rendre ce fond transparent :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<?php
header ("Content-type: image/png");
$image = imagecreate(200,50);

$orange = imagecolorallocate($image, 255, 128, 0); // Le fond est orange (car c'est la première couleur)
$bleu = imagecolorallocate($image, 0, 0, 255);
$bleuclair = imagecolorallocate($image, 156, 227, 254);
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);

imagestring($image, 4, 35, 15, "Salut les Zér0s !", $noir);
imagecolortransparent($image, $orange); // On rend le fond orange transparent

imagepng($image);
?>

Et voilà le PNG transparent que ça nous donne :
Image utilisateur

Sympa, non ? :D

Mélanger deux images



Ca, c'est un tout petit peu plus compliqué que de rendre une image transparente, mais bon je vous rassure c'est loin d'être insurmontable quand même et ça en vaut la peine :)
La fonction que je vais vous présenter permet de "fusionner" deux images en jouant sur un effet de transparence. Ca a l'air tordu comme ça, mais c'est en fait quelque chose de vraiment génial !

On peut s'en servir par exemple pour afficher le logo de son site sur une image.
Voici le logo :

Image utilisateur

Et voici l'image en question :

Image utilisateur

La fonction qui permet de réaliser la fusion entre 2 images est : imagecopymerge.
Ce script est un peu plus gros que les autres, alors je préfère vous le donner tout de suite. Je vous expliquerai juste après comment il fonctionne.

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
header ("Content-type: image/jpeg"); // L'image que l'on va créer est un jpeg

// On charge d'abord les images
$source = imagecreatefrompng("logosdz.png"); // Le logo est la source
$destination = imagecreatefromjpeg("couchersoleil.jpg"); // La photo est la destination

// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);

// On veut placer le logo en bas à droite, on calcule les coordonnées où on doit placer le logo sur la photo
$destination_x = $largeur_destination - $largeur_source;
$destination_y =  $hauteur_destination - $hauteur_source;

// On met le logo (source) dans l'image de destination (la photo)
imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 60);

// On affiche l'image de destination qui a été fusionnée avec le logo
imagejpeg($destination);
?>

Voici le zôôli résultat que donne ce script :

Image utilisateur

C'est là normalement qu'on dit : "Ouah trop puissant !" o_O
En effet, imagecopymerge c'est une fonction vraiment sympa, parce que maintenant vous allez pouvoir "copyrighter" automatiquement toutes les images de votre site si vous le voulez :)

Notez toutefois que le résultat rend "bien" sur mon exemple parce que le logo a un fond noir. Il s'incruste donc facilement dans l'image.
En pratique, la fusion ne sera peut-être pas aussi jolie qu'ici si les fonds ne correspondent pas.

Cependant, le script utilisé ici est un petit peu plus complexe, et je crois que quelques explications ne seraient pas de refus :p
Voici donc les points à bien comprendre :

Concrètement, on peut se servir de ce code pour faire une page "copyrighter.php". Cette page prendra un paramètre : le nom de l'image à copyrighter.
Par exemple, si vous voulez copyrighter automatiquement "tropiques.jpg", vous afficherez l'image comme ceci :
<img src="copyrighter.php?image=tropiques.jpg" />

A vous maintenant d'écrire la page copyrighter.php ;)
Si vous vous basez sur le script que je vous ai donné, ça ne devrait pas être bien long. Il faut juste récupérer le nom de l'image à charger (via la variable $_GET['image']). Arf, ça y est je vous ai tout dit :p

Redimensionner une image



C'est une des fonctionnalités les plus intéressantes de la librairie GD à mon goût. Ca permet de créer des miniatures de nos images.
Vous pouvez vous en servir par exemple pour faire une galerie de photos. Vous affichez les miniatures et si vous cliquez sur l'une d'elles, ça l'affiche dans sa taille originale.

Pour redimensionner une image, on va utiliser la fonction imagecopyresampled. C'est une des fonctions les plus poussées car elle fait beaucoup de calculs mathématiques pour créer une miniature de bonne qualité. Le résultat est très bon, mais cela donne énormément de travail au processeur.

Cette fonction est donc puissante mais lente. Tellement lente que certains hébergeurs désactivent la fonction pour éviter que le serveur ne rame.
Il serait suicidaire d'afficher directement l'image à chaque chargement d'une page. Nous allons donc créer la miniature une fois pour toutes et l'enregistrer dans un fichier.

Nous allons donc enregistrer notre miniature dans un fichier (par exemple "mini_couchersoleil.jpg"). Cela veut dire qu'on peut déjà virer la première ligne (le header) qui ne sert plus à rien.

Comme pour imagecopymerge, on va avoir besoin de 2 images : la source et la destination. Ici, la source c'est l'image originale, et la destination c'est l'image miniature que l'on va créer.

La première chose à faire sera donc de créer une nouvelle image vide... Avec quelle fonction ? imagecreate ? Oui, c'est presque la bonne réponse.
Le problème voyez-vous, c'est que imagecreate crée une nouvelle image dont le nombre de couleurs est limité (256 couleurs maximum en général). Or, notre miniature contiendra peut-être plus de couleurs que l'image originale à cause des calculs mathématiques.
On va donc devoir utiliser une autre fonction dont je ne vous ai pas encore parlé : imagecreatetruecolor. Elle fonctionne de la même manière que imagecreate, mais cette fois l'image pourra contenir beaucoup plus de couleurs

Voici le code que je vais utiliser pour générer la miniature de ma photo "couchersoleil.jpg" :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<?php
$source = imagecreatefromjpeg("couchersoleil.jpg"); // La photo est la source
$destination = imagecreatetruecolor(200, 150); // On crée la miniature vide

// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);

// On crée la miniature
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);

// On enregistre la miniature sous le nom "mini_couchersoleil.jpg"
imagejpeg($destination, 'mini_couchersoleil.jpg');
?>

Avant on avait ça :

Image utilisateur

Et grâce à imagecopyresampled, on a obtenu ça :

Image utilisateur

Je sais pas ce que vous en pensez, mais moi je trouve ça très efficace
Vous pouvez afficher ensuite l'image avec le code HTML :
<img src="mini_couchersoleil.jpg" alt="Coucher de soleil" />

Bon comment ça marche ?
On crée notre miniature vide avec imagecreatetruecolor en dimension réduite (200 x 150).
Je vous ai déjà expliqué les fonctions imagesx et imagesy, je ne reviens pas dessus. Voyons plutôt quels sont les paramètres de la fonction imagecopyresampled :
  1. L'image de destination : c'est $destination, l'image qu'on a créé avec imagecreatetruecolor.
  2. L'image source : l'image dont on veut créer la miniature, ici c'est notre couchersoleil.jpg qu'on a chargé avec imagecreatefromjpeg.
  3. L'abscisse du point où vous placez la miniature sur l'image de destination : pour faire simple, on va dire que notre image de destination contiendra uniquement la miniature. Donc on placera la miniature aux coordonnées (0, 0), ce qui fait qu'il faut mettre 0 à cette valeur.
  4. L'ordonnée du point où vous placez la miniature sur l'image de destination : pour les mêmes raisons, mettez 0.
  5. L'abscisse du point de la source : ici, on prend toute l'image source et on en fait une miniature. Pour tout prendre, il faut partir du point (0, 0), ce qui fait que là encore on met 0 à cette valeur.
  6. L'ordonnée du point de la source : encore 0.
  7. La largeur de la miniature : un des paramètres les plus importants, qui détermine la taille de la miniature à créer. Dans notre cas notre miniature fait 200 pixels de large. On a stocké ce nombre dans la variable $largeur_destination.
  8. La hauteur de la miniature : de même pour la hauteur de la miniature à créer.
  9. La largeur de la source : il suffit d'indiquer la taille de notre image source. On a stocké cette valeur dans $largeur_source, donc on la réutilise ici.
  10. La hauteur de la source : de même pour la hauteur.

Comme vous pouvez le voir, imagecopyresampled permet de faire beaucoup de choses, et en général on ne se servira pas de tout.
Pas mal de paramètres sont à 0, et c'est pas vraiment la peine de chercher à comprendre pourquoi (même si c'est pas bien compliqué). Basez-vous sur mon exemple pour créer vos miniatures, et le tour sera joué :)

Q.C.M.

A quoi sert cette fonction ?

Code : PHP
1
2
3
<?php
header ("Content-type: image/png");
?>
Comment faire pour enregistrer une image au lieu de l'afficher directement ?
Quelle est la particularité de la première couleur créée avec imagecolorallocate ?
Pour indiquer à PHP une couleur, on doit lui indiquer trois composantes. Dans quel ordre ?
Dans une image, où se trouve le point de coordonnées (0, 0) ?
Quelle fonction permet de rendre une couleur transparente ?
Que va dessiner ce code ?

Code : PHP
1
2
3
4
<?php
$points = array(10, 10, 20, 10, 20, 20, 10, 20);
ImageFilledPolygon ($image, $points, 4, $noir);
?>
Quand on mélange deux images avec imagecopymerge, laquelle est placée au-dessus de l'autre ?
Quel est le principal défaut de imagecopyresampled ?


Ainsi se termine ce (gros) chapitre.
J'espère que vous y avez appris beaucoup de choses intéressantes et que vous saurez faire bon usage des fonctions de la librairie GD :)

J'ai essayé de vous expliquer un maximum de fonctions, et pourtant je n'ai pas pu parler de tout. Il y a d'autres fonctions susceptibles de vous intéresser, que vous pourrez trouver dans la documentation en cliquant ici.
La liste des fonctions disponibles se trouve un peu plus bas sur la page. Bonne pêche ! ^^
Chapitre précédent Sommaire Chapitre suivant
Auteur : M@teo21
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 361 Zéros connectés | Requêtes SQL 10 requêtes | Temps de génération de la page : Total (SQL) 0.2423s (0.2267s)