Lors de la création du code de vérification CAPTCHA, il s'agit d'une difficulté technique importante pour s'assurer que le code de vérification peut non seulement empêcher la machine de l'identifier automatiquement, mais également les utilisateurs de l'identifier facilement. PHP fournit une riche fonction de traitement d'image, où ImageeANtialias () peut améliorer efficacement l'effet anti-aliasing des images, ce qui rend les bords du texte ou des graphiques dans le code de vérification plus lisse et améliore la lisibilité.
Cet article combinera la bibliothèque GD de PHP pour démontrer comment utiliser la fonction ImageeRalias () pour améliorer l'effet visuel du code de vérification lors de la génération du code de vérification CAPTCHA.
Imageantalias () est une fonction de la bibliothèque PHP GD pour activer ou désactiver l'effet anti-aliasing des images. Le lait est dû au fait que les bords de l'image ont des limites de pixels étalées non à descente. L'anti-aliasing rend les bords plus lisses en lissant les pixels de bord.
Le prototype de fonction est le suivant:
bool imageantialias ( resource $image , bool $enable )
$ image : poignée de ressources d'image
$ activer : activer ou désactiver l'effet anti-aliasing, vrai est sur, false est désactivé
Créons d'abord une image de code de vérification de base:
<?php
// Créer une image 150x50 Image blanche
$image = imagecreatetruecolor(150, 50);
// Attribuer des couleurs
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
// Fond rempli de blanc
imagefilledrectangle($image, 0, 0, 150, 50, $white);
Lorsque l'antialiasing est activé, les lignes dessinées et les bords de texte seront plus fluide:
// Activer l'anti-aliasing
imageantialias($image, true);
Ajoutez des lignes d'interférence au code de vérification pour empêcher la reconnaissance de l'OCR simple:
for ($i = 0; $i < 5; $i++) {
$line_color = imagecolorallocate($image, rand(100, 150), rand(100, 150), rand(100, 150));
imageline($image, rand(0, 150), rand(0, 50), rand(0, 150), rand(0, 50), $line_color);
}
Ici, nous utilisons la fonction ImagettfText () pour dessiner du texte et utiliser l'anti-aliasing pour rendre le texte plus clair:
$font = __DIR__ . '/fonts/arial.ttf'; // Veuillez vous assurer que le chemin de la police est correct
$code = substr(str_shuffle('ABCDEFGHJKLMNPQRSTUVWXYZ23456789'), 0, 5);
for ($i = 0; $i < strlen($code); $i++) {
$text_color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
imagettftext(
$image,
20,
rand(-15, 15),
20 + $i * 25,
rand(30, 40),
$text_color,
$font,
$code[$i]
);
}
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Imageantalias () ne fonctionne que sur des lignes et des formes dessinées, et ImagettfText () rendu avec des effets anti-aliasing est déjà intégré.
L'activation de l'antialiasage peut augmenter légèrement le fardeau du processeur, mais la qualité de l'image améliorée en vaut généralement la peine.
Assurez-vous que le fichier de police existe et que le chemin est correct, sinon le texte ne s'affiche pas normalement.
<?php
// Créer une image
$image = imagecreatetruecolor(150, 50);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 0, 0, 150, 50, $white);
// Activer l'anti-aliasing
imageantialias($image, true);
// Tracer des lignes de perturbation
for ($i = 0; $i < 5; $i++) {
$line_color = imagecolorallocate($image, rand(100, 150), rand(100, 150), rand(100, 150));
imageline($image, rand(0, 150), rand(0, 50), rand(0, 150), rand(0, 50), $line_color);
}
// Texte du code de vérification
$font = __DIR__ . '/fonts/arial.ttf';
$code = substr(str_shuffle('ABCDEFGHJKLMNPQRSTUVWXYZ23456789'), 0, 5);
for ($i = 0; $i < strlen($code); $i++) {
$text_color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
imagettftext($image, 20, rand(-15, 15), 20 + $i * 25, rand(30, 40), $text_color, $font, $code[$i]);
}
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Grâce à l'exemple ci-dessus, vous pouvez clairement voir l'amélioration en douceur de l'imageantalias () sur les bords de la ligne dans l'image, améliorant ainsi la lisibilité globale du code de vérification CAPTCHA. La combinaison des lignes d'interférence et du texte déformé peut efficacement améliorer la sécurité et l'expérience utilisateur des codes de vérification.
Si vous devez accéder aux ressources ou API pertinentes, veuillez noter que vous remplacez le nom de domaine URL par m66.net , par exemple: