[PHP] utilisation de polices TTF dans les images [Résolu]

utilisation de polices TTF dans les images [Résolu] [PHP] - PHP - Programmation

Marsh Posté le 16-02-2004 à 17:08:10    

Bonjour à tous,
 
J'ai voulu générer des images à la volée comme expliqué dans l'article du site phpteam
http://www.phpteam.net/affiche.php?quoi=rasmus
 
Le souci est que j'obtiens une erreur d'ouverture du fichier de la police de caractère : impossible
 
Le fichier est pourtant bien là et la déclaration du chemin bonne.
 
A la fin de l'article il est écrit que l'on doit s'assurer du support TTF par sa config PHP. Quel est donc le paramètre à vérifier ? Je ne l'ai pas trouvé dans la doc PHP ni aucune référence dans phpinfo().
 
Je fonctionne avec EasyPHP 1.7
 
Merci et à bientôt
 
le code pour les intéréssés
 

Code :
  1. <?php
  2. //appel par create_img.php?police=arial&taille=12&coulfond=0c0c0c&coultext=000000&coulombr=0f0f0f&texte=TEST
  3. //définition des variables par défaut
  4. $chemin_polices = "../";
  5. $police_defaut = "arial.ttf";
  6. $taille_police_defaut = 11;
  7. $texte_defaut = "Bouton Auto";
  8. $couleur_fond_defaut = "FFFFFF";
  9. $couleur_texte_defaut = "000000";
  10. $couleur_ombre_defaut = "0F0F0F";
  11. //récupération et contrôle des paramètres
  12. //les couleurs doivent être en hexa sur 6 caractères
  13. $police = (isset($_GET['police']) && is_file($chemin_polices.$_GET['police']."TTF" )) ? $chemin_polices.$_GET['police']."TTF" : $chemin_polices.$police_defaut;
  14. $taille_police = (isset($_GET['taille']) && is_int($_GET['taille'])) ? $_GET['taille'] : $taille_police_defaut;
  15. $texte = (isset($_GET['texte'])) ? $_GET['texte'] : $texte_defaut;
  16. $couleur_fond = (isset($_GET['coulfond']) && strlen($_GET['coulfond']) == 6) ? $_GET['coulfond'] : $couleur_fond_defaut;
  17. $couleur_texte = (isset($_GET['coultext']) && strlen($_GET['coultext']) == 6) ? $_GET['coultext'] : $couleur_texte_defaut;
  18. $couleur_ombre = (isset($_GET['coulombr']) && strlen($_GET['coulombr']) == 6) ? $_GET['coulombr'] : ((isset($_GET['coulombr']) && strlen($_GET['coulombr']) == 3) ? "OFF" : $couleur_ombre_defaut);
  19. //extraction des composantes RVB
  20. $coul_fond[] = hexdec($couleur_fond{0}.$couleur_fond{1});
  21. $coul_fond[] = hexdec($couleur_fond{2}.$couleur_fond{3});
  22. $coul_fond[] = hexdec($couleur_fond{4}.$couleur_fond{5});
  23. $coul_texte[] = hexdec($couleur_texte{0}.$couleur_texte{1});
  24. $coul_texte[] = hexdec($couleur_texte{2}.$couleur_texte{3});
  25. $coul_texte[] = hexdec($couleur_texte{4}.$couleur_texte{5});
  26. if ($couleur_ombre <> "OFF" ) {
  27. $coul_ombre[] = hexdec($couleur_ombre{0}.$couleur_ombre{1});
  28. $coul_ombre[] = hexdec($couleur_ombre{2}.$couleur_ombre{3});
  29. $coul_ombre[] = hexdec($couleur_ombre{4}.$couleur_ombre{5});
  30. }
  31. //calcul de la taille de l'image
  32. $taille_img = imagettfbbox($taille_police,0,$police,$texte);
  33. $dx = abs($taille_img[2]-$taille_img[0]);
  34. $dy = abs($taille_img[5]-$taille_img[3]);
  35. $xpad=15;
  36. $ypad=9;
  37. //création de l'image
  38. $img = imagecreate($dx+$xpad,$dy+$ypad);
  39. //allocation des couleurs
  40. $c_fond = ImageColorAllocate($img, $coul_fond[0],$coul_fond[1],$coul_fond[2]);
  41. $c_text = ImageColorAllocate($img, $coul_texte[0],$coul_texte[1],$coul_texte[2]);
  42. $c_ombr = ImageColorAllocate($img, $coul_ombre[0],$coul_ombre[1],$coul_ombre[2]);
  43. //remplissage du fond
  44. ImageRectangle($img,0,0,$dx+$xpad,$dy+$ypad,$c_fond);
  45. //dessin de l'ombre
  46. if ($couleur_ombre <> "OFF" ) ImageTTFText($img, $taille_police, 0, (int)($xpad/2)+1, $dy+(int)($ypad/2), $c_ombr, $police, $texte);
  47. //dessin du texte
  48. ImageTTFText($img, $taille_police, 0, (int)($xpad/2), $dy+(int)($ypad/2)-1, $c_text, $police, $texte);
  49. //envoi de l'image au navigateur
  50. Header("Content-type: image/png" );
  51. ImagePNG($img);
  52. //destruction de l'image
  53. ImageDestroy($img);
  54. ?>


Message édité par T509 le 16-02-2004 à 22:33:26
Reply

Marsh Posté le 16-02-2004 à 17:08:10   

Reply

Marsh Posté le 16-02-2004 à 19:06:27    

:bounce:

Reply

Marsh Posté le 16-02-2004 à 19:17:45    

t509 a écrit :

Bonjour à tous,
 
J'ai voulu générer des images à la volée comme expliqué dans l'article du site phpteam
http://www.phpteam.net/affiche.php?quoi=rasmus
 
Le souci est que j'obtiens une erreur d'ouverture du fichier de la police de caractère : impossible
 
Le fichier est pourtant bien là et la déclaration du chemin bonne.
 
A la fin de l'article il est écrit que l'on doit s'assurer du support TTF par sa config PHP. Quel est donc le paramètre à vérifier ? Je ne l'ai pas trouvé dans la doc PHP ni aucune référence dans phpinfo().
 
Je fonctionne avec EasyPHP 1.7
 
Merci et à bientôt
 
le code pour les intéréssés
 

Code :
  1. <?php
  2. //appel par create_img.php?police=arial&taille=12&coulfond=0c0c0c&coultext=000000&coulombr=0f0f0f&texte=TEST
  3. //définition des variables par défaut
  4. $chemin_polices = "../";
  5. $police_defaut = "arial.ttf";
  6. $taille_police_defaut = 11;
  7. $texte_defaut = "Bouton Auto";
  8. $couleur_fond_defaut = "FFFFFF";
  9. $couleur_texte_defaut = "000000";
  10. $couleur_ombre_defaut = "0F0F0F";
  11. //récupération et contrôle des paramètres
  12. //les couleurs doivent être en hexa sur 6 caractères
  13. $police = (isset($_GET['police']) && is_file($chemin_polices.$_GET['police']."TTF" )) ? $chemin_polices.$_GET['police']."TTF" : $chemin_polices.$police_defaut;
  14. $taille_police = (isset($_GET['taille']) && is_int($_GET['taille'])) ? $_GET['taille'] : $taille_police_defaut;
  15. $texte = (isset($_GET['texte'])) ? $_GET['texte'] : $texte_defaut;
  16. $couleur_fond = (isset($_GET['coulfond']) && strlen($_GET['coulfond']) == 6) ? $_GET['coulfond'] : $couleur_fond_defaut;
  17. $couleur_texte = (isset($_GET['coultext']) && strlen($_GET['coultext']) == 6) ? $_GET['coultext'] : $couleur_texte_defaut;
  18. $couleur_ombre = (isset($_GET['coulombr']) && strlen($_GET['coulombr']) == 6) ? $_GET['coulombr'] : ((isset($_GET['coulombr']) && strlen($_GET['coulombr']) == 3) ? "OFF" : $couleur_ombre_defaut);
  19. //extraction des composantes RVB
  20. $coul_fond[] = hexdec($couleur_fond{0}.$couleur_fond{1});
  21. $coul_fond[] = hexdec($couleur_fond{2}.$couleur_fond{3});
  22. $coul_fond[] = hexdec($couleur_fond{4}.$couleur_fond{5});
  23. $coul_texte[] = hexdec($couleur_texte{0}.$couleur_texte{1});
  24. $coul_texte[] = hexdec($couleur_texte{2}.$couleur_texte{3});
  25. $coul_texte[] = hexdec($couleur_texte{4}.$couleur_texte{5});
  26. if ($couleur_ombre <> "OFF" ) {
  27. $coul_ombre[] = hexdec($couleur_ombre{0}.$couleur_ombre{1});
  28. $coul_ombre[] = hexdec($couleur_ombre{2}.$couleur_ombre{3});
  29. $coul_ombre[] = hexdec($couleur_ombre{4}.$couleur_ombre{5});
  30. }
  31. //calcul de la taille de l'image
  32. $taille_img = imagettfbbox($taille_police,0,$police,$texte);
  33. $dx = abs($taille_img[2]-$taille_img[0]);
  34. $dy = abs($taille_img[5]-$taille_img[3]);
  35. $xpad=15;
  36. $ypad=9;
  37. //création de l'image
  38. $img = imagecreate($dx+$xpad,$dy+$ypad);
  39. //allocation des couleurs
  40. $c_fond = ImageColorAllocate($img, $coul_fond[0],$coul_fond[1],$coul_fond[2]);
  41. $c_text = ImageColorAllocate($img, $coul_texte[0],$coul_texte[1],$coul_texte[2]);
  42. $c_ombr = ImageColorAllocate($img, $coul_ombre[0],$coul_ombre[1],$coul_ombre[2]);
  43. //remplissage du fond
  44. ImageRectangle($img,0,0,$dx+$xpad,$dy+$ypad,$c_fond);
  45. //dessin de l'ombre
  46. if ($couleur_ombre <> "OFF" ) ImageTTFText($img, $taille_police, 0, (int)($xpad/2)+1, $dy+(int)($ypad/2), $c_ombr, $police, $texte);
  47. //dessin du texte
  48. ImageTTFText($img, $taille_police, 0, (int)($xpad/2), $dy+(int)($ypad/2)-1, $c_text, $police, $texte);
  49. //envoi de l'image au navigateur
  50. Header("Content-type: image/png" );
  51. ImagePNG($img);
  52. //destruction de l'image
  53. ImageDestroy($img);
  54. ?>




 
C'est toujours la même histoire [:spamafote]
 
Quand on récupère un script tout fait mais qu'on a pas le niveau pour le faire soi-même, ça marche jamais.
Dans ton cas, le chemin quoi que tu en penses est surement pas bon.
 
Refait ce que fais ce script PROGRESSIVEMENT étape par étape, refait TOI-MEME le script, et tu vas non seulement réussir à trouver d'où vient l'erreur mais également progresser.

Reply

Marsh Posté le 16-02-2004 à 19:24:27    

Je te remercie, mais si tu compares les 2 scripts, j'ai suivi l'idée mais refait complètement le script.
 
J'ai testé le chemin dans tous les sens avant de poster. J'ai aussi ouvert la police avec un fopen() juste avant mon script, c'est OK !!!
 
Mon souci est ailleurs dans la config PHP

Reply

Marsh Posté le 16-02-2004 à 19:27:20    

Message d'erreur exact ?

Reply

Marsh Posté le 16-02-2004 à 20:03:36    

<b>Warning</b>:  imagettfbbox(): Could not find/open font in <b>c:\program files\easyphp1-7\www\barcode\quintin\img\create_img.php</b> on line <b>41</b><br />
<br />
<b>Warning</b>:  imagettftext(): Could not find/open font in <b>c:\program files\easyphp1-7\www\barcode\quintin\img\create_img.php</b> on line <b>60</b><br />

Reply

Marsh Posté le 16-02-2004 à 20:05:48    

Tu me donnes l'adresse EXACTE de ta page PHP incriminée ainsi que l'adresse EXACTE de ta fonte ?

Reply

Marsh Posté le 16-02-2004 à 20:07:31    

Mieux :
 
Rajoute :  
 
echo $_GET['police']; au début
 
et dis moi ce qui s'affiche...


Message édité par Hermes le Messager le 16-02-2004 à 20:07:44
Reply

Marsh Posté le 16-02-2004 à 20:18:29    

L'appel create_img.php?police=arial
 
affiche arial
normal ...

Reply

Marsh Posté le 16-02-2004 à 20:21:37    

t509 a écrit :

L'appel create_img.php?police=arial
 
affiche arial
normal ...


 
Ah ? ET arial, c'est une adresse de police ? Ce serait pas plutôt arial.ttf l'adresse ?  :sarcastic:

Reply

Marsh Posté le 16-02-2004 à 20:21:37   

Reply

Marsh Posté le 16-02-2004 à 20:25:42    

j'ai mis l'echo juste avant les contrôles donc c'est nrmal qu'il renvoie seulement arial
 
en le mettant juste après les contrôles echo $police; renvoie arial.ttf

Reply

Marsh Posté le 16-02-2004 à 20:33:35    

Je viens de mettre toutes mes variables en "dur" et le problème persiste

Reply

Marsh Posté le 16-02-2004 à 21:10:22    

t509 a écrit :

j'ai mis l'echo juste avant les contrôles donc c'est nrmal qu'il renvoie seulement arial
 
en le mettant juste après les contrôles echo $police; renvoie arial.ttf


Et où se situe arial.ttf par rapport à ta page ?
 
Quelle est l'adresse exacte de arial.ttf et l'adresse exacte de la page ?

Reply

Marsh Posté le 16-02-2004 à 21:42:10    

www/dir1/dir2/dir3/img/create_img.php
www/dir1/dir2/dir3/img/arial.ttf
 
$police="arial.ttf";
 
j'ai aussi ajouté cela :
 
if ($handle = fopen ($police, "r" )) {
 fclose($handle);
 $handle = fopen("text.txt", "wb" );
 fputs($handle, "coucou", 256);
 fclose($handle);
}
 
et je retrouve bien le fichier text.txt dans le même dossier

Reply

Marsh Posté le 16-02-2004 à 22:24:28    

Apparement, le souci vient d'EasyPHP1.7, le forum easyphp dit que cela fonctionne avec la version 1.6
 
j'y vais ...

Reply

Marsh Posté le 16-02-2004 à 22:33:06    

Effectivement, il y a un problème de compilation de la gd2 avec easyphp 1.7
Avec la 1.6, cela fonctionne bien

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed