Le rendu des polices de caractères FreeType dans LibGD
Le LibGD prend en charge le rendu des polices de caractères TrueType grâce à l'intégration de FreeType, une bibliothèque populaire pour le rendu de polices de caractères vectorielles. Cette fonctionnalité permet aux développeurs d'ajouter du texte personnalisé à des images en utilisant une large gamme de polices de caractères TrueType (.ttf). Contrairement aux polices de caractères bitmap classiques, les polices de caractères FreeType permettent un rendu précis et évolutif, ce qui garantit une excellente qualité, peu importe la taille du texte. Cette capacité est utile pour générer des graphiques, des bannières ou des images annotées dynamiquement dans des applications Web ou de bureau.
Utilisation de gdImageStringFT pour le rendu
La fonction clef pour utiliser les polices de caractères FreeType dans LibGD est gdImageStringFT. Cette fonction permet de dessiner du texte sur une image à l'aide d'une police de caractères TrueType spécifiée. Elle prend en paramètre l'image cible, la couleur du texte, le chemin vers le fichier de la police de caractères, la taille du texte et les coordonnées où le texte doit être placé. Par exemple, on peut générer un texte en italique ou en gras en utilisant des polices de caractères spécifiques, et même appliquer des rotations. Cette flexibilité rend la fonctionnalité idéale pour les projets nécessitant des textes enrichis ou stylisés.
Avantages des polices vectorielles dans LibGD
Le principal avantage du rendu FreeType dans LibGD est la qualité graphique. Les polices de caractères TrueType sont conçues pour être redimensionnées sans perte de qualité, ce qui est essentiel pour des cas d'utilisation où le texte doit s'adapter à différents formats ou tailles d'image. De plus, FreeType prend en charge des effets avancés tels que l'antialiasing, qui améliore la lisibilité du texte en rendant les contours plus lisses. En combinant ces fonctionnalités avec les capacités graphiques de LibGD, il est possible de produire des images de qualité professionnelle adaptées à des contextes variés.
Limitations et considérations
Bien que puissant, le rendu des polices de caractères FreeType avec LibGD peut avoir quelques limites. Par exemple, pour utiliser cette fonctionnalité, la bibliothèque FreeType doit être installée et correctement configurée sur le système. De plus, l'utilisation de fichiers de polices spécifiques nécessite que ces fichiers soient disponibles sur le serveur ou l'environnement d'exécution. Une mauvaise configuration des chemins de polices ou des paramètres de taille peut également entraîner des erreurs ou des résultats inattendus. Enfin, il est important de tenir compte des licences des polices utilisées, car certaines polices de caractères peuvent être restreintes pour un usage commercial.
Les fonctions
Voici les fonctions de rendu des polices de caractères FreeType proposé par la bibliothèque LibGD :
Nom | Description |
---|---|
gdImageStringTTF | Alias de la fonction gdImageStringFT. Elle permet de rendre une chaîne de caractères UTF-8 sur une image GD en utilisant une police de caractères TrueType. |
gdFreeFontCache | Alias de la fonction gdFontCacheShutdown. Cette fonction libère les ressources allouées pour le cache des polices de caractères. |
gdFontCacheShutdown | Permet de désactiver le cache des polices de caractères et de libérer les ressources associées. |
gdImageStringFT | Rend une chaîne de caractères UTF-8 sur une image GD. Cette fonction est le principal outil pour intégrer du texte personnalisé avec des polices de caractères TrueType. |
gdFontCacheSetup | Configure le cache des polices, améliorant les performances lors de l'utilisation répétée de polices de caractères. |
gdImageStringFTEx | Étend les fonctionnalités de gdImageStringFT en permettant de passer des paramètres supplémentaires pour un contrôle avancé sur le rendu du texte. |
gdFTUseFontConfig | Active ou désactive l'utilisation de Fontconfig par défaut, un outil de gestion des polices de caractères système. |
gdImageStringTTF
char * gdImageStringTTF(gdImagePtr im, int * brect, int fg, const char * fontlist, double ptsize, double angle, int x, int y, const char *string); |
Alias de gdImageStringFT.
gdFreeFontCache
void gdFreeFontCache(); |
Alias de gdFontCacheShutdown.
gdFontCacheShutdown
void gdFontCacheShutdown () |
Cette fonction permet de fermer le cache des polices de caractères et de libérez les ressources allouées.
Important : cette fonction doit être appelée à chaque fois que des opérations FreeType ont été invoquées, afin d'éviter les fuites de ressources. Il n'y a pas de mal à appeler cette fonction plusieurs fois.
gdImageStringFT
char * gdImageStringFT(gdImagePtr im, int *brect, int fg, const char *fontlist, double ptsize, double angle, int x, int y, const char *string) |
Cette fonction permet d'afficher une chaîne de caractères UTF-8 sur une image gd.
Paramètres
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image sur laquelle dessiner. |
brect | Ce paramètre permet d'indiquer le rectangle de délimitation est un tableau de 8 entiers où chaque paire représente les coordonnées x et y d'un point. Les points spécifient le coin inférieur gauche, inférieur droit, supérieur droit et supérieur gauche. |
fg | Ce paramètre permet d'indiquer la couleur de la police de caractères. |
fontlist | Ce paramètre permet d'indiquer la liste délimitée par des points-virgules des noms de fichiers de polices de caractères à rechercher. |
ptsize | Ce paramètre permet d'indiquer la hauteur de la police de caractères en points typographiques (pt). |
angle | Ce paramètre permet d'indiquer l'angle en radians pour faire pivoter la police de caractères dans le sens inverse des aiguilles d'une montre. |
x | Ce paramètre permet d'indiquer la coordonnée x du point de base (environ le coin inférieur gauche) de la première lettre. |
y | Ce paramètre permet d'indiquer la coordonnée y du point de base (environ le coin inférieur gauche) de la première lettre. |
string | Ce paramètre permet d'indiquer la chaîne de caractères à restituer. |
Variant
Voir également
gdFontCacheSetup
int gdFontCacheSetup(void); |
Cette fonction permet de configurer le cache de polices de caractères.
Cette fonction est appelée automatiquement à partir des fonctions de rendu de chaîne, si elle n'a pas déjà été appelée. Il n'est donc pas nécessaire d'appeler cette fonction explicitement.
gdImageStringFTEx
gdImageStringFTEx étend les capacités de gdImageStringFT en fournissant un moyen de transmettre des paramètres supplémentaires.
Si le paramètre strex n'est pas nul, il doit pointer vers une structure gdFTStringExtra. Depuis gd 2.0.5, cette structure est définie comme suit :
- typedef struct {
- /* OU logique des valeurs gdFTEX_ */
- int flags;
-
- /* affiner l'espacement des lignes pour '\n' */
- double linespacing;
-
- /* Cartographie de caractères préféré */
- int charmap;
-
- /* Résolution de rendu */
- int hdpi;
- int vdpi;
- char *xshow;
- char *fontpath;
- } gdFTStringExtra, *gdFTStringExtraPtr;
Pour générer un texte multiligne avec un espacement de ligne spécifique, incluez gdFTEX_LINESPACE dans le paramètre des indicateurs :
- flags |= gdFTEX_LINESPACE;
Et définissez également l'espacement des lignes sur l'espacement souhaité, exprimé sous la forme d'un multiple de la hauteur de la police de caractères. Ainsi, un espacement de ligne de 1,0 est le minimum pour garantir que les lignes de texte n'entrent pas en collision.
Si gdFTEX_LINESPACE n'est pas présent, ou si strex est nul, ou si gdImageStringFT est appelé, l'espacement des lignes par défaut est de 1,05.
Pour spécifier une préférence pour l'encodage de caractères Unicode, Shift_JIS Big5, définissez ou Pour générer un texte multiligne avec un espacement de ligne spécifique, incluez gdFTEX_CHARMAP dans le paramètre des indicateurs :
- flags |= gdFTEX_CHARMAP;
Et définissez charmap sur la valeur souhaitée, pouvant être gdFTEX_Unicode, gdFTEX_Shift_JIS, gdFTEX_Big5 ou gdFTEX_Adobe_Custom. Si vous ne spécifiez pas de préférence, Unicode sera essayé en premier. Si la cartographie de caractères préféré n'est pas trouvé dans la police de caractères, d'autres cartographies de caractères sont tentés.
GD fonctionne sur l'hypothèse que l'image de sortie sera rendue sur un écran d'ordinateur. Par défaut, gd transmet une résolution de 96 dpi au moteur de rendu de texte freetype. Cela influence les décisions de «suggestion» prises par le moteur de rendu. Pour spécifier une résolution différente, définissez hdpi et vdpi en conséquence (en points par pouce) et ajoutez gdFTEX_RESOLUTION aux indicateurs :
- flags | gdFTEX_RESOLUTION;
GD 2.0.29 et les versions ultérieures tenteront normalement d'appliquer des tables de crénage, si fontconfig est disponible, pour ajuster les positions relatives des caractères consécutifs de manière plus idéale pour cette paire de caractères. Cela peut être désactivé en spécifiant l'indicateur gdFTEX_DISABLE_KERNING :
- flags | gdFTEX_DISABLE_KERNING;
GD 2.0.29 et les versions ultérieures peuvent renvoyer un vecteur d'avancement de position de caractère individuel, ce qui est parfois utile dans les applications devant savoir exactement où commence chaque caractère. Ceci est renvoyé dans l'élément xshow de la structure gdFTStringExtra si l'indicateur gdFTEX_XSHOW est défini :
- flags | gdFTEX_XSHOW;
L'appelant est responsable de l'appel de gdFree() sur l'élément xshow après l'appel si gdFTEX_XSHOW est défini.
GD 2.0.29 et versions ultérieures peuvent également renvoyer le chemin d'accès au fichier de police réellement utilisé si l'indicateur gdFTEX_RETURNFONTPATHNAME est défini. Ceci est utile car GD 2.0.29 et versions ultérieures sont capables de sélectionner automatiquement une police en fonction d'un modèle de police de caractères fontconfig lorsque fontconfig est disponible. Ces informations sont renvoyées dans l'élément fontpath de la structure gdFTStringExtra.
- flags | gdFTEX_RETURNFONTPATHNAME;
L'appelant est responsable de l'appel de gdFree() sur l'élément fontpath après l'appel si gdFTEX_RETURNFONTPATHNAME est défini.
GD 2.0.29 et versions ultérieures peuvent utiliser fontconfig pour résoudre les noms de polices de caractères, y compris les modèles fontconfig, si l'indicateur gdFTEX_FONTCONFIG est défini. Pour plus de commodité, ce comportement peut être défini par défaut en appelant gdFTUseFontConfig avec une valeur différente de zéro. Dans cette situation, il n'est pas nécessaire de définir l'indicateur gdFTEX_FONTCONFIG à chaque appel ; cependant, des noms de chemin de police de caractères explicites peuvent toujours être utilisés si l'indicateur gdFTEX_FONTPATHNAME est défini :
- flags | gdFTEX_FONTPATHNAME;
À moins que gdFTUseFontConfig n'ait été appelé avec une valeur différente de zéro, GD 2.0.29 et les versions ultérieures s'attendront toujours à ce que le paramètre fontlist des fonctions de sortie de texte freetype soit un nom de fichier de police de caractères ou une liste de ceux-ci comme dans les versions précédentes. Si vous ne souhaitez pas faire de fontconfig la valeur par défaut, il est toujours possible de forcer l'utilisation de fontconfig pour un seul appel aux fonctions de sortie de texte freetype en définissant l'indicateur gdFTEX_FONTCONFIG :
- flags | gdFTEX_FONTCONFIG;
GD 2.0.29 et les versions ultérieures peuvent utiliser fontconfig pour résoudre les noms de polices de caractères, y compris les modèles fontconfig, si l'indicateur gdFTEX_FONTCONFIG est défini. Pour plus de commodité, ce comportement peut être défini par défaut en appelant gdFTUseFontConfig avec une valeur différente de zéro. Dans cette situation, il n'est pas nécessaire de définir l'indicateur gdFTEX_FONTCONFIG à chaque appel ; cependant, des noms de chemin de police de caractères explicites peuvent toujours être utilisés si l'indicateur gdFTEX_FONTPATHNAME est défini :
- flags | gdFTEX_FONTPATHNAME;
Pour plus d'informations, voir gdImageStringFT.
gdFTUseFontConfig
int gdFTUseFontConfig(int flag) |
Cette fonction permet d'activer ou de désactiver fontconfig par défaut. Si GD est compilé sans la prise en charge de libfontconfig, cette fonction est un NOP.
Paramètres
Nom | Description |
---|---|
flag | Zéro pour désactiver, différent de zéro pour activer. |