Loupilo Posté 23 Janvier 2005 Posté 23 Janvier 2005 Salut, Je cherche à créer une image avec gd. Assez basique : fond transparent et texte en blanc (viva png). Je créé donc mon image: <?phpheader ("Content-type: image/png");$image = imagecreate(250,30);$orange = imagecolorallocate($image, 255, 128, 0);$texte = $_GET['t']; $blanc = imagecolorallocate($image, 255, 255, 255);$font = imageloadfont("swis.ttf");imagestring($image, $font, 5, 1, $texte, $blanc);imagepng($image);?> Et là... Ma police swis.ttf n'est pas utilisée, c'est la police php taille 1 (atroce). Pourquoi ? On m'a dit que gd n'acceptait que les polices en .gdf. Mais j'ai déjà vu des générateurs d'images dynamiques qui fonctionnaient avec pas mal de polices ttf... Et si ce n'est pas possible, je suppose que convertir des ttf en gdf ne l'est pas non plus ? J'oubliais, quand je mets : <?phpheader ("Content-type: image/png");$image = imagecreate(250,30);$orange = imagecolorallocate($image, 255, 128, 0);$texte = $_GET['t']; $blanc = imagecolorallocate($image, 255, 255, 255);$font = imageloadfont("swis.ttf");if($font === FALSE) { echo 'erreur avec la police'; }imagestring($image, $font, 5, 1, $texte, $blanc);imagepng($image);?> Firefox me dit qu'il ne peut afficher l'image car elle contient des erreurs, mais l'affichage du code source me met bien "erreur avec la police" en tout début... Le chemin est bon (le fichier swis.ttf est dans le même répertoire que mon fichier php), les permissions sont bonnes (777)... Si vous avez une idée du pourquoi... Merci, Loupilo.
Vincent Posté 23 Janvier 2005 Posté 23 Janvier 2005 Est-ce que ta font ttf respecte bien ce format? Table 1. Font file formatbyte position C data type description byte 0-3 int number of characters in the font byte 4-7 int value of first character in the font (often 32 for space) byte 8-11 int pixel width of each character byte 12-15 int pixel height of each character byte 16- char array with character data, one byte per pixel in each character, for a total of (nchars*width*height) bytes. voila les liens qui aident : manuel PHP : imageloadfont guide : comment creer une signature dynamique User-defined Bitmap Fonts
Cariboo Posté 23 Janvier 2005 Posté 23 Janvier 2005 J'ai déjà eu un problème de ce genre... Le module Apache qui gère les polices true type est il correctement installé ? Il s'appelle FreeType de mémoire...
Vincent Posté 23 Janvier 2005 Posté 23 Janvier 2005 On m'a dit que gd n'acceptait que les polices en .gdf.Mais j'ai déjà vu des générateurs d'images dynamiques qui fonctionnaient avec pas mal de polices ttf... <{POST_SNAPBACK}> sinon, peut etre que tu te trompe de fonction... est-ce que la fonction imagettftext ne serait pas plus appropriée?
Loupilo Posté 23 Janvier 2005 Auteur Posté 23 Janvier 2005 (modifié) Est-ce que ta font ttf respecte bien ce format?voila les liens qui aident : manuel PHP : imageloadfont guide : comment creer une signature dynamique User-defined Bitmap Fonts <{POST_SNAPBACK}> Je regarde ça... [Edit: Je ne comprends rien à ce que c'est... Comment faire pour vérifier si ma police respecte le format ?] J'ai déjà eu un problème de ce genre... Le module Apache qui gère les polices true type est il correctement installé ? Il s'appelle FreeType de mémoire... <{POST_SNAPBACK}> Ma foi, je ne dispose que d'un phpinfo, travaillant sur un mutu ; je vais voir ce que je trouve sur FreeType... [Edit: Aucune trace de FreeType dans le phpinfo...] sinon, peut etre que tu te trompe de fonction... est-ce que la fonction imagettftext ne serait pas plus appropriée? <{POST_SNAPBACK}> Avec: <?phpheader ("Content-type: image/png");$image = imagecreate(250,30);$orange = imagecolorallocate($image, 255, 128, 0);$texte = $_GET['t']; $blanc = imagecolorallocate($image, 255, 255, 255);$font = 'swis.ttf';imagettftext($image, 20, 0, 5, 5, $blanc, $font, $texte);imagepng($image);?> J'ai: L'image ne peut être affichée, car elle contient des erreurs. Modifié 23 Janvier 2005 par Loupilo
xpatval Posté 23 Janvier 2005 Posté 23 Janvier 2005 J'allais poser la même question concernant les polices permises par ImageLoadFont, ayant moi-aussi des problèmes pour charger celle que je souhaite. Malheureusement, les liens donnés par Vincent (en fait, ceux donnés par php.net) sont peu évocatifs... Donc, la solution m'intéresse... Je suis ce post...I'm watching you.. xpatval
Cariboo Posté 23 Janvier 2005 Posté 23 Janvier 2005 Si ton phpinfo() ne renvoie aucune mention de Freetype, cela signifie que le module n'est pas probablement pas ou mal installé et que tu ne pourras pas exploiter toutes les fonctions maniant les ttf dans php (dont GD). Il faut : 1. Que le module Freetype soit installé (compilation de la librairie C) 2. que php ait été compilé avec le support des ttf ( --with-freetype-dir=DIR pour freetype version 2, et --enable-gd-native-ttf' ) (à vérifier dans les directives de compilation au début de phpinfo Enfin cela dépend de la version utilisée : je suppose que c'est une GD 2.xx ? Ensuite, il faut installer correctement les polices ttf...
Loupilo Posté 23 Janvier 2005 Auteur Posté 23 Janvier 2005 Si ton phpinfo() ne renvoie aucune mention de Freetype, cela signifie que le module n'est pas probablement pas ou mal installé et que tu ne pourras pas exploiter toutes les fonctions maniant les ttf dans php (dont GD). Il faut : 1. Que le module Freetype soit installé (compilation de la librairie C) 2. que php ait été compilé avec le support des ttf ( --with-freetype-dir=DIR pour freetype version 2, et --enable-gd-native-ttf' ) (à vérifier dans les directives de compilation au début de phpinfo Enfin cela dépend de la version utilisée : je suppose que c'est une GD 2.xx ? Ensuite, il faut installer correctement les polices ttf... <{POST_SNAPBACK}> Bon, ben c'est mort alors, je pense, vu que j'ai pas de trace de freetype... Et effectivement, GD, c'est la version 2.0.15. Mais pour installer correctement des ttf sur un mutu, je vois pas comment faire ?
Loupilo Posté 25 Janvier 2005 Auteur Posté 25 Janvier 2005 En attendant l'hypothétique activation de FreeType, j'ai fait mon code. Mais je suis persuadé qu'il pourrait être 3 à 4 fois plus léger... J'aimerais bien savoir comment, et surtout pourquoi <?phpheader ("Content-type: image/png");$image = imagecreate(250,19);$texte = $_GET['t'];$couleur = $_GET['c'];if ($couleur == r) { // Ça me permet d'avoir des tramages différents selon que le fond est bleu ou rouge$cou = imagecolorresolve($image, 177, 0, 0);}elseif ($couleur == b) {$cou = imagecolorresolve($image, 10, 14, 98);}else {$cou = imagecolorresolve($image, 0, 0, 0);}imagecolortransparent($image, $cou);$blanc = imagecolorallocate($image, 255, 255, 255);$font = './swis.ttf';imagettftext($image, 13, 0, 5, 15, $blanc, $font, $texte);imagepng($image);imagedestroy($image);?> Merci Loupilo.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant