Maison  >  Article  >  développement back-end  >  Meilleures pratiques pour générer des images de code de vérification avec des effets d'ombre à l'aide des bibliothèques PHP et GD

Meilleures pratiques pour générer des images de code de vérification avec des effets d'ombre à l'aide des bibliothèques PHP et GD

PHPz
PHPzoriginal
2023-07-12 09:57:131204parcourir

Meilleure pratique pour générer des images captcha avec des effets d'ombre à l'aide des bibliothèques PHP et GD

Captcha est une mesure de sécurité courante utilisée pour déterminer si l'utilisateur est un utilisateur réel et non un robot. Une manière courante de générer un CAPTCHA consiste à créer une image contenant des caractères aléatoires et à demander à l'utilisateur d'identifier et de saisir ces caractères à partir de l'image. Afin d'augmenter la sécurité du code de vérification, nous pouvons ajouter des effets visuels, tels que des effets d'ombre, à l'image du code de vérification générée. Cet article présentera les meilleures pratiques d'utilisation des bibliothèques PHP et GD pour générer des images de code de vérification avec des effets d'ombre.

La bibliothèque GD est une puissante bibliothèque de traitement graphique qui peut être utilisée via des modules d'extension PHP. Tout d’abord, nous devons nous assurer que la bibliothèque GD est installée sur le serveur. Si vous utilisez un système Linux, vous pouvez installer la bibliothèque GD via la commande suivante :

sudo apt-get install php-gd

Si vous utilisez un système Windows, vous pouvez décommenter la ligne suivante dans le fichier php.ini pour activer l'extension GD :

;extension=gd

Installation terminée Après cela, nous pouvons commencer à générer l'image du code de vérification avec effet d'ombre.

Tout d'abord, nous devons créer un fichier PHP et introduire la bibliothèque GD en haut du fichier :

<?php
header('Content-Type: image/png');
$width = 200;
$height = 60;
$image = imagecreate($width, $height);

Ensuite, nous pouvons définir certaines variables couramment utilisées pour générer des images de code de vérification, telles que le jeu de caractères, la longueur du code de vérification, etc. :

$charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
$codeLength = 4;
$font = "path/to/font.ttf";
$fontSize = 30;

Dans le code ci-dessus, nous utilisons un jeu de caractères contenant des lettres majuscules, des lettres minuscules et des chiffres, et le code de vérification comporte 4 caractères. Vous pouvez personnaliser le jeu de caractères et la longueur du code de vérification selon vos besoins. Dans le même temps, un fichier de police personnalisé (format .ttf) et une taille de police sont définis.

Ensuite, nous pouvons générer la chaîne captcha et la couleur d'arrière-plan et les ajouter à l'image :

$code = "";
for ($i = 0; $i < $codeLength; $i++) {
    $char = $charset[rand(0, strlen($charset) - 1)];
    $code .= $char;
    $color = imagecolorallocate($image, rand(0, 60), rand(0, 60), rand(0, 60));
    imagettftext($image, $fontSize, rand(-10, 10), 10 + $i * ($fontSize + 10), $height / 2 + $fontSize / 2, $color, $font, $char);
}

Dans le code ci-dessus, nous générons une chaîne captcha aléatoire via une boucle et utilisons la fonction imagecolorallocate( ) crée une couleur d'arrière-plan aléatoire. Ensuite, utilisez la fonction imagettftext() pour ajouter les caractères captcha à l'image. En ajustant les paramètres de la fonction imagettftext(), nous pouvons changer la position, l'angle et la couleur des caractères du code de vérification. imagecolorallocate()函数创建随机的背景颜色。然后,使用imagettftext()函数将验证码字符添加到图像中。通过调整imagettftext()函数的参数,我们可以改变验证码字符的位置、角度和颜色。

现在,我们可以为验证码图片添加阴影效果。首先,我们需要创建一个具有同样大小的图像,作为阴影层:

$shadowImage = imagecreate($width, $height);

接下来,我们可以在原始图像上绘制阴影层。我们可以使用imagecopy()函数将原始图像复制到阴影层,并在复制之前对原始图像进行位置偏移,从而创建阴影效果:

$offsetX = 2;
$offsetY = 2;
imagecopy($shadowImage, $image, $offsetX, $offsetY, 0, 0, $width, $height);

在上述代码中,我们将原始图像复制到阴影图像,复制时对原始图像做了一个位置偏移,即在x和y方向上分别向右下方移动2个像素。

最后,我们将原始图像和阴影层合并,并输出最终的验证码图片:

imagecopymerge($image, $shadowImage, 0, 0, 0, 0, $width, $height, 50);
imagepng($image);
imagedestroy($image);
imagedestroy($shadowImage);

在上述代码中,我们使用imagecopymerge()函数将阴影层合并到原始图像中,合并时使用50%的透明度。然后,使用imagepng()函数输出最终的验证码图片。最后,我们调用imagedestroy()

Maintenant, nous pouvons ajouter un effet d'ombre à l'image captcha. Tout d'abord, nous devons créer une image de la même taille que le calque d'ombre :

<?php
header('Content-Type: image/png');
$width = 200;
$height = 60;
$image = imagecreate($width, $height);

$charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
$codeLength = 4;
$font = "path/to/font.ttf";
$fontSize = 30;

$code = "";
for ($i = 0; $i < $codeLength; $i++) {
    $char = $charset[rand(0, strlen($charset) - 1)];
    $code .= $char;
    $color = imagecolorallocate($image, rand(0, 60), rand(0, 60), rand(0, 60));
    imagettftext($image, $fontSize, rand(-10, 10), 10 + $i * ($fontSize + 10), $height / 2 + $fontSize / 2, $color, $font, $char);
}

$shadowImage = imagecreate($width, $height);
$offsetX = 2;
$offsetY = 2;
imagecopy($shadowImage, $image, $offsetX, $offsetY, 0, 0, $width, $height);

imagecopymerge($image, $shadowImage, 0, 0, 0, 0, $width, $height, 50);
imagepng($image);
imagedestroy($image);
imagedestroy($shadowImage);
?>

Ensuite, nous pouvons dessiner le calque d'ombre au-dessus de l'image d'origine. Nous pouvons créer un effet d'ombre en utilisant la fonction imagecopy() pour copier l'image originale sur le calque d'ombre et décaler la position de l'image originale avant de la copier :

rrreee

Dans le code ci-dessus, nous allons L'image est copiée sur l'image fantôme. Lors de la copie, un décalage de position est effectué par rapport à l'image originale, c'est-à-dire qu'elle est déplacée de 2 pixels vers le bas à droite dans les directions x et y respectivement.

Enfin, nous fusionnons l'image d'origine et le calque d'ombre et générons l'image du code de vérification final :
    rrreee
  1. Dans le code ci-dessus, nous utilisons la fonction imagecopymerge() pour fusionner le calque d'ombre dans l'original image, utilisez une transparence de 50 % lors de la fusion. Ensuite, utilisez la fonction imagepng() pour générer l'image du code de vérification finale. Enfin, nous appelons la fonction imagedestroy() pour libérer la mémoire et détruire l'image d'origine et le calque d'ombre.
  2. Le code complet de génération du code de vérification est le suivant :
  3. rrreee
  4. Avec le code ci-dessus, nous pouvons générer une image de code de vérification avec un effet d'ombre. Vous pouvez enregistrer le code ci-dessus en tant que fichier PHP, puis importer et générer le fichier dans lequel vous devez générer l'image du code de vérification. Lorsque l'utilisateur accède au fichier PHP, l'image du code de vérification sera directement affichée.
  5. Pour résumer, utiliser PHP et la bibliothèque GD pour générer une image de code de vérification avec un effet d'ombre nécessite les étapes suivantes :
  6. Installer la bibliothèque GD.
  7. Créez un fichier PHP et importez la bibliothèque GD.
  8. Définissez les variables couramment utilisées pour générer des images de code de vérification, notamment le jeu de caractères, la longueur du code de vérification, le fichier de police et la taille de la police.
  9. Créez une image avec une largeur et une hauteur spécifiées.

Générez une chaîne captcha aléatoire et ajoutez-la à l'image.

🎜Créez une image de calque d'ombre de la même taille, copiez l'image originale sur le calque d'ombre et décalez la position. 🎜🎜Fusionnez l'image d'origine et le calque d'ombre pour ajouter un effet d'ombre. 🎜🎜Sortez l'image du code de vérification finale et détruisez la mémoire. 🎜🎜🎜J'espère que cet article pourra vous aider à comprendre comment utiliser les bibliothèques PHP et GD pour générer des images de code de vérification avec des effets d'ombre et offrir une plus grande sécurité pour votre fonction de code de vérification. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn