Le code suivant permet la génération d'un fichier de type PNG à fond transparent contenant un texte blanc détouré de noir.
Tout d'abord, on crée l'image en mémoire. Pour gérer la transparence, il faut utiliser la fonction imagecreatetruecolor() qui va gérer le canal alpha (transparence) :
$imgtmp = imagecreatetruecolor(740, 50);
imagecolortransparent($imgtmp, imagecolorallocate($imgtmp, 0, 0, 0));
imagealphablending($imgtmp, false);
imagesavealpha($imgtmp, true);
Ensuite on définit quelques variables qui seront utilisées dans les divers appels aux fonctions de création de graphique à partir de texte :
$fontName = './fonts/OldTypefaces.ttf';
$fontSize = 30;
$texte = 'Texte de la bannière';
Ensuite, on génère à l'aide de la fonction imagettftext() l'ombrage de la police avec une couleur sombre, en faisant appel 4 fois à la fonction pour les 4 coordonnées qui nous intéresse, c'est à dire aux positions [x-1, y-1], [x 1, y-1], [x-1, y 1] et [x 1, y 1]. A noter que pour chaque appel on désactivera l'antialiasing en passant l'identifiant de couleur en négatif, sinon le fait de passer l'antialiasing plusieurs fois aura l'effet inverse et aura un rendu horrible au final. Voici le code :
$couleur = imagecolorallocate($imgtmp, 64, 64, 64);
imagettftext($imgtmp, $fontSize, 0, 21, 35, -$couleur, $fontName, $texte);
imagettftext($imgtmp, $fontSize, 0, 23, 35, -$couleur, $fontName, $texte);
imagettftext($imgtmp, $fontSize, 0, 22, 34, -$couleur, $fontName, $texte);
imagettftext($imgtmp, $fontSize, 0, 22, 36, -$couleur, $fontName, $texte);
Enfin, on génère le texte en blanc à la position [x, y], en laissant bien l'identifiant de la couleur en positif pour que l'antialiasing fasse son travail :
$couleur = imagecolorallocate($imgtmp, 236, 236, 236);
imagettftext($imgtmp, $fontSize, 0, 22, 35, $couleur, $fontName, $texte);
Finalement, on enregistre le fichier PNG et on libère la mémoire :
imagepng($imgtmp, "images/banniere.png");
imagedestroy($imgtmp);
En espérant que cela puisse être utile, vu le temps que j'ai passé à essayer de faire fonctionner de manière correcte l'antialiasing !