Comment changer la police du texte du Captcha

Bonjour, je débute en PHP CSS Mysql, j’ai recuperé sur ce site le code pour un captcha: Formulaire avec captcha en PHP - WayToLearnX

Je voudrais utiliser cette police: Smartie | dafont.com
mais rien ne marche (ni dans mon style CSS ni juste dans le code php de ce site) pouvez vous m’aider avec explication (en partant du code de ce site)?

Merci d’avance

Peut-être que votre navigateur ne supporte pas ce font. Je vous recommande toujours d’utiliser les formats TTF/OTF et WOFF pour vous assurer que vos polices sont prises en charge par tous les navigateurs.

Pouvez-vous vérifier l’onglet « Réseau » dans la console de votre navigateur pour vous assurer que la police est chargée correctement ?

Pour cela, faites un clic droit sur la page de votre site web et choisissez « Inspecter » dans le menu déroulant. Dans la barre de navigation supérieure de la fenêtre, cliquez sur « Réseau » ou « Network » et vérifiez si la police est chargée correctement. Ici par exemple le font est OpenSans-Bold.

Si vous avez essayez quelque chose comme ceci:

@font-face {
    font-family: 'Smartie';
    src: url('/font/Smartie.ttf');
}
$status = "<p style='font-size:20px; font-family: Smartie;'>";

Cela ne va pas marcher.

Le fait de ne fournir qu’un fichier .ttf pour la police Web ne sera pas suffisant pour la prise en charge de plusieurs navigateurs. La meilleure combinaison possible à présent est d’utiliser la combinaison de
fichier TTF, OTF, WOFF, WOFF2 et SVG:

@font-face {
  font-family: 'Smartie';
  src: url('Smartie.eot'); /* Modes de compatibilité avec IE9 */
  src: url('Smartie.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
       url('Smartie.woff') format('woff'), /* Navigateurs modernes */
       url('Smartie.ttf')  format('truetype'), /* Safari, Android, iOS */
       url('Smartie.svg#svgFontName') format('svg'); /* Legacy iOS */
}

Ce code suppose que vous avez les formats TTF, OTF, WOFF, WOFF2 et SVG pour votre police. Si le Zip télécharger ne contient pas ces fichiers, vous pouvez utiliser ce site : Transfonter.org pour convertir le fichier TTF vers les autres formats.

Aussi, les navigateurs modernes se tournent vers les polices .woff, donc vous pouvez probablement faire cela aussi :

@font-face {
  font-family: 'Smartie';
  src: url('Smartie.woff') format('woff'), /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
   url('Smartie.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5, Opera 10+, Safari 3—5 */
}  

Bonjour, grace a ton aide je peux bien appliquer la police à mon site en remplacent le font-faily de mon CSS (body) mais je n’arrive pas a l’appliquer au captcha qui se génére indépendament, et dès que je met du code l’image ne se charge plus… voici le code de generation de mon image captcha, j’avoue je sèche (mais je débute)…

<?php

  session_start();
    //Génération du code aléatoire
    $code=rand(100000,999999);
   
   
   $_SESSION["code"]=$code;
   // Creation de l'image, taille du fond et couleur:
   $image = imagecreatetruecolor(63, 25);
   $Blanc = imagecolorallocate($image, 255, 255, 255);
   $Noir = imagecolorallocate($image, 0, 0, 0);
   $Rouge = imagecolorallocate($image, 255, 0, 0);
   $GrisF = imagecolorallocate($image, 128, 128, 128);
   $GrisC = imagecolorallocate($image, 192, 192, 192);
   $Bleu = imagecolorallocate($image, 0, 128, 255);
   $Vert = imagecolorallocate($image, 0, 255, 0);
   $Jaune = imagecolorallocate($image, 255, 255, 0);

   //Couleur Captcha
   $background = $Noir; 
   $forground = $GrisC;

   imagefill($image, 0, 0, $background);
   imagestring($image, 5, 5, 5, $code, $forground);
   header("Cache-Control: no-cache, must-revalidate");
   header('Content-type: image/png');
   imagepng($image);
   imagedestroy($image);
?>


Si cela est possible j’aimerais une explication plutôt qu’une simple réponse, j’ai bien compris le principe des polices de caractères grace à toi Isaac.

Bonjour @johnDoe73. En fait, si vous voulez changer le font du texte dans le captcha, vous devez utiliser la fonction imagettftext() en PHP. Essayer le code suivant:

<?php

   session_start();
   
   //Génération du code aléatoire
   $code=rand(100000,999999);
   
   $ttf = "./Smartie.ttf";     // Chemin vers le fichier du font
   
   $_SESSION["code"]=$code;

   // Crée une nouvelle image à partir du fichier bg.gif
   $image = imagecreatefromgif("bg.gif");     

   // Définit une couleur blanche pour le texte
   $textColor = imagecolorallocate($image, 255, 255, 255);    

   // Dessiner le texte avec la police Smartie     
   imagettftext($image, 11, 10, 5, 20, $textColor, $ttf, $_SESSION["code"]); 
   
   header("Cache-Control: no-cache, must-revalidate");
   header('Content-type: image/png');
   imagepng($image);  // Sortie de l'image générée   
   imagedestroy($image);
?>

N’oublier pas de spécifier le chemin vers le fichier du font et l’image d’arrière-plan GIF. imagecreatefromgif()

Bonsoir, merci de m’avoir eclairé mais cela ne fonctionne pas, vous me mettez un gif pour creer l’image mais sur le descriptif de la fonction imagettftext() nous pouvons creer une image avec imagecreatetruecolor()
https://www.php.net/manual/fr/function.imagettftext.php
Dans les deux cas cela ne fonctionne pas voici le code actuel:

<?php

  session_start();
    //Génération du code aléatoire
    $code=rand(100000,999999);
    $ttf = "/../config/Smartie.ttf";

   
   $_SESSION["code"]=$code;
   // Creation de l'image, taille du fond et couleur:
   //$image = "/../nego/config/img.gif");   
   $image = imagecreatetruecolor(63, 25);
   $Blanc = imagecolorallocate($image, 255, 255, 255);
   $Noir = imagecolorallocate($image, 0, 0, 0);
   $Rouge = imagecolorallocate($image, 255, 0, 0);
   $GrisF = imagecolorallocate($image, 128, 128, 128);
   $GrisC = imagecolorallocate($image, 192, 192, 192);
   $Bleu = imagecolorallocate($image, 0, 128, 255);
   $Vert = imagecolorallocate($image, 0, 255, 0);
   $Jaune = imagecolorallocate($image, 255, 255, 0);

   //Couleur Captcha
   $background = $Noir; 
   $forground = $GrisC;
   
   imagettftext($image, 11, 10, 5, 20, $Rouge, $ttf, $_SESSION["code"]);
   //imagefill($image, 0, 0, $background);
   //imagestring($image, 5, 5, 5, $code, $forground);
   header("Cache-Control: no-cache, must-revalidate");
   header('Content-type: image/png');
   
   imagepng($image);
   imagedestroy($image);
?>

et voici le resultat:

Je continu mes recherches.
Merci de votre aide en tout cas j’avance.

Ah désolé, j’ai pensé que vous avez mis une image en background, en tout cas essayer de spécifier le chemin réel du ttf au lieu du chemin relatif. Par exemple:

$ttf = "C:\wamp64\www\project\config\Smartie.ttf";

Cela fonctionne pour moi:

captcha

Même problème…
Je veux bien réesseyer avec le GIF, pouvez vous m’envoyer le votre celui que j’utilise ne fonctionne peut-être pas…

C’est bizarre, j’ai utilisé votre dernier code. Est-ce que votre code est héberger sur un serveur, ou vous travailler en locale? Voici le code qui fonctionne chez moi sur WampServer.

<?php

  session_start();
    //Génération du code aléatoire
    $code=rand(100000,999999);
    $ttf = "C:\wamp64\www\captcha\Smartie.ttf";

   
   $_SESSION["code"]=$code;
   // Creation de l'image, taille du fond et couleur:
   //$image = "/../nego/config/img.gif");   
   $image = imagecreatetruecolor(63, 25);
   $Blanc = imagecolorallocate($image, 255, 255, 255);
   $Noir = imagecolorallocate($image, 0, 0, 0);
   $Rouge = imagecolorallocate($image, 255, 0, 0);
   $GrisF = imagecolorallocate($image, 128, 128, 128);
   $GrisC = imagecolorallocate($image, 192, 192, 192);
   $Bleu = imagecolorallocate($image, 0, 128, 255);
   $Vert = imagecolorallocate($image, 0, 255, 0);
   $Jaune = imagecolorallocate($image, 255, 255, 0);

   //Couleur Captcha
   $background = $Noir; 
   $forground = $GrisC;
   
   imagettftext($image, 11, 10, 5, 20, $Rouge, $ttf, $_SESSION["code"]);
   //imagefill($image, 0, 0, $background);
   //imagestring($image, 5, 5, 5, $code, $forground);
   header("Cache-Control: no-cache, must-revalidate");
   header('Content-type: image/png');
   
   imagepng($image);
   imagedestroy($image);
?>

Dans mon cas, j’utilise Windows. Si vous utiliser Linux, essayez le code suivant:

// Définir la variable d'environnement pour GD
putenv('GDFONTPATH=' . realpath('.'));

// Nommez la police à utiliser (sans spécifiez l'extension .ttf).
$font = 'Smartie';

Si toujours ne fonctionne pas, placez le fichier de la police Smartie.ttf à côté du script captcha.php

Je suis sous Windows 10, Wamp server 3.2.6 x64, php 7.4.26
En local sur mon poste, j’ai esseyé Firefox, Chrome et Edge.
J’ai copier la police dans le meme dossier que ma page (en modifiant le chemin), même resultat…
J’avoue je suis perplexe, je sais que la police fonctionne car dans mon CSS si je l’affecte elle s’affiche sur mon texte…

Bonjour, je devais ètre fatigué, j’ai tout refais et cela fonctionne parfaitement…

Merci de votre aide.

1 « J'aime »