Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2851 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°644178
T509
$job->GetJob(now)
Posté le 16-02-2004 à 17:08:10  profilanswer
 

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
mood
Publicité
Posté le 16-02-2004 à 17:08:10  profilanswer
 

n°644410
T509
$job-&gt;GetJob(now)
Posté le 16-02-2004 à 19:06:27  profilanswer
 

:bounce:

n°644438
Hermes le ​Messager
Breton Quiétiste
Posté le 16-02-2004 à 19:17:45  profilanswer
 

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.

n°644446
T509
$job-&gt;GetJob(now)
Posté le 16-02-2004 à 19:24:27  profilanswer
 

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

n°644453
Hermes le ​Messager
Breton Quiétiste
Posté le 16-02-2004 à 19:27:20  profilanswer
 

Message d'erreur exact ?

n°644514
T509
$job-&gt;GetJob(now)
Posté le 16-02-2004 à 20:03:36  profilanswer
 

<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 />

n°644515
Hermes le ​Messager
Breton Quiétiste
Posté le 16-02-2004 à 20:05:48  profilanswer
 

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

n°644516
Hermes le ​Messager
Breton Quiétiste
Posté le 16-02-2004 à 20:07:31  profilanswer
 

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
n°644524
T509
$job-&gt;GetJob(now)
Posté le 16-02-2004 à 20:18:29  profilanswer
 

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

n°644526
Hermes le ​Messager
Breton Quiétiste
Posté le 16-02-2004 à 20:21:37  profilanswer
 

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:

mood
Publicité
Posté le 16-02-2004 à 20:21:37  profilanswer
 

n°644529
T509
$job-&gt;GetJob(now)
Posté le 16-02-2004 à 20:25:42  profilanswer
 

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

n°644535
T509
$job-&gt;GetJob(now)
Posté le 16-02-2004 à 20:33:35  profilanswer
 

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

n°644561
Hermes le ​Messager
Breton Quiétiste
Posté le 16-02-2004 à 21:10:22  profilanswer
 

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 ?

n°644586
T509
$job-&gt;GetJob(now)
Posté le 16-02-2004 à 21:42:10  profilanswer
 

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

n°644625
T509
$job-&gt;GetJob(now)
Posté le 16-02-2004 à 22:24:28  profilanswer
 

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

n°644631
T509
$job-&gt;GetJob(now)
Posté le 16-02-2004 à 22:33:06  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[PHP MYSQL] Comment font les sites comme royaumes pour...Scroll bar dans une text area [RESOLU]
[PHP]connaitre le nom du répertoire courant[PHP] Problème avec imap_get_quota
appli PHP en entrée, pages HTML en sortie[Résolu] hashmap - comment utiliser containsKey ?
[vba] extraire une date - [resolu]Gestion des sessions: Changer une valeur.[RESOLU]
[PHP] interrogation IMPA très lente?Gros pépin avec PHP sous Mandrake 9.1
Plus de sujets relatifs à : [PHP] utilisation de polices TTF dans les images [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR