ホームページ >バックエンド開発 >PHPチュートリアル >PHPイメージ検証コード生成機能の実装方法
PHP画像検証コード生成機能の実装方法
画像検証コードは画像形式で表示されるセキュリティ検証コードであり、ブルートフォースクラッキングや自動スクリプトなどの様々なネットワーク攻撃を効果的に防ぐことができます。攻撃は待ってください。人気のある Web プログラミング言語として、PHP には画像処理関数と、画像検証コード関数を簡単に実装できるライブラリが組み込まれています。この記事では、PHPベースの画像検証コード生成機能の実装方法を紹介します。
まず、画像検証コードの要素であるキャンバス、検証コード文字、干渉線、干渉点などを明確にする必要があります。次に、これらの要素を 1 つずつ実装して、完全な PHP イメージ検証コード生成関数を実装します。
キャンバスを作成するには、PHP の imagecreatetruecolor() 関数を使用できます。この関数は、指定されたサイズのトゥルーカラー イメージを作成します。この関数の呼び出し形式は次のとおりです。
resource imagecreatetruecolor ( int $width , int $height )
このうち、width パラメータと height パラメータはそれぞれ画像の幅と高さです。キャンバスを作成するコード例を次に示します。
// 创建画布 $image_width = 140; // 画布宽度 $image_height = 50; // 画布高度 $image = imagecreatetruecolor($image_width, $image_height);
背景色を設定するには、PHP の imagefill() 関数を使用できます。この関数は画像に色合いを付け、画像全体を指定した色で塗りつぶします。この関数の呼び出し形式は次のとおりです。
bool imagefill ( resource $image , int $x , int $y , int $color )
このうち、image パラメータは image です。 resource、x、y パラメータは染色開始点の座標、color パラメータは imagecolorallocate() 関数を使用して作成される色です。
以下は、背景色を設定するコード例です。
// 设置背景颜色 $bg_color = imagecolorallocate($image, 255, 255, 255); // 白色 imagefill($image, 0, 0, $bg_color); // 填充背景为白色
セキュリティを向上させるために、検証コードには、干渉線と干渉点を追加する必要があります。 PHP の基本的な画像処理関数でこれらの機能を実装できます。
干渉線を追加するには、PHP の imageline() 関数を使用できます。この関数は直線を描きます。この関数の呼び出し形式は次のとおりです:
bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
amongパラメータは画像リソース、(x1, y1) と (x2, y2) は線分の開始座標と終了座標、color パラメータは色です。
干渉点を追加するには、PHP の imagesetpixel() 関数を使用できます。この関数は画像内にピクセルを描画します。この関数の呼び出し形式は次のとおりです。
bool imagesetpixel ( resource $image , int $x , int $y , int $color )
このうち、image パラメータは画像です。リソース、(x, y) はピクセル点の座標、色パラメーターは色です。
次は、干渉線と干渉点を追加するコード例です:
// 添加干扰线 for ($i = 0; $i < 5; $i++) { $line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 随机颜色 imageline($image, rand(0, $image_width), rand(0, $image_height), rand(0, $image_width), rand(0, $image_height), $line_color); } // 添加干扰点 for ($i = 0; $i < 50; $i++) { $pixel_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 随机颜色 imagesetpixel($image, rand(0, $image_width), rand(0, $image_height), $pixel_color); }
最後のステップでは、次のことを行う必要があります。検証コード文字を追加します。検証コード文字には、数字、文字、記号などを使用できます。便宜上、ここでは数値検証コードのみを考慮します。
検証コード文字を追加するには、PHP の imagestring() 関数または imagettftext() 関数を使用できます。
imagestring() 関数を使用すると、関数は画像上に文字列を直接出力します。この関数の呼び出し形式は次のとおりです:
bool imagestring ( resource $image , int $font , int $x , int $y , string $string , int $color )
where , image パラメータは画像リソース、font はフォント サイズ、x と y は文字列の開始点座標、string は出力文字列、color は色です。
imagettftext()関数を使用すると、指定された文字列を指定されたフォント、サイズ、任意の回転角度に従って指定されたキャンバスに出力します。この関数の呼び出し形式は次のとおりです:
array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color ,
string $fontfile , string $ text )
このうち、imageパラメータは画像リソース、sizeはフォントサイズ、angleは回転角度、(x,y)は文字列の始点の座標、colorは色、fontfile はフォント ファイル、text は出力文字列です。
次に、検証コード文字を生成するコード例を示します。
// 添加验证码字符 $code = ''; for ($i = 0; $i < 4; $i++) { $digital_color = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200)); // 随机颜色 $digital = rand(0, 9); // 随机数字 $code .= $digital; // 按一定的规则将字符画布输出 imagettftext($image, 20, rand(-30, 30), $i * 30 + 10, rand($image_height/2, $image_height-20), $digital_color, './arial.ttf', $digital); }
最後に、検証コード文字は、後続の比較と検証のためにセッションに保存されます。
$_SESSION['code'] = $code;
完全なコード例:
session_start(); header("Content-type: image/png"); $image_width = 140; // 画布宽度 $image_height = 50; // 画布高度 $image = imagecreatetruecolor($image_width, $image_height); // 创建画布 $bg_color = imagecolorallocate($image, 255, 255, 255); // 白色 imagefill($image, 0, 0, $bg_color); // 填充背景为白色 // 添加干扰线 for ($i = 0; $i < 5; $i++) { $line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 随机颜色 imageline($image, rand(0, $image_width), rand(0, $image_height), rand(0, $image_width), rand(0, $image_height), $line_color); } // 添加干扰点 for ($i = 0; $i < 50; $i++) { $pixel_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 随机颜色 imagesetpixel($image, rand(0, $image_width), rand(0, $image_height), $pixel_color); } // 添加验证码字符 $code = ''; for ($i = 0; $i < 4; $i++) { $digital_color = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200)); // 随机颜色 $digital = rand(0, 9); // 随机数字 $code .= $digital; // 按一定的规则将字符画布输出 imagettftext($image, 20, rand(-30, 30), $i * 30 + 10, rand($image_height/2, $image_height-20), $digital_color, './arial.ttf', $digital); } $_SESSION['code'] = $code; // 将验证码存入session imagepng($image); // 输出验证码图片 imagedestroy($image); // 销毁图像资源
概要
PHP イメージ検証コード生成機能は、ネットワーク攻撃を防ぐための非常に実用的なテクノロジです。この記事では、PHPの画像検証コード生成機能の、キャンバスの作成、背景色の設定、干渉線や干渉点の追加、検証コード文字の追加などの実装方法を紹介します。これらの要素を組み合わせて使用することで、高品質で安全な画像検証コードを生成できます。
以上がPHPイメージ検証コード生成機能の実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。