Rendu de texte et de formes sur des images en PHP

Dans l'article précédent, nous nous sommes concentrés sur les images chargées et manipulées avec PHP. Nous avons appris à faire pivoter, redimensionner, redimensionner ou retourner une image. Nous avons également découvert différents filtres et la matrice de convolution. Ces tutoriels couvrent également certaines utilisations pratiques de la bibliothèque GD, telles que le redimensionnement de toutes les images d'un répertoire ou l'ajout de filigranes à plusieurs images à la fois.

En plus d’utiliser GD pour manipuler des images ordinaires, nous pouvons également créer nos propres à partir de rien. Différentes fonctions de la bibliothèque peuvent être utilisées pour dessiner des formes de base telles que des ellipses, des cercles, des rectangles, des polygones et des lignes simples. Avec quelques maths, ces formes peuvent créer de beaux motifs. Il existe également des fonctions disponibles pour dessiner du texte sur l'image rendue, ce qui ouvre beaucoup de possibilités.

Ce tutoriel va vous apprendre à dessiner des formes de base en PHP et à restituer du texte en utilisant votre police préférée..

Dessiner des formes de base en PHP avec GD

Nous étudierons les formes de base dans cette section, puis couvrirons l’épaisseur de ligne, les pinceaux et les styles de ligne plus tard..

Tracer des lignes

Vous pouvez tracer une simple ligne droite entre deux points donnés en utilisant le imageline ($ image, $ x1, $ y1, $ x2, $ y2, $ couleur) une fonction. le $ image paramètre est une ressource image qui aura été créée précédemment à l'aide de fonctions telles que imagecreatetruecolor () ou imagecreatefromjpeg (). Nous allons utiliser imagecreatetruecolor () tout au long de ce tutoriel pour créer de nouvelles images à partir de zéro. La fonction va tracer une ligne horizontale si $ y1 est égal à $ y2. De même, il va tracer une ligne verticale si $ x1 est égal à $ x2.

Dessiner des cercles et des arcs

La fonction imagearc ($ image, $ cx, $ cy, $ largeur, $ hauteur, $ début, $ fin, $ couleur) peut dessiner des arcs de cercle en utilisant $ cx et $ cy comme son centre. le $ largeur et $ hauteur les paramètres déterminent la taille de l'arc sur différents axes. le $ start et $ end les paramètres spécifient l'angle de début et de fin de l'arc en degrés. Si vous voulez dessiner des arcs complets de 0 à 360 degrés, vous pouvez utiliser l’alternative imageellipse ($ image, $ cx, $ cy, $ largeur, $ hauteur, $ couleur) une fonction.

Dessiner des rectangles et des polygones

Vous pouvez dessiner des rectangles sur une image à l’aide des touches imagerectangle ($ image, $ x1, $ y1, $ x2, $ y2, $ couleur) une fonction. le $ x1 et $ y1 les valeurs déterminent le coin supérieur gauche du rectangle. le $ x2 et $ y2 les valeurs déterminent le coin en bas à droite. Il y a aussi un imagepolygon ($ image, $ points, $ num_points, $ couleur) fonction, qui peut créer un polygone avec un nombre quelconque de côtés ou de points. le $ points paramètre est un tableau où deux éléments sont appariés pour obtenir les coordonnées d'un point spécifique. 

Une autre fonction appelée imageopenpolygon () a été ajouté à PHP 7, ce qui ne trace pas de ligne entre le premier et le dernier point.

Assembler pour créer un dessin

Dans l'exemple suivant, nous avons utilisé toutes ces fonctions pour créer un dessin avec une hutte, le soleil et le sol..

La chose importante ici est simplement de déterminer la valeur de différentes coordonnées. Je voulais tout dessiner par rapport à la taille de l’image d’origine, j’ai donc utilisé le $ img_height et $ img_width variables pour calculer les coordonnées de différents points.

Contrôle de l'épaisseur de ligne, du style et des remplissages de couleurs

L'image ci-dessus présente quelques problèmes tels que des lignes très fines et aucune coloration. Tous ces problèmes peuvent être facilement résolus à l’aide de fonctions telles que imagesetthickness () et imagefilledrectangle ().

Épaisseur de ligne

le imagesetthickness ($ image, $ épaisseur) fonction définit l’épaisseur des lignes rendues lors du dessin de rectangles, de polygones, d’arcs, etc. $ épaisseur à 5 fera toute figure dessinée en utilisant imagerectangle (), imagearc (), imagepolygon (), etc. 5 pixels d'épaisseur.

Dessin de formes remplies

Chaque fonction de dessin a également une version couleur remplie qui remplit cette figure avec une couleur donnée. Par exemple, imagefilledrectangle () remplira le rectangle dessiné avec la couleur donnée.

Utiliser des pinceaux

Une fonction très utile de GD est imagesetbrush ($ image, $ brush). le $ brosse paramètre dans cette fonction est juste une autre ressource d’image qui peut être utilisée pour dessiner des lignes. Par exemple, vous pouvez utiliser un dessin vectoriel transparent d’une fleur comme pinceau pour ajouter de jolis motifs de fleurs à votre image. L'extrait de code donné ci-dessous a été écrit pour utiliser l'image d'un nuage comme pinceau lors du tracé d'un point. Cela ajoute un seul nuage dans notre ciel.

J'ai trouvé cette image de nuage sur Pixabay et l'ai réduite à une taille appropriée pour notre projet..

Le code complet de l'image de la cabane est donné ci-dessous. Nous avons simplement ajouté deux versions de chaque figure, une pour dessiner le contour et l'autre pour remplir la couleur.

Ceci est le résultat final du code PHP GD ci-dessus.

Rendu de texte sur des images

PHP GD est livré avec quatre fonctions différentes pour vous permettre de restituer plusieurs caractères ou un seul caractère dans une direction horizontale ou verticale. Ces fonctions sont imagechar (), imagecharup (), imagestring (), et imagestringup (). Tous acceptent les six mêmes paramètres, nous allons donc discuter de la imagechar () fonctionner ici.

le $ font paramètre imagechar ($ image, $ police, $ x, $ y, $ chaîne, $ couleur) fonction est simplement la taille du texte rendu. Il accepte uniquement les valeurs entières de 1 à 5. $ chaîne paramètre est le texte que vous voulez rendre. Si vous transmettez une chaîne de plusieurs caractères aux fonctions char, seul le premier caractère sera rendu sur l'image. le imagecharup () et imagestringup () les fonctions rendront le texte verticalement de bas en haut.

En ce qui concerne le rendu du texte, les quatre fonctions décrites précédemment sont très limitées. Vous constaterez que même la plus grande valeur de taille de police est trop petite pour une utilisation normale. De plus, le texte ne peut être écrit qu'horizontalement et verticalement.

Heureusement, GD a aussi un imagettftext ($ image, $ taille, $ angle, $ x, $ y, $ couleur, $ fichier de fontes, $ texte) fonction qui peut rendre le texte dans la police de votre choix. le $ fontfile paramètre est utilisé pour spécifier le chemin d'accès à la police TrueType que vous souhaitez utiliser pour afficher le texte. le $ x et $ y les paramètres déterminent la position de départ du texte rendu.

L'exemple suivant utilise toutes ces fonctions pour créer de jolis effets de texte..

Comme vous pouvez le constater, nous avons rendu le même texte avec la même police dans des positions légèrement différentes pour créer des effets similaires à l’ombre du texte. Il est important de garder à l'esprit que le texte rendu par n'importe quelle fonction masquera complètement le texte situé en dessous en cas de chevauchement. Voici l'image finale obtenue après l'exécution du code ci-dessus.

Dernières pensées

Le but de ce tutoriel était de vous familiariser avec différentes fonctions de GD pour dessiner des formes de base à partir de zéro en PHP. À l’aide d’un peu de maths, vous pourrez utiliser ces fonctions pour créer des formes plus complexes telles que des polygones réguliers, des rectangles arrondis, etc..

PHP GD propose également quelques fonctions très utiles pour le rendu du texte sur une image. L'utilisation d'une belle police permet de s'assurer que le texte rendu n'a pas l'air bizarre lorsqu'il est placé sur des images standard chargées à partir de différents chemins d'accès..

Avez-vous créé d'autres effets de texte sophistiqués en PHP? S'il vous plaît partagez-les avec nous dans les commentaires.