Lors du développement de sites Web, les systèmes de code de vérification sont un moyen important de prévenir l'enregistrement malveillant et les attaques de robots. PHP a une bibliothèque GD puissante intégrée, qui peut facilement créer des codes de vérification d'image personnalisés. Parmi eux, la fonction ImageFontWidth peut nous aider à calculer la largeur de caractère dynamiquement, réalisant ainsi la conception de la largeur adaptative de l'image du code de vérification, ce qui rend le code de vérification plus beau et raisonnable.
Cet article expliquera en détail comment utiliser la fonction ImageFontWidth de PHP pour implémenter un système de code de vérification d'image de largeur adaptative.
ImageFontWidth est une fonction de la bibliothèque PHP GD qui renvoie la largeur (unités: pixels) d'un seul caractère dans une police intégrée. L'utilisation de base est la suivante:
imagefontwidth(int $font): int
La police du paramètre $ est un entier représentant la taille de la police, allant de 1 à 5, plus le nombre est grand, plus la police est grande.
Cette fonction est souvent utilisée en conjonction avec ImageFonteight pour calculer avec précision l'espace occupé par les caractères.
Pour créer une image de code de vérification avec une largeur adaptative, les étapes principales sont:
Générer des chaînes de code de vérification (généralement une combinaison de lettres et de nombres aléatoires)
Calculez la largeur totale du code de vérification <br> Utilisez ImageFontWidth pour obtenir la largeur d'un seul caractère, multipliez par le nombre de caractères et obtenez la largeur requise de l'ensemble du code de vérification
Créer une toile basée sur la largeur <br> Utilisez ImageCreateTrueColor pour créer des images avec une largeur et une hauteur spécifiées
Dessiner des caractères de code de vérification <br> Écrivez des caractères sur l'image dans l'ordre, disposés de gauche à droite
Sortir des images et détruire les ressources
Voici un exemple complet de code qui montre comment implémenter un code de vérification de largeur adaptatif basé sur ImageFontWidth :
<?php
// Générer la chaîne de code de vérification aléatoire
function generateCaptchaCode($length = 5) {
$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; // Évitez les personnages confus
$code = '';
for ($i = 0; $i < $length; $i++) {
$code .= $chars[random_int(0, strlen($chars) - 1)];
}
return $code;
}
// La fonction principale génère une image de code de vérification
function createCaptchaImage($code) {
$font = 5; // Utiliser la taille de la police intégrée5
$charWidth = imagefontwidth($font);
$charHeight = imagefontheight($font);
$padding = 10; // Marges gauche et gauche
// Calculer la largeur et la hauteur de l'image
$width = $charWidth * strlen($code) + $padding * 2;
$height = $charHeight + $padding * 2;
// Créer des ressources d'image
$image = imagecreatetruecolor($width, $height);
// Définir la couleur
$bgColor = imagecolorallocate($image, 255, 255, 255); // Fond blanc
$textColor = imagecolorallocate($image, 0, 0, 0); // Texte noir
$noiseColor = imagecolorallocate($image, 100, 120, 180); // Couleur de bruit
// Remplir l'arrière-plan
imagefilledrectangle($image, 0, 0, $width, $height, $bgColor);
// Ajouter un bruit d'interférence
for ($i = 0; $i < 50; $i++) {
imagesetpixel($image, random_int(0, $width), random_int(0, $height), $noiseColor);
}
// Tire le texte du code de vérification par caractère
$x = $padding;
$y = $padding;
for ($i = 0; $i < strlen($code); $i++) {
imagestring($image, $font, $x, $y, $code[$i], $textColor);
$x += $charWidth;
}
// En-tête d'image de sortie
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
}
// Générer la chaîne de code de vérification
$captchaCode = generateCaptchaCode(6);
// Image de code de vérification de sortie
createCaptchaImage($captchaCode);
?>
Largeur adaptative : le code calcule dynamiquement la largeur d'un seul caractère via ImageFontWidth , se multiplie par le nombre de caractères de code de vérification, puis ajoute des marges, de sorte que la largeur de l'image de code de vérification est automatiquement ajustée avec la longueur du contenu.
Taille de la police : l'exemple utilise la police intégrée GD 5. Si vous avez besoin d'un meilleur effet visuel, vous pouvez utiliser ImagettfText pour charger la police TrueType, mais vous devez en outre traiter le calcul de la largeur des caractères.
Sécurité : Après avoir généré le code de vérification, la chaîne de code de vérification peut être stockée dans la session pour vérification lorsque le formulaire est soumis.
Embellissement : Vous pouvez ajouter plus de bruit et de courbes, ou modifier la couleur de la police pour améliorer la capacité anti-crackage des codes de vérification.
Grâce à la fonction ImageFontWidth de PHP, nous pouvons obtenir avec précision la largeur d'un seul caractère et réaliser un ajustement dynamique de la largeur de l'image du code de vérification. Cette méthode est simple et efficace et convient pour générer des codes de vérification d'image de largeur adaptative de base.
Si des effets de code de vérification plus complexes sont nécessaires, vous pouvez combiner d'autres fonctions de dessin GD ou utiliser une bibliothèque de code de vérification tierce.