Hermes le Messager Breton Quiétiste | Ecrire un texte avec une police ttf dans une image avec php, vous saviez faire ( ).
Par contre, ecrire un texte en choisissant l'ESPACEMENT des caractères, là c'est autre chose.
C'est pourquoi j'ai réalisé cette fonction que je vous livre (j'ai bien bossé pour y arriver).
Code :
- <?php
- function creation_texte($texte,$txt_taille,$txt_esp,$txt_lg,$txt_ht,$couleur_fd,$couleur_txt,$chemin_police,$nom_fichier,$chemin_image)
- {
- $image = imageCreate($txt_lg,$txt_ht);
- // --> paramètres de couleur de fond.
- $couleur_fd_r = hexdec(substr($couleur_fd,0,2));
- $couleur_fd_v = hexdec(substr($couleur_fd,2,2));
- $couleur_fd_b = hexdec(substr($couleur_fd,4,2));
- // --> paramètres de couleur du texte.
- $couleur_txt_r = hexdec(substr($couleur_txt,0,2));
- $couleur_txt_v = hexdec(substr($couleur_txt,2,2));
- $couleur_txt_b = hexdec(substr($couleur_txt,4,2));
- // --> Nombre de caractères du texte.
- $nbr_caracteres = strlen($texte);
- // --> initiation du compteur de distance du catactère en cours.
- $cpt_absc_carac = 0;
- // ----------
- // - boucle -
- // ----------
- for ($i = 0; $i <= $nbr_caracteres-1; $i++)
- {
- // --> taille en largeur du caractère en cours.
- $caractere_en_cours = substr($texte,$i,1);
- $dimensions = imagettfbbox($txt_taille,0,$chemin_police,$caractere_en_cours);
- $lg_caractere = ($dimensions[2] - $dimensions[0]) + 1;
- // --> définition des images des caractères.
- $nom_var_image = "image"."$i";
- ${$nom_var_image} = imageCreate($lg_caractere,$txt_ht);
- // --> couleur des caractères.
- $couleur_fd = imagecolorallocate(${$nom_var_image},$couleur_fd_r,$couleur_fd_v,$couleur_fd_b);
- $couleur_txt = imagecolorallocate(${$nom_var_image},$couleur_txt_r,$couleur_txt_v,$couleur_txt_b);
- // --> écriture du caractère.
- imagettftext(${$nom_var_image},$txt_taille,0,0,$txt_taille,$couleur_txt,$chemin_police,$caractere_en_cours);
- // --> ajout du caractère à l'image globale.
- imagecopymerge($image,${$nom_var_image}, $cpt_absc_carac, 0, 0, 0, $lg_caractere, $txt_ht, 100);
- // --> incrémentation du compteur de position.
- $cpt_absc_carac = $cpt_absc_carac + $lg_caractere + $txt_esp;
- }
- // -----------------------------
- // - ecriture du texte complet -
- // -----------------------------
- $destination = $chemin_image.$nom_fichier;
- imageJPEG($image,$destination,70);
- }
- creation_texte(" Salut les loutres !",11,0,500,16,"BABABA","000000","../font/font.ttf","coucou.jpg","../images/" );
- ?>
|
explication des paramètres de creation_texte(); :
"le texte à afficher", taille_de_la_police, espacement_entre_les_caractères, longueur_image_arrivée, hauteur_image_arrivée, couleur_hexa_fond, couleur_hexa_texte, "chemin de la police","nom du fichier résultant","chemin de l'image à récupérer (juste le chemin, sans le nom de l'image qui est le paramètre d'avant).
REMARQUE : ATTENTION : pour une raison encore inconnue, le texte doit avoir pour premier caractère un espace sinon, il y a un petit bug avec la couleur de fond (si qqu arrive à trouver pourquoi... ) Message édité par Hermes le Messager le 01-10-2003 à 10:16:35
|