"; $L_Dest=$L_Src*$Taux_Reduction; $H_Dest=$H_Src*$Taux_Reduction;//calcul hauteur image finale de destination //echo "Largeur réduite : ",$L_Dest,", Hauteur réduite : ",$H_Dest."
"; $Image2=imagecreatetruecolor($L_Dest, $H_Dest); $Couleur1 = imagecolorallocate($Image2,255,255,255); //imagefill($Image2,0,0,$Couleur1); //imagecolortransparent($Image2,$Couleur1); switch (strtoupper($ext)) { case "JPG" : $Img_Src=imagecreatefromjpeg($chemintotal."/".$fichier_name);break; case "PNG" : $Img_Src=imagecreatefrompng($chemintotal."/".$fichier_name);break; case "BMP" : $Img_Src=imagecreatefromwbmp($chemintotal."/".$fichier_name);break; } imagecopyresized ($Image2, $Img_Src,0,0,0,0,$L_Dest,$H_Dest,$L_Src,$H_Src) ; imagedestroy($Img_Src); $L_Src=$L_Dest; $H_Src=$H_Dest; //echo "Larguer = ",$L_Src," et hauteur : ",$H_Src."
"; } else {//charge directement l'image switch (strtoupper($ext)) { case "JPG" : $Image2=imagecreatefromjpeg($chemintotal."/".$fichier_name);break; case "PNG" : $Image2=imagecreatefrompng($chemintotal."/".$fichier_name);break; case "BMP" : $Image2=imagecreatefromwbmp($chemintotal."/".$fichier_name);break; } } } else {//on a demandé une iamge vide $Image2=imagecreatetruecolor($Width,$Height); $rouge = hexdec(substr($Couleur,0,2)); $vert = hexdec(substr($Couleur,2,2)); $bleu = hexdec(substr($Couleur,4,2)); $Couleur1 = imagecolorallocate($Image2,$rouge,$vert,$bleu); imagefill($Image2,0,0,$Couleur1); } return $Image2; } /*------------------------------------------------------------------------------------------------------------ * crée une bannière étoilée, sur laquelle un texte est écrit. Utilisé en ahut des écrans *----------------------------------------------------------------------------------------------------------*/ function Cree_Bandeau_Titre_Anime($Largeur,$Hauteur,$text) { //crée le bandeau coloré qui contiendra le texte $Image2=Cree_Fond_Bandeau('',0,$Largeur,$Hauteur,COULEUR_FOND_BANDEAU_GENERAL); $L_Src=imagesx($Image2); $H_Src=imagesy($Image2); for ($i=0;$i<13;$i++) {$X=rand(10,$L_Src-5); $Y=rand(10,$H_Src-5); $Taille=rand(1,40); $Rotation=rand(0,45); //calculs dapres parametres $LargeurEtoile=intval($Taille*70/100); $LargeurInterieurEtoile=intval($Taille/100*40); Polygone($Image2,$X,$Y,intval($LargeurEtoile*1.1),$LargeurEtoile,intval($LargeurInterieurEtoile*1.1),$LargeurInterieurEtoile,5,$Rotation,COULEUR_ETOILE_BANDEAU_GENERAL); } Cree_Text_Volant($Image2,$L_Src,100,strtoupper($text),POLICE_TITRE_BANDEAU_GENERAL,TAILLE_POLICE_BANDEAU_GENERAL,COULEUR_TITRE_BANDEAU,COULEUR_BORD_TITRE_BANDEAU); return $Image2; } function Cree_Bandeau_Titre_Classic($Largeur,$Hauteur,$text) { //crée le bandeau coloré qui contiendra le texte $Image2=Cree_Fond_Bandeau('',0,$Largeur,$Hauteur,COULEUR_FOND_BANDEAU_GENERAL); $Image2=Cree_Texte($Image2,0,0,$Largeur,$Hauteur,ucfirst($text),POLICE_TITRE_BANDEAU_CLASSIC,TAILLE_POLICE_FOND_CLASSIC,COULEUR_POLICE_FOND_CLASSIC,"Centre","Centre"); $L_Src=imagesx($Image2); $H_Src=imagesy($Image2); for ($i=0;$i<13;$i++) {$X=rand(10,$L_Src-5); $Y=rand(10,$H_Src-5); $Taille=rand(1,40); $Rotation=rand(0,45); //calculs dapres parametres $LargeurEtoile=intval($Taille*70/100); $LargeurInterieurEtoile=intval($Taille/100*40); Polygone($Image2,$X,$Y,intval($LargeurEtoile*1.1),$LargeurEtoile,intval($LargeurInterieurEtoile*1.1),$LargeurInterieurEtoile,5,$Rotation,COULEUR_ETOILE_BANDEAU_GENERAL); } //recherche de la taille du texte $Image2=Cree_Texte($Image2,20,70,$Largeur,$Hauteur,ucfirst($text),POLICE_TITRE_BANDEAU_CLASSIC,TAILLE_POLICE_BANDEAU_CLASSIC,COULEUR_TITRE_BANDEAU_CLASSIC,ALIGNEMENT_TITRE_BANDEAU_CLASSIC_HORIZ,ALIGNEMENT_TITRE_BANDEAU_CLASSIC_VERT); return $Image2; } /*------------------------------------------------------------------------------------------------------------------ ecrit un texte dans le cadre de hauteur et largeur, justifié comme demandé si largeur et haueur non spécifiés, écrit le texte à X et Y -----------------------------------------------------------------------------------------------------------------*/ function Cree_Texte($Image, $X,$Y,$Largeur,$Hauteur,$Texte,$Police,$Taille_Police,$Couleur,$JustificationHoriz,$JustificationVert) {$Chemin_Police="/polices"; if (getenv("REMOTE_ADDR")!="127.0.0.1") { $extension_police=".ttf";} else {$extension_police="";} putenv('GDFONTPATH=' . realpath('.')); $font = $Chemin_Police."/".$Police.$extension_police; // a remplacer par votre police //determiner la couleur $rouge = hexdec(substr($Couleur,0,2)); $vert = hexdec(substr($Couleur,2,2)); $bleu = hexdec(substr($Couleur,4,2)); $CouleurText = ImageColorAllocate($Image, $rouge,$vert,$bleu); //ecrire le texte en true type if ($Hauteur!='' && $Largeur!='') {//recherche de la largeur du texte ecrit $size = imagettfbbox($Taille_Police,0,$font,$Texte); $LargeurMot=abs($size[2]-$size[0]); //largeur $HauteurMot = abs($size[5]-$size[3]);//hauteurtheorique //cas du centrage switch ($JustificationHoriz) { case "Gauche" : $X=$X; break; case "Centre" : $X=($Largeur-$LargeurMot)/2; break; case "Droite" ; $X=$Largeur-$LargeurMot; break; } switch ($JustificationVert) { case "Haut" : $Y=$HauteurMot; break; case "Centre" : if ($HauteurMot<$Hauteur) {$Y=($Hauteur+$HauteurMot)/2;} else {//le texte ne tient pas dans l'image prévue $Y=$Hauteur;} break; case "Bas" : $Y=$Hauteur-$HauteurMot; break; } } ImageTTFText($Image, $Taille_Police,0,$X, $Y, $CouleurText, $font, $Texte); return $Image; } /*-------------------------------------------------------------------------------------------------------------- retourne la largeur et hauteur d'un texte écrit par créé texte -------------------------------------------------------------------------------------------------------------*/ function Dimension_Cree_Texte($Texte,$Police,$Taille_Police) {$Chemin_Police="/polices"; if (getenv("REMOTE_ADDR")!="127.0.0.1") { $extension_police=".ttf";}else {$extension_police="";} putenv('GDFONTPATH=' . realpath('.')); $font = $Chemin_Police."/".$Police.$extension_police; // a remplacer par votre police $size = imagettfbbox($Taille_Police,0,$font,$Texte); $LargeurMot=abs($size[2]-$size[0]); //largeur $HauteurMot = abs($size[5]-$size[3]);//hauteurtheorique $Dimension[0]=$LargeurMot; $Dimension[1]=$HauteurMot; return $Dimension; } /*-------------------------------------------------------------------------------------------------------------- * écrit un texte "volant" entouré ou non de plus gras *------------------------------------------------------------------------------------------------------------*/ function Cree_Text_Volant($Image2,$L_Src,$H_Src,$text,$Police,$Taille_Police,$CouleurTexteHexa,$CouleurBord) { $Chemin_Police="/polices"; if (getenv("REMOTE_ADDR")!="127.0.0.1") { $extension_police=".ttf";}else {$extension_police="";} putenv('GDFONTPATH=' . realpath('.')); $font = $Chemin_Police."/".$Police.$extension_police; // a remplacer par votre police $Angle1=rand(7,20); $Angle2=-rand(7,20); //traitement du texte sur plusieurs lignes $Texte=explode("|",$text); $NbrePhrase=count($Texte); $Ordonnee=intval($H_Src/15); for ($j=0;$j<$NbrePhrase;$j++) {$Ordonnee=$Ordonnee+intval($Taille_Police*1.5); $text=$Texte[$j]; //creation de la phrase sur ligne en cours $LargeurSup=0; $LargeurLettrePrec=0; $HauteurLettrePrec=0; $AngleLettre=15; $AbscisseSup=0; $AbscisseLettre=0; //on va découper le mot en plusieurs lettres for ($i=0;$i"; //angle de la lettre en cours if($AngleLettre==$Angle1) {$AngleLettre=$Angle2;} else {$AngleLettre=$Angle1;} //recherche de la largeur de la lettre, compte tenu de l'angle d'écriture $size = imagettfbbox($Taille_Police,0,$font,$Lettre); //abscisse de la lettre en cours, posée droite normalement if ($Lettre==" ") {$LargeurLettre=intval($HauteurLettre/1.5);} else {$LargeurLettre = abs($size[2]-$size[0]);} //largeur //$HauteurLettre = abs($size[5]-$size[3]);//hauteurtheorique qu de le lettre //$HauteurLettre=($LargeurLettre*sin(deg2rad(90)))/sin(deg2rad(90)-deg2rad($AngleLettre)); //echo "Largeur nouvelle : ",$LargeurLettre,", HauteurNouvelle : ",$HauteurLettre,"
"; //$HauteurLettre=$Taille_Police; //$AbscisseSup=-intval($HauteurLettre*sin(deg2rad(180)+deg2rad($AngleLettre)))-intval($Taille_Police/3); $AbscisseSup=$Taille_Police/3; //echo "Abscisse sup : ",$AbscisseSup,"
"; $AbscisseLettre=$LargeurLettrePrec+$AbscisseSup; $LargeurLettre=$LargeurLettre+$AbscisseSup; } //ici largeurlettre contient la taille complète du texte à afficher //on va donc pouvoir le centrer $DecalageAbscisseCentrage=intval(($L_Src-($AbscisseLettre+$LargeurLettre))/2); //on recommence la procedure, mais cette fois ci on écrit toutes les lettres $LargeurSup=0; $LargeurLettrePrec=0; $LargeurLettre=0; $HauteurLettre=0; $HauteurLettrePrec=0; $AngleLettre=15; $AbscisseSup=0; $AbscisseLettre=0; //definition de la couleur $Couleur2=$CouleurTexteHexa; $rouge = hexdec(substr($Couleur2,0,2)); $vert = hexdec(substr($Couleur2,2,2)); $bleu = hexdec(substr($Couleur2,4,2)); $CouleurText = ImageColorAllocate($Image2, $rouge,$vert,$bleu); //on va découper le mot en plusieurs lettres for ($i=0;$i"; //angle de la lettre en cours if($AngleLettre==$Angle1) {$AngleLettre=$Angle2;} else {$AngleLettre=$Angle1;} //recherche de la largeur de la lettre, compte tenu de l'angle d'écriture $size = imagettfbbox($Taille_Police,0,$font,$Lettre); //abscisse de la lettre en cours, posée droite normalement if ($Lettre==" ") {$LargeurLettre=intval($HauteurLettre/1.5);} else {$LargeurLettre = abs($size[2]-$size[0]);} //largeur $HauteurLettre = abs($size[5]-$size[3]);//hauteurtheorique qu de le lettre //$HauteurLettre=($LargeurLettre*sin(deg2rad(90)))/sin(deg2rad(90)-deg2rad($AngleLettre)); //$AbscisseSup=-intval($HauteurLettre*sin(deg2rad(180)+deg2rad($AngleLettre)))-intval($Taille_Police/3); $AbscisseSup=$Taille_Police/3; $AbscisseLettre=$LargeurLettrePrec+$AbscisseSup; $LargeurLettre=$LargeurLettre+$AbscisseSup; if (isset($CouleurBord) && ($CouleurBord!='')) {$rouge = hexdec(substr($CouleurBord,0,2)); $vert = hexdec(substr($CouleurBord,2,2)); $bleu = hexdec(substr($CouleurBord,4,2)); drawboldtext($Image2, $Taille_Police, $AngleLettre, $AbscisseLettre+$DecalageAbscisseCentrage, $Ordonnee, $rouge, $vert, $bleu, $font, $Lettre); } ImageTTFText($Image2, $Taille_Police,$AngleLettre, $AbscisseLettre+$DecalageAbscisseCentrage, $Ordonnee, $CouleurText, $font, $Lettre); } }//fin for autant que de lignes! return $LargeurLettrePrec; //retourne la largeur du mot! } //retourne le tableau des points nécessaires à un plygone function Tableau_Polygone($XCentre,$YCentre,$DimensionExterieureWidth,$DimensionExterieureHeight,$DimensionInterieureWidth,$DimensionInterieureHeight,$Branches,$Rotation) { //$xPoints contient les abscisses //$yPoints contient les ordonnées $Rotation=deg2rad($Rotation); $Delta=pi()*2/$Branches; $Angle=0; for ($i=0;$i<$Branches;$i++) //tant que de branches { if ($DimensionInterieureWidth!=$DimensionExterieureWidth && $DimensionInterieureHeight!=$DimensionEXterieureHeight) {//si dimension differentes $Angle=($Delta*$i); $xPoints[$i*2]=intval($DimensionExterieureWidth*cos($Angle+$Rotation)+0.5)+$XCentre; $yPoints[$i*2]=$YCentre-intval($DimensionExterieureHeight*sin($Angle+$Rotation)+0.5); $Angle=$Angle+($Delta/2); $xPoints[$i*2+1]=intval($DimensionInterieureWidth*cos($Angle+$Rotation)+0.5)+$XCentre; $yPoints[$i*2+1]=$YCentre-intval($DimensionInterieureHeight*sin($Angle+$Rotation)+0.5); }//fin si dimension differentes else {//tracé d'un polygone régulier! $Angle=$Delta*$i+pi()/2; $xPoints[$i]=intval($DimensionExterieureWidth*cos($Angle+$Rotation)+0.5)+$XCentre; $yPoints[$i]=$YCentre-intval($DimensionExterieureHeight*sin($Angle+$Rotation)+0.5); } } // fin for //cree le tableau $coords for ($i=0;$i$LargeurEtoile) {$LargeurEtoile=$LargeurTemp;} } //$Dimension[0]=$LargeurEtoile*1.5; //$Dimension[1]=$LargeurEtoile/1.2; return Dimension_Polygone(0,0,$LargeurEtoile*0.7,$LargeurEtoile*0.7,$LargeurEtoile*0.4,$LargeurEtoile*0.4,5,20); } /* ------------------------------------------------------------------------------------------------------------------- trouve la dimension d'un Polygone -----------------------------------------------------------------------------------------------------------------*/ function Dimension_Polygone($X,$Y,$DimensionExterieureWidth,$DimensionExterieureHeight,$DimensionInterieureWidth,$DimensionInterieureHeight,$Branches,$Rotation) { $coord=Tableau_Polygone(0,0,$DimensionExterieureWidth,$DimensionExterieureHeight,$DimensionInterieureWidth,$DimensionInterieureHeight,$Branches,$Rotation); $maxX=0; $minX=0; for ($i=0;$i$maxX) {$maxX=$coord[$i*2]; } if ($coord[$i*2]<$minX) {$minX=$coord[$i*2]; } } //$Largeur=$maxX-intval($minX); $Largeur=abs($maxX)+abs($minX); $maxY=0; $minY=0; for ($i=0;$i$maxY) {$maxY=$coord[($i*2)+1]; } if ($coord[($i*2)+1]<$minY) {$minY=$coord[($i*2)+1]; } } $Hauteur=abs($maxY)+abs($minY); //$Hauteur=$maxY-$minY; $Dimension[0]=$Largeur; $Dimension[1]=$Hauteur; return $Dimension; } /* ------------------------------------------------------------------------------------------------------------------- Crée l'affichage des prix sur les mages Ajoute un rix sur fond rouge, avec ou sans etoile groupee. //si etoile est égale à "Non", le prix est seul en rouge! //on peut choisir le cote X et Y, la taille et si c'est sur fond rouge ou non ------------------------------------------------------------------------------------------------------------------*/ function Cree_Prix($Image, $XCentre,$YCentre,$Prix,$TaillePrix,$Etoile) {//cette fonction affiche un prix sur une ambiance étoilée $Texte=explode("|",$Prix); $NbrePhrase=count($Texte); $Taille_Police=10*$TaillePrix; $AngleLettre=0; //$AbscisseLettre=intval($XCentre+$Taille_Police)/3; $AbscisseLettre=$XCentre; putenv('GDFONTPATH=' . realpath('.')); if (getenv("REMOTE_ADDR")!="127.0.0.1") { $extension_police=".ttf";}else {$extension_police="";} $Chemin_Police="/polices"; //$Police2="COOPBL"; $font = $Chemin_Police."/".FONT_PRIX_COM.$extension_police; // a remplacer par votre police //affichage de l'étoile //calcul de la plus grande Largeur $LargeurEtoile=0; if ($Etoile!="Non") { for ($i=0;$i<$NbrePhrase;$i++) {if (!My_Is_Nan($Texte[$i])) {//on a transmis un nombre $DernierCaractere=substr($Texte[$i],strlen($Texte[$i])-1,1); if ($DernierCaractere!="%") {$DernierCaractere="";} $TexteT[$i]=number_format($Texte[$i],2,'.',''); $Temp=explode(".",$TexteT[$i]); $Nombre=$Temp[0]; $Decimale=$Temp[1]; if ($Decimale=="00") {if ($DernierCaractere!="%") {$Decimale=".".$Decimale;} else {$Nombre=$Nombre.$DernierCaractere; $Decimale=""; } } else {$Decimale=".".$Decimale.$DernierCaractere;} //$Lettre=$DernierCaractere; $Lettre=$Nombre; }// sinon c'est une phrase else { $Lettre=$Texte[$i]; } //centrage sur étoile $size = imagettfbbox($Taille_Police,0,$font,$Lettre); $LargeurTemp=abs($size[0]-$size[2]); if (!My_Is_Nan($Texte[$i])) { $Taille_Police=$Taille_Police/2; $size = imagettfbbox($Taille_Police,0,$font,".".$Decimale); $LargeurTemp=$LargeurTemp+abs($size[0]-$size[2]); $Taille_Police=$Taille_Police*2; } if ($LargeurTemp>$LargeurEtoile) {$LargeurEtoile=$LargeurTemp;} } Cree_Ambiance_Etoile($Image,$XCentre,$YCentre+intval($Taille_Police/8),$LargeurEtoile,COULEUR_ETOILES_PRIX); } //tant que de lignes à afficher dans l'étoile! $DecalageTexte=0; for ($i=0;$i<$NbrePhrase;$i++) { $Taille_Police=10*$TaillePrix; if (!My_Is_Nan($Texte[$i])) {//on a transmis un nombre $DernierCaractere=substr($Texte[$i],strlen($Texte[$i])-1,1); if ($DernierCaractere!="%") {$DernierCaractere="";} $Texte[$i]=number_format($Texte[$i],2,'.',''); $Temp=explode(".",$Texte[$i]); $Nombre=$Temp[0]; $Decimale=$Temp[1]; if ($Decimale=="00") {if ($DernierCaractere!="%") {$Decimale=".".$Decimale;} else {$Nombre=$Nombre.$DernierCaractere; $Decimale=""; } } else {$Decimale=".".$Decimale.$DernierCaractere;} //$Lettre=$DernierCaractere; $Lettre=$Nombre; }// sinon c'est une phrase else { $Lettre=$Texte[$i]; } //centrage sur étoile $size = imagettfbbox($Taille_Police,0,$font,$Lettre); $LargeurTotale=abs($size[0]-$size[2]); if (!My_Is_Nan($Texte[$i])) { $Taille_Police=$Taille_Police/2; $size = imagettfbbox($Taille_Police,0,$font,".".$Decimale); $LargeurTotale=$LargeurTotale+abs($size[0]-$size[2]); $Taille_Police=$Taille_Police*2; } $Decalage=$LargeurTotale/2; $DecalageY=$Taille_Police/6.2; drawboldtext($Image, $Taille_Police, 0, $AbscisseLettre+$Coefficient-$Decalage, $YCentre-$DecalageY+$DecalageTexte, 231, 28, 24, $font, $Lettre) ; $CouleurText = imagecolorallocate($Image,255,255,255); ImageTTFText($Image, $Taille_Police*0.95,0, $AbscisseLettre+$Coefficient-$Decalage, $YCentre-$DecalageY+$DecalageTexte, $CouleurText, $font, $Lettre); if (!My_Is_Nan($Texte[$i])) {//dans le cas d'un nombre, on affiche les décimales! $size = imagettfbbox($Taille_Police,0,$font,$Lettre); $LargeurPrix=abs($size[0]-$size[2])-strlen($Lettre); $HauteurPrix=abs($size[5]-$size[3]); $Lettre=$Decimale; $Taille_Police=$Taille_Police/2; //$Coefficient=intval($Taille_Police/8); //$Coefficient=0; $size = imagettfbbox($Taille_Police,0,$font,$Lettre); $HauteurPrix2=abs($size[5]-$size[3]); //$CouleurText = imagecolorallocate($Image,255,255,255); drawboldtext($Image, $Taille_Police, 0, $AbscisseLettre+$LargeurPrix-$Decalage, $YCentre-($DecalageY)-$HauteurPrix+$HauteurPrix2+($Coefficient*5)+$DecalageTexte, 231, 28, 24, $font, $Lettre) ; ImageTTFText($Image, $Taille_Police,0, $AbscisseLettre+$LargeurPrix-$Decalage, $YCentre-($DecalageY)-$HauteurPrix+$HauteurPrix2+($Coefficient*5)+$DecalageTexte, $CouleurText, $font,$Lettre); } $Taille_Police=10*$TaillePrix; $DecalageTexte=$DecalageTexte+$Taille_Police*1.3; }//fin tant que de lignes à afficher } /*--------------------------------------------------------------------------------------------------------------------- Image_Cree_prix Crée un prix sous forme d'ambiance étoilée qui s'affiche avec justification gauche, centre, droit et haut, centre, bas, le tout par rapport à l'image en cours $Image2 --------------------------------------------------------------------------------------------------------------------*/ function Image_Cree_Prix($Image2,$text,$Taille,$DirectionX,$DirectionY) { $L_Src=imagesx($Image2); $H_Src=imagesy($Image2); $Marge=6; $Dimension=Cree_Dimension_Prix($L_Src/2,$H_Src/2,$Taille,$text); $LargeurPrix=$Dimension[0]; $HauteurPrix=$Dimension[1]; switch ($DirectionX) { case "Gauche" : $X=$Marge+$Taille*6+($LargeurPrix)/2; break; case "Droit" : $X=$L_Src-$Marge-($LargeurPrix)/2; break; case "Centre" : $X=$L_Src/2;break; } switch ($DirectionY) { case "Haut": $Y=$HauteurPrix/2+$Marge; break; case "Centre" : $Y=$H_Src/2; break; case "Bas" : $Y=$H_Src-$HauteurPrix/2-$Marge;break; } Cree_Prix($Image2,$X,$Y,$text,$Taille,""); } /*---------------------------------------------------------------------------------------------------------------------- * crée un tampon sur l'image, cad un texte encadré! *--------------------------------------------------------------------------------------------------------------------*/ function Cree_Tampon($Image2,$X_Position,$Y_Position,$Texte,$Taille_Police,$Rotation) { //calcul de la taille de la boîte if (getenv("REMOTE_ADDR")!="127.0.0.1") { $extension_police=".ttf";} else {$extension_police="";} putenv('GDFONTPATH=' . realpath('.')); $Chemin_Police="/polices"; $font = $Chemin_Police."/".POLICE_TAMPON.$extension_police; // a remplacer par votre police $TexteT=explode("|",$Texte); $NbrePhrases=count($TexteT); $Padding=10; $LargeurTexte=0; $HauteurTexte=0; $CentreX=0; $CentreY=0; $Epaisseur_Trait=3; for ($i=0;$i<$NbrePhrases;$i++) {//détermine la plus forte largeur et la hauteur du rectangle $Texte=$TexteT[$i]; $size = imagettfbbox($Taille_Police,0,$font,$Texte); $LargeurTemp=abs($size[0]-$size[2]); if ($LargeurTexte<$LargeurTemp) {$LargeurTexte=$LargeurTemp;} $HauteurTemp=abs($size[3]-$size[5]); //if ($i==0) {$HauteurTexte=$HauteurTemp*0.3;} $HauteurTexte=$HauteurTexte+1.2*($HauteurTemp); }//fin détermination du texte $LargeurRectangle=$LargeurTexte+$Padding; $HauteurRectangle=$HauteurTexte+$Padding; //calcule maintenant pour assurer une taille vectorielle au tampon //on calcule pour un triangle qui tourne en fonction $Points[0]=0; $Points[1]=0; $Points[2]=$LargeurRectangle; $Points[3]=0; $Points[4]=$LargeurRectangle; $Points[5]=$HauteurRectangle; $Points[6]=0; $Points[7]=$HauteurRectangle; $AngCrad = (pi() * -$Rotation) / 180; $XMax=0; $XMin=0; $YMax=0; $YMin=0; for ($i=0;$i$XMax) {$XMax=$X;} //if ($XMin>$X) {$XMin=$X;} $Y=(($Points[$i*2] - $CentreX) * sin($AngCrad) + ($Points[$i*2+1] - $CentreY) * cos($AngCrad) + $CentreY); //if ($Y>$YMax) {$YMax=$Y;} //if ($Y<$YMin) {$YMin=$Y;} $Points[$i*2]=$X+$X_Position; $Points[$i*2+1]=$Y+$Y_Position; } //$LargeurImage=abs($XMax)+abs($XMin); //$HauteurImage=abs($YMax)+abs($YMin); $Couleur=COULEUR_TAMPON; $rouge = hexdec(substr($Couleur,0,2)); $vert = hexdec(substr($Couleur,2,2)); $bleu = hexdec(substr($Couleur,4,2)); $Couleur1 = imagecolorallocate($Image2,$rouge,$vert,$bleu); for ($i=0;$i<$NbrePhrases;$i++) //tant que de phrases! { $Texte=$TexteT[$i]; $size = imagettfbbox($Taille_Police,0,$font,$Texte); $LargeurTemp=abs($size[0]-$size[2]); $X_PositionTexte=($LargeurRectangle-$LargeurTemp)/2; $Y_PositionTexte=$HauteurRectangle-$Padding/2-($HauteurTexte*1.2*($NbrePhrases-($i+1))/$NbrePhrases); //Calcul du point de départ du texte $X = (($X_PositionTexte - $CentreX) * cos($AngCrad) - ($Y_PositionTexte - $CentreY) * sin($AngCrad) + $CentreX)+$X_Position; $Y = (($X_PositionTexte - $CentreX) * sin($AngCrad) + ($Y_PositionTexte - $CentreY) * cos($AngCrad) + $CentreY)+$Y_Position; ImageTTFText($Image2, $Taille_Police,$Rotation,$X, $Y, $Couleur1, $font, $TexteT[$i]); } imagesetthickness ($Image2,$Epaisseur_Trait); imagepolygon($Image2,$Points,intval(count($Points)/2),$Couleur1); } function Cree_Cordon($Image2,$Texte,$Taille_Police,$Angle) { $L_Src=imagesx($Image2); //fixer decalage $Decalage=intval($L_Src/4); //Calculer la hauteur du texte if (getenv("REMOTE_ADDR")!="127.0.0.1") { $extension_police=".ttf";} else {$extension_police="";} putenv('GDFONTPATH=' . realpath('.')); $Chemin_Police="/polices"; $font = $Chemin_Police."/".POLICE_BANDEAU_TRANSVERSAL.$extension_police; // a remplacer par votre police $TexteT=explode("|",$Texte); $NbrePhrases=count($TexteT); $Padding=10; $LargeurTexte=0; $HauteurTexte=0; $CentreX=0; $CentreY=0; $Epaisseur_Trait=3; for ($i=0;$i<$NbrePhrases;$i++) {//détermine la plus forte largeur et la hauteur du rectangle $Texte=$TexteT[$i]; $size = imagettfbbox($Taille_Police,0,$font,$Texte); $LargeurTemp=abs($size[0]-$size[2]); if ($LargeurTexte<$LargeurTemp) {$LargeurTexte=$LargeurTemp;} $HauteurTemp=abs($size[3]-$size[5]); //if ($i==0) {$HauteurTexte=$HauteurTemp*0.3;} $HauteurTexte=$HauteurTexte+1.2*($HauteurTemp); }//fin détermination du texte $HauteurRectangle=$HauteurTexte+$Padding; //hauteurrectangle contient la hauteur du texte //calcule lecompléent de chauqe cote pour fixer l'ordonnée à l'origine $X_Position=0; $Y_Position=$Decalage+($HauteurRectangle*sin(deg2rad(90))/sin(deg2rad(90-$Angle))); $LargeurRectangle=$Y_Position*sin(deg2rad(90))/sin(deg2rad($Angle)); $LargeurRectangle=$LargeurRectangle+$L1+$L2; $X_Position=-$HauteurRectangle*sin(deg2rad(90-$Angle))/sin(deg2rad(90)); $Y_Position=$Y_Position-$HauteurRectangle*sin(deg2rad(90-$Angle))/sin(deg2rad(90)); $Points[0]=0; $Points[1]=0; $Points[2]=$LargeurRectangle; $Points[3]=0; $Points[4]=$LargeurRectangle; $Points[5]=$HauteurRectangle; $Points[6]=0; $Points[7]=$HauteurRectangle; $Rotation=$Angle; $AngCrad = (pi() * -$Rotation) / 180; $XMax=0; $XMin=0; $YMax=0; $YMin=0; for ($i=0;$i$XMax) {$XMax=$X;} //if ($XMin>$X) {$XMin=$X;} $Y=(($Points[$i*2] - $CentreX) * sin($AngCrad) + ($Points[$i*2+1] - $CentreY) * cos($AngCrad) + $CentreY); //if ($Y>$YMax) {$YMax=$Y;} //if ($Y<$YMin) {$YMin=$Y;} $Points[$i*2]=$X+$X_Position; $Points[$i*2+1]=$Y+$Y_Position; } //$LargeurImage=abs($XMax)+abs($XMin); //$HauteurImage=abs($YMax)+abs($YMin); //le fond du bandeau $Couleur=COULEUR_BANDEAU_TRANSVERSAL; $rouge = hexdec(substr($Couleur,0,2)); $vert = hexdec(substr($Couleur,2,2)); $bleu = hexdec(substr($Couleur,4,2)); $Couleur1 = imagecolorallocate($Image2,$rouge,$vert,$bleu); imagesetthickness ($Image2,$Epaisseur_Trait); imagefilledpolygon($Image2,$Points,intval(count($Points)/2),$Couleur1); //le texte sur le bandeau! $Couleur=COULEUR_TEXTE_BANDEAU_TRANSVERSAL; $rouge = hexdec(substr($Couleur,0,2)); $vert = hexdec(substr($Couleur,2,2)); $bleu = hexdec(substr($Couleur,4,2)); $Couleur1 = imagecolorallocate($Image2,$rouge,$vert,$bleu); for ($i=0;$i<$NbrePhrases;$i++) //tant que de phrases! { $Texte=$TexteT[$i]; $size = imagettfbbox($Taille_Police,0,$font,$Texte); $LargeurTemp=abs($size[0]-$size[2]); $X_PositionTexte=($LargeurRectangle-$LargeurTemp)/2; $Y_PositionTexte=$HauteurRectangle-$Padding/2-($HauteurTexte*1.2*($NbrePhrases-($i+1))/$NbrePhrases); //Calcul du point de départ du texte $X = (($X_PositionTexte - $CentreX) * cos($AngCrad) - ($Y_PositionTexte - $CentreY) * sin($AngCrad) + $CentreX)+$X_Position; $Y = (($X_PositionTexte - $CentreX) * sin($AngCrad) + ($Y_PositionTexte - $CentreY) * cos($AngCrad) + $CentreY)+$Y_Position; ImageTTFText($Image2, $Taille_Police,$Rotation,$X, $Y, $Couleur1, $font, $TexteT[$i]); } } /* -------------------------------------------------------------------------------------------------------------------- Cette fonction crée un texte d'une couleur CouleurRemplissage, entouré en gras de la couleur Couleur Fond, Centré sur lui même sur plusieurs lignes si nécessaires. Le Texte peut être écrit obliquement. ------------------------------------------------------------------------------------------------------------------*/ function Cree_Argument_Vente($Image,$Texte,$Taille_Police,$Rotation,$JustificationHoriz,$JustificationVert) { //$CouleurTransparente="FEFCFC"; if (getenv("REMOTE_ADDR")!="127.0.0.1") { $extension_police=".ttf";} else {$extension_police="";} putenv('GDFONTPATH=' . realpath('.')); $Chemin_Police="/polices"; $font = $Chemin_Police."/".POLICE_ARGUMENT.$extension_police; // a remplacer par votre police $TexteT=explode("|",$Texte); $NbrePhrases=count($TexteT); $LargeurTexte=0; $HauteurTexte=0; $LargeurTemp=0; for ($i=0;$i<$NbrePhrases;$i++) {//détermine la plus forte largeur et la hauteur du rectangle $Texte=$TexteT[$i]; $size = imagettfbbox($Taille_Police,0,$font,$Texte); $LargeurTemp=abs($size[0]-$size[2]); if ($LargeurTexte<$LargeurTemp) {$LargeurTexte=$LargeurTemp;} $HauteurTemp=abs($size[3]-$size[5]); //if ($i==0) {$HauteurTexte=$HauteurTemp*0.3;} $HauteurTexte=$HauteurTexte+1.2*($HauteurTemp); }//fin détermination du texte $Padding=8; $LargeurTexte=$LargeurTexte+$Padding; $HauteurTexte=$HauteurTexte+$Padding; $Image2=Cree_Fond_Bandeau('','',$LargeurTexte,$HauteurTexte,$CouleurTransparente); $X=0; $Y=$Taille_Police; $LargeurRectangle=imagesx($Image2); $HauteurRectangle=imagesy($Image2); //cas particulier de la rotation de l'image if ($Rotation!=0) //alors on fait tourner l'image {$rouge = hexdec(substr($CouleurTransparente,0,2)); $vert = hexdec(substr($CouleurTransparente,2,2)); $bleu = hexdec(substr($CouleurTransparente,4,2)); $CouleurTransparente1=imagecolorallocate($Image2,$rouge,$vert,$bleu); imagecolortransparent($Image2,$CouleurTransparente1); $Image3=imagerotate($Image2,$Rotation, $CouleurTransparente1 ); $LargeurRectangle=imagesx($Image3); $HauteurRectangle=imagesy($Image3); imagedestroy($Image3); } //on copie maintenant image 3 sur image //a ce stade image0 cntient l'encart, $LargeurRectangle et $HauteurRectangle, ses dimensions. $ImageHauteur=imagesy($Image); $ImageLargeur=imagesx($Image); $Padding=10; //on essaie nouvelle fonction $rouge = hexdec(substr($CouleurChoisie,0,2)); $vert = hexdec(substr($CouleurChoisie,2,2)); $bleu = hexdec(substr($CouleurChoisie,4,2)); $Couleur1=imagecolorallocate($Image,$rouge,$vert,$bleu); switch ($JustificationHoriz) { case "Gauche" : $X_Position=$Padding+$LargeurRectangle/2;break; case "Centre" : $X_Position=($ImageLargeur/2);break; case "Droit" : $X_Position=$ImageLargeur-($LargeurRectangle/2)-$Padding; break; default : break; } switch ($JustificationVert) { case "Haut" : $Y_Position=$HauteurRectangle/2; break; case "Centre" : $Y_Position=$ImageHauteur/2;break; case "Bas" : $Y_Position=$ImageHauteur-$HauteurRectangle/2-$Padding; break; default : break; } $rouge = hexdec(substr(COULEUR_ARGUMENT,0,2)); $vert = hexdec(substr(COULEUR_ARGUMENT,2,2)); $bleu = hexdec(substr(COULEUR_ARGUMENT,4,2)); $Couleur1=imagecolorallocate($Image,$rouge,$vert,$bleu); if (COULEUR_BORD_ARGUMENT!='') {$rouge = hexdec(substr(COULEUR_BORD_ARGUMENT,0,2)); $vert = hexdec(substr(COULEUR_BORD_ARGUMENT,2,2)); $bleu = hexdec(substr(COULEUR_BORD_ARGUMENT,4,2)); $Couleur2=imagecolorallocate($Image,$rouge,$vert,$bleu); } $_x = array(2, 0, 2, 0, -2, -2, 2, 0, -2); $_y = array(0, -2, -2, 0, 0, -2, 2, 2, 2); for ($i=0;$i<$NbrePhrases;$i++) { if (COULEUR_BORD_ARGUMENT!='') {//dessine le fond des caractères en couleur COULEURBORD ARGUMENT for($n=0;$n<=8;$n++) { $CodeErreur=Imagettftext_Cr($Image, $Taille_Police, $Rotation, $X_Position+$_x[$n], $Y_Position+$_y[$n], $Couleur2, $font, $TexteT[$i]); } } $CodeErreur=Imagettftext_Cr($Image, $Taille_Police, $Rotation, $X_Position, $Y_Position, $Couleur1, $font, $TexteT[$i]); $Y_Position=$Y_Position+$Taille_Police*1.3; $X_Position=$X_Position+($Taille_Police*sin(deg2rad($Rotation))/sin(deg2rad(90))); } } /*-------------------------------------------------------------------------------------------------------------------- cette fonction crée une image gif clignotante sur fond coloré avec un encadre. les différentes étapes de texte sont séparés par des pipes |. ex : $Texte="mes ventes|flash"; si hauteur et largeur ne sont pas passés, calcule automatiquement la meilleure tzille. ------------------------------------------------------------------------------------------------------------------*/ function Affichette_Clignotante($LargeurRectangle,$HauteurRectangle,$Texte,$Police, $Taille_Police, $CouleurTexte,$CouleurFond,$CouleurBord) { //création du tableau de texte $Tab_Texte=explode("|",$Texte); //recherche de la plus grande largeur pour dessiner l'image $LargeurMax=0; $HauteurMax=0; for ($i=0;$i$LargeurMax) {$LargeurMax=$Dim[0];} if ($Dim[1]>$HauteurMax) {$HauteurMax=$Dim[1];} } $Padding=$Taille_Police*0.3; if ($LargeurMax>$LargeurRectangle) {$LargeurRectangle=$LargeurMax+$Padding*2;} if ($HauteurMax>$HauteurRectangle) {$HauteurRectangle=$HauteurMax+$Padding*2;} //definition de la couleur de fond $rouge = hexdec(substr($CouleurBord,0,2)); $vert = hexdec(substr($CouleurBord,2,2)); $bleu = hexdec(substr($CouleurBord,4,2)); for ($i=0;$i getAnimation(); } /*------------------------------------------------------------------------------------------------------------------- Cette fonction récupère les images passées dans le tableau $Tab_Image et en crée une image gif anmée Les images doivent toutes être ouvertes par imagecreatefromgif ou imagecreatetruecolor. Elles doivent également êre toutes de la même couleur $Delai déigne le temps séparant chaque image $DernierDelai designe le temps entre la fin de l'animation et son renouvellement, c'est cmme un teps de pause ------------------------------------------------------------------------------------------------------------------*/ function Cree_Gif_Anime($Tab_Image,$Delai,$DernierDelai) { //valeur par defaut du delai normal if (!isset($Delai) or $Delai==0) {$Delai=50;} for ($i=0;$i getAnimation(); } /*----------------------------------------------------------------------------------------------------------------- cette fonction crée un encadré des prix avec le prix normal barré et le prix nouveau en plus gros. un message peut être diffusé en dessous ----------------------------------------------------------------------------------------------------------------*/ function Cree_Encart_Prix($Image,$Prix_Normal,$Prix_Rabais,$Commentaire,$JustificationHoriz,$JustificationVert) { //recherche de la plus grande largeur pour dessiner l'image $LargeurMax=0; $HauteurMax=0; if (isset($Prix_Normal) && $Prix_Normal>0) { $Dim=Dimension_Cree_Texte($Prix_Normal,POLICE_PRIXNORMAL,TAILLE_POLICE_PRIX_NORMAL); $Padding=TAILLE_POLICE_PRIX_NORMAL; $LargeurPrixNormal=$Dim[0]+$Padding;; $HauteurPrixNormal=$Dim[1]+$Padding; } else {$LargeurPrixNormal=0; $HauteurPrixNormal=0;} //Recherche hauteur largeur prix rabais if (isset($Prix_Rabais) && $Prix_Rabais>0) { $Dim=Dimension_Cree_Texte($Prix_Rabais,POLICE_PRIXRABAIS,TAILLE_POLICE_PRIX_RABAIS); $Padding=TAILLE_POLICE_PRIX_RABAIS; $LargeurPrixRabais=$Dim[0]+$Padding;; $HauteurPrixRabais=$Dim[1]+$Padding; } else {$LargeurPrixRabais=0; $HauteurPrixRabais=0; } //on retient les plus grandes des deux hauteurs, en fonction des polices choisies if ($HauteurPrixNormal>$HauteurPrixRabais) {$HauteurPrixRabais=$HauteurPrixNormal;} else {$HauteurPrixNormal=$HauteurPrixRabais;} //recherche de la largeur du commentaire if (strlen($Commentaire)>10) {$Taille_PoliceCommentaire=TAILLE_POLICECOMMENTAIRE*10/(strlen($Commentaire)/1.5); } else {$Taille_PoliceCommentaire=TAILLE_POLICECOMMENTAIRE;} $Dim=Dimension_Cree_Texte($Commentaire,POLICE_COMMENTAIRE,$Taille_PoliceCommentaire); $Padding=$Taille_PoliceCommentaire; $LargeurCommentaire=$Dim[0]+$Padding;; $HauteurCommentaire=$Dim[1]+$Padding; //definition de la taille de l'image totale $LargeurRectangle=$LargeurPrixNormal+$LargeurPrixRabais; if ($LargeurCommentaire<$LargeurRectangle) {$LargeurCommentaire=$LargeurRectangle;} else {$LargeurRectangle=$LargeurCommentaire; //recalcul des largeurs des deux autres cadres du dessus $LargeurPrixRabais=$LargeurRectangle-$LargeurPrixNormal; if (!isset($Prix_Rabais) or $Prix_Rabais==0) {$LargeurPrixNormal=$LargeurRectangle;} } $HauteurRectangle=$HauteurPrixNormal+$HauteurCommentaire; //création de l'image support $CouleurTransparente="FEFCFC"; $Image0=Cree_Fond_Bandeau('','',$LargeurRectangle,$HauteurRectangle,$CouleurTransparente); if (isset($Prix_Normal) && $Prix_Normal>0) { //creation de l'image du prix normal if ($Prix_Rabais==0 or !isset($Prix_Rabais)) {$Image1=Cree_Fond_Bandeau('','',$LargeurPrixNormal,$HauteurPrixNormal,COULEURFOND_UNSEULPRIX);} else {$Image1=Cree_Fond_Bandeau('','',$LargeurPrixNormal,$HauteurPrixNormal,COULEURFOND_PRIXNORMAL); } //on dessine le rectangle du prix normal avec son fond $rouge = hexdec(substr(COULEURBORD_PRIXNORMAL,0,2)); $vert = hexdec(substr(COULEURBORD_PRIXNORMAL,2,2)); $bleu = hexdec(substr(COULEURBORD_PRIXNORMAL,4,2)); $CouleurPrixNorm_Bord = imagecolorallocate($Image1,$rouge,$vert,$bleu); imagerectangle ($Image1, 0, 0, $LargeurPrixNormal-1, $HauteurPrixNormal-1, $CouleurPrixNorm_Bord); //on ecrit le prix dessus if ($Prix_Rabais==0 or !isset($Prix_Rabais)) {Cree_Texte($Image1,0,0,$LargeurPrixNormal,$HauteurPrixNormal,$Prix_Normal,POLICE_PRIXRABAIS,TAILLE_POLICE_PRIX_RABAIS,COULEURFOND_PRIXRABAIS,"Centre","Centre");} else {Cree_Texte($Image1,0,0,$LargeurPrixNormal,$HauteurPrixNormal,$Prix_Normal,POLICE_PRIXNORMAL,TAILLE_POLICE_PRIX_NORMAL,COULEURPOLICE_PRIXNORMAL,"Centre","Centre");} if ((isset($Prix_Rabais) && $Prix_Rabais!=0)) { //on trace le trait qui barre le prix normal /* if ($Prix_Rabais=="0.00" or $Prix_Rabais=="0,00") { $rouge = hexdec(substr(COULEURFOND_PRIXRABAIS,0,2)); $vert = hexdec(substr(COULEURFOND_PRIXRABAIS,2,2)); $bleu = hexdec(substr(COULEURFOND_PRIXRABAIS,4,2)); $CouleurPrixNorm_Bord = imagecolorallocate($Image1,$rouge,$vert,$bleu); imagesetthickness($Image1,2); imageline($Image1,0,0,$LargeurPrixNormal,$HauteurPrixNormal,$CouleurPrixNorm_Bord); } else {imagesetthickness($Image1,4);} */ imagesetthickness($Image1,4); imageline($Image1,0,$HauteurPrixNormal,$LargeurPrixNormal,0,$CouleurPrixNorm_Bord); } imagecopy($Image0,$Image1,$LargeurRectangle-$LargeurPrixNormal,0,0,0,$LargeurPrixNormal,$HauteurPrixNormal); imagedestroy($Image1); } if (isset($Prix_Rabais) && $Prix_Rabais>0) { //creation de l'image du prix rabais if ($Prix_Normal==0 or !isset($Prix_Normal)) {$Image2=Cree_Fond_Bandeau('','',$LargeurPrixRabais,$HauteurPrixRabais,COULEURFOND_UNSEULPRIX);} else {$Image2=Cree_Fond_Bandeau('','',$LargeurPrixRabais,$HauteurPrixRabais,COULEURFOND_PRIXRABAIS); } //on dessine le rectangle du prix normal avec son fond $rouge = hexdec(substr(COULEURBORD_PRIXRABAIS,0,2)); $vert = hexdec(substr(COULEURBORD_PRIXRABAIS,2,2)); $bleu = hexdec(substr(COULEURBORD_PRIXRABAIS,4,2)); $CouleurPrixRabais_Bord = imagecolorallocate($Image2,$rouge,$vert,$bleu); imagerectangle ($Image2, 0, 0, $LargeurPrixRabais-1, $HauteurPrixRabais-1, $CouleurPrixRabais_Bord); //on trace le trait qui barre le prix normal //on ecrit le prix dessus if ($Prix_Normal==0 or !isset($Prix_Normal)) {Cree_Texte($Image2,0,0,$LargeurPrixRabais,$HauteurPrixRabais,$Prix_Rabais,POLICE_PRIXRABAIS,TAILLE_POLICE_PRIX_RABAIS,COULEURFOND_PRIXRABAIS,"Centre","Centre");} else {Cree_Texte($Image2,0,0,$LargeurPrixRabais,$HauteurPrixRabais,$Prix_Rabais,POLICE_PRIXRABAIS,TAILLE_POLICE_PRIX_RABAIS,COULEURPOLICE_PRIXRABAIS,"Centre","Centre");} imagecopy($Image0,$Image2,$LargeurRectangle-$LargeurPrixRabais-$LargeurPrixNormal,0,0,0,$LargeurPrixRabais,$HauteurPrixRabais); imagedestroy($Image2); } //creation de l'image du commentaire $Image3=Cree_Fond_Bandeau('','',$LargeurCommentaire,$HauteurCommentaire,COULEURFOND_COMMENTAIRE); //on ecrit le commentaire centré Cree_Texte($Image3,0,0,$LargeurCommentaire,$HauteurCommentaire,$Commentaire,POLICE_COMMENTAIRE,$Taille_PoliceCommentaire,COULEURPOLICE_COMMENTAIRE,"Centre","Centre"); //on recopie cette image sur l'image de fond globale imagecopy($Image0,$Image3,0,$HauteurPrixNormal,0,0,$LargeurCommentaire,$HauteurCommentaire); imagedestroy($Image3); //a ce stade image0 cntient l'encart, $LargeurRectangle et $HauteurRectangle, ses dimensions. $ImageHauteur=imagesy($Image); $ImageLargeur=imagesx($Image); $Padding=10; switch ($JustificationHoriz) { case "Gauche" : $X_Position=$Padding;break; case "Centre" : $X_Position=($ImageLargeur-$LargeurRectangle)/2;break; case "Droit" : $X_Position=$ImageLargeur-$LargeurRectangle-$Padding; break; default : break; } switch ($JustificationVert) { case "Haut" : $Y_Position=$Padding; break; case "Centre" : ($ImageHauteur-$HauteurRectangle)/2;break; case "Bas" : $Y_Position=$ImageHauteur-$HauteurRectangle-$Padding; break; default : break; } //pose la transparence du fond blanc $rouge = hexdec(substr($CouleurTransparente,0,2)); $vert = hexdec(substr($CouleurTransparente,2,2)); $bleu = hexdec(substr($CouleurTransparente,4,2)); $CouleurTransparente1=imagecolorallocate($Image0,$rouge,$vert,$bleu); imagecolortransparent($Image0,$CouleurTransparente1); imagecopymerge($Image,$Image0,$X_Position,$Y_Position,0,0,$LargeurRectangle,$HauteurRectangle,100); imagedestroy($Image0); } /*----------------------------------------------------------------------------------------------------------------- cette fonction cree un argumentaire en majuscules sur deux lignes la première ligne est d'une couleur, la seconde d'une autre les eux phrases sont passées par le pipe $Texte="phrase1|$Phrase2"; ----------------------------------------------------------------------------------------------------------------*/ function Cree_Argument_Vente_Couleurs($Image,$Texte,$Taille_Police,$Rotation,$JustificationHoriz,$JustificationVert) { //$CouleurTransparente="FEFCFC"; if (getenv("REMOTE_ADDR")!="127.0.0.1") { $extension_police=".ttf";} else {$extension_police="";} putenv('GDFONTPATH=' . realpath('.')); $Chemin_Police="/polices"; $font = $Chemin_Police."/".POLICE_ARGUMENT.$extension_police; // a remplacer par votre police $TexteT=explode("|",$Texte); $NbrePhrases=count($TexteT); $LargeurTexte=0; $HauteurTexte=0; $LargeurTemp=0; for ($i=0;$i<$NbrePhrases;$i++) {//détermine la plus forte largeur et la hauteur du rectangle $Texte=strtoupper($TexteT[$i]); $size = imagettfbbox($Taille_Police,0,$font,$Texte); $LargeurTemp=abs($size[0]-$size[2]); if ($LargeurTexte<$LargeurTemp) {$LargeurTexte=$LargeurTemp;} $HauteurTemp=abs($size[3]-$size[5]); //if ($i==0) {$HauteurTexte=$HauteurTemp*0.3;} $HauteurTexte=$HauteurTexte+1.2*($HauteurTemp); }//fin détermination du texte $Padding=8; $LargeurTexte=$LargeurTexte+$Padding; $HauteurTexte=$HauteurTexte+$Padding; $Image2=Cree_Fond_Bandeau('','',$LargeurTexte,$HauteurTexte,"000000"); $LargeurRectangle=imagesx($Image2); $HauteurRectangle=imagesy($Image2); //cas particulier de la rotation de l'image if ($Rotation!=0) //alors on fait tourner l'image { $Image3=imagerotate($Image2,$Rotation, 0 ); $LargeurRectangle=imagesx($Image3); $HauteurRectangle=imagesy($Image3); imagedestroy($Image3); } //on copie maintenant image 3 sur image //a ce stade image0 cntient l'encart, $LargeurRectangle et $HauteurRectangle, ses dimensions. $ImageHauteur=imagesy($Image); $ImageLargeur=imagesx($Image); $Padding=10; switch ($JustificationHoriz) { case "Gauche" : $X_Position=$Padding+$LargeurRectangle/2;break; case "Centre" : $X_Position=($ImageLargeur/2);break; case "Droit" : $X_Position=$ImageLargeur-($LargeurRectangle/2)-$Padding; break; default : break; } switch ($JustificationVert) { case "Haut" : $Y_Position=$HauteurRectangle/2; break; case "Centre" : $Y_Position=($ImageHauteur)/2;break; case "Bas" : $Y_Position=$ImageHauteur-$HauteurRectangle/2-$Padding; break; default : break; } $rouge = hexdec(substr(COULEUR_ARGUMENT,0,2)); $vert = hexdec(substr(COULEUR_ARGUMENT,2,2)); $bleu = hexdec(substr(COULEUR_ARGUMENT,4,2)); $Couleur1=imagecolorallocate($Image,$rouge,$vert,$bleu); $rouge = hexdec(substr(COULEUR_ARGUMENT2,0,2)); $vert = hexdec(substr(COULEUR_ARGUMENT2,2,2)); $bleu = hexdec(substr(COULEUR_ARGUMENT2,4,2)); $Couleur3=imagecolorallocate($Image,$rouge,$vert,$bleu); if (COULEUR_BORD_ARGUMENT!='') {$rouge = hexdec(substr(COULEUR_BORD_ARGUMENT,0,2)); $vert = hexdec(substr(COULEUR_BORD_ARGUMENT,2,2)); $bleu = hexdec(substr(COULEUR_BORD_ARGUMENT,4,2)); $Couleur2=imagecolorallocate($Image,$rouge,$vert,$bleu); } $_x = array(2, 0, 2, 0, -2, -2, 2, 0, -2); $_y = array(0, -2, -2, 0, 0, -2, 2, 2, 2); for ($i=0;$i<$NbrePhrases;$i++) { if (COULEUR_BORD_ARGUMENT!='') {//dessine le fond des caractères en couleur COULEURBORD ARGUMENT for($n=0;$n<=8;$n++) { $CodeErreur=Imagettftext_Cr($Image, $Taille_Police, $Rotation, $X_Position+$_x[$n], $Y_Position+$_y[$n], $Couleur2, $font, strtoupper($TexteT[$i])); } } if (rand(0,1)==0) {$CodeErreur=Imagettftext_Cr($Image, $Taille_Police, $Rotation, $X_Position, $Y_Position, $Couleur1, $font, strtoupper($TexteT[$i])); } else {$CodeErreur=Imagettftext_Cr($Image, $Taille_Police, $Rotation, $X_Position, $Y_Position, $Couleur3, $font, strtoupper($TexteT[$i])); } $Y_Position=$Y_Position+$Taille_Police*1.3; $X_Position=$X_Position+($Taille_Police*sin(deg2rad($Rotation))/sin(deg2rad(90))); } } ?>