character where the line break should be. */ $txt.=" "; // guaranteed to find end of line $spaces=array(); $wids=array(); $i=0; while(true) { $j=strpos(substr($txt,$i)," "); if(!($j===false)) { $spaces[]=$j+$i; @ $bbox=imagettfbbox($size,0,$font,substr($txt,$i,$j+1)); $left=($bbox[0]>$bbox[6])?$bbox[6]:$bbox[0]; $right=($bbox[2]>$bbox[4])?$bbox[2]:$bbox[4]; $wids[]=$right-$left; $i=$j+$i+1; } else break; } $lastspace=-1; $cum=0; $t2=""; for($i=0;$i0)&&($cum+$wids[$i])>$width)) // time for a line break { $t2.="\n"; $nbre_ligne++; $cum=0; $i--; } else { // we'll always get at least one word (even if too wide) thanks to // ($cum>0) test above $t2.=substr($txt,$lastspace+1,$spaces[$i]-$lastspace); $cum+=$wids[$i]; $lastspace=$spaces[$i]; } } $image_created = array("$t2","$nbre_ligne"); return $image_created; } function create_title($titre,$couleur_texte,$couleur_fond,$taille_texte,$chemin_police) { // echo "Chemin police : $chemin_police"; //Définition de la largeur maximum de l'image générée $width_max = 310; //Définition du nom de l'image en fonction du titre et des attributs passés dans la fonction $titre_affiche = strtoupper($titre); $nom_image = md5($titre.$chemin_police.$taille_texte.$couleur_fond.$couleur_texte); $chemin_repertoire = $_SERVER['DOCUMENT_ROOT']."/".substr($GLOBALS['img_path'],1)."titres"; if(!file_exists($chemin_repertoire)) { @ mkdir($chemin_repertoire,0777) or die("Impossible de créer le répertoire d'image titre '$chemin_repertoire'"); } $chemin_image = $chemin_repertoire."/".$nom_image.".png"; if(!file_exists($chemin_image)) { // Test de la taille de l'image et définition du nombre de ligne $tableau = myWordWrap($titre_affiche,$chemin_police,$taille_texte,$width_max); $titre_image = $tableau[0]; $nbre_ligne = $tableau[1]; // Calcul de la taille de l'image @ $taille_image = imagettfbbox($taille_texte,0,$chemin_police,"$titre_image"); $taille_image_largeur = (abs($taille_image[0])+abs($taille_image[2])+5); if($taille_image_largeur > $width_max) $taille_image_largeur = $width_max; $taille_image_hauteur = (abs($taille_image[6])+abs($taille_image[7])+2) * $nbre_ligne; // Création du cadre d'image $img = imagecreate($taille_image_largeur,$taille_image_hauteur); // Définition de la couleur du texte $couleur_texte = hexdec(str_replace('#','',$couleur_texte)); $couleur_texte = imagecolorallocate($img,($couleur_texte & 0xFF0000) >> 16,($couleur_texte & 0x00FF00) >> 8,($couleur_texte & 0x0000FF)); // Définition de la couleur du fond $couleur_fond = hexdec(str_replace('#','',$couleur_fond)); $couleur_fond = imagecolorallocate($img,($couleur_fond & 0xFF0000) >> 16,($couleur_fond & 0x00FF00) >> 8,($couleur_fond & 0x0000FF)); // Remplissage du fond de l'image avec la couleur définie avant imagefill($img,0,0,$couleur_fond); // Ajout du texte, affichage ligne par ligne si le texte compporte plus d'une ligne if($nbre_ligne > 1) { $titre_image = explode("\n",$titre_image); $i = 0; while($i != $nbre_ligne) { imagettftext($img,$taille_texte,0,0,$taille_texte + (20*$i),$couleur_texte,$chemin_police,$titre_image[$i]); $i++; } } else { @ imagettftext($img,$taille_texte,0,0,$taille_texte,$couleur_texte,$chemin_police,"$titre_image"); } // Création de l'image et écriture sur le serveur @imagepng($img,$chemin_image) or die ("Impossible d'écrire dans le répertoire d'images..."); imagedestroy($img); } $chemin_image = $GLOBALS['img_path']."titres/".$nom_image.".png"; if(file_exists($_SERVER['DOCUMENT_ROOT'].$chemin_image)) { $taille_image = getimagesize($_SERVER['DOCUMENT_ROOT'].$chemin_image); $taille_image_largeur = $taille_image[0]; $taille_image_hauteur = $taille_image[1]; echo "$titre\"$titre\""; //width:".$taille_image_largeur."px;height:".$taille_image_hauteur."px;\" />"; } else { echo $titre; } } ?>