PHP および GD ライブラリを使用してシャドウ効果のある検証コード イメージを生成するためのベスト プラクティス
検証コード (キャプチャ) は、ユーザーがロボットではなく本物のユーザーであるかどうかを判断するために使用される一般的なセキュリティ対策です。 CAPTCHA を生成する一般的な方法は、ランダムな文字を含む画像を作成し、ユーザーに画像からそれらの文字を識別して入力するように依頼することです。検証コードのセキュリティを高めるために、生成された検証コード画像に影効果などの視覚効果を追加できます。この記事では、PHP および GD ライブラリを使用してシャドウ効果のある検証コード イメージを生成するためのベスト プラクティスを紹介します。
GD ライブラリは、PHP 拡張モジュールを通じて使用できる強力なグラフィック処理ライブラリです。まず、GD ライブラリがサーバーにインストールされていることを確認する必要があります。 Linux システムを使用している場合は、次のコマンドを使用して GD ライブラリをインストールできます。
sudo apt-get install php-gd
Windows システムを使用している場合は、php.ini ファイル内の次の行のコメントを解除して、GD を有効にできます。拡張子:
;extension=gd
インストールが完了したら、影付きの検証コード イメージの生成を開始できます。
まず、PHP ファイルを作成し、ファイルの先頭に GD ライブラリを導入する必要があります。
<?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;
上記のコードでは、大文字、小文字、数字を含む文字セットを使用しており、検証コードの長さは 4 文字です。必要に応じて、文字セットと検証コードの長さをカスタマイズできます。同時にカスタムフォントファイル(.ttf形式)とフォントサイズを設定します。
次に、キャプチャ文字列と背景色を生成して画像に追加します。
$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); }
上記のコードでは、ループを通じてランダムなキャプチャ文字列を生成し、# を使用します。 ##imagecolorallocate() 関数を使用して、ランダムな背景色を作成します。次に、
imagettftext() 関数を使用して、キャプチャ文字を画像に追加します。
imagettftext() 関数のパラメータを調整することで、認証コード文字の位置、角度、色を変更できます。
$shadowImage = imagecreate($width, $height);
imagecopy() 関数を使用して元の画像を影レイヤーにコピーし、コピーする前に元の画像をオフセットすることで影効果を作成できます。
$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);
imagecopymerge() 関数を使用します。結合時に 50% の透明度を使用して、シャドウ レイヤが元の画像に結合されます。次に、
imagepng() 関数を使用して、最終的な検証コード イメージを出力します。最後に、
imagedestroy() 関数を呼び出してメモリを解放し、元の画像とシャドウ レイヤを破棄します。
<?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); ?>
以上がPHP および GD ライブラリを使用してシャドウ効果のある検証コード イメージを生成するためのベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。