ホームページ > バックエンド開発 > PHPチュートリアル > PHPとGDライブラリを使用して画像検証コードを生成する

PHPとGDライブラリを使用して画像検証コードを生成する

WBOY
リリース: 2023-05-11 09:34:01
オリジナル
1065 人が閲覧しました

インターネットの発展に伴い、悪意のある登録、クローラー、その他の動作を防ぐために検証コードを使用する必要がある Web サイトが増えています。画像認証コードは認証コードの一般的な形式であり、ランダムな文字または数字を含む画像が表示され、ユーザーは次の手順に進む前に正しい認証コードを入力できます。この記事では、PHP と GD ライブラリを使用して画像検証コードを生成する方法を紹介します。

GD ライブラリは、さまざまな画像形式の生成、処理、操作に使用できる画像処理ライブラリです。 PHP には GD ライブラリが組み込まれており、画像を作成および操作するための多くの関数が提供されているため、PHP と GD ライブラリを使用して画像検証コードを生成すると非常に便利です。

ステップ 1: 検証コード テキストの生成

まず、検証コード イメージに表示されるランダムな文字列を生成する必要があります。 PHP の組み込み関数 rand() および chr() を使用して、指定した長さの ASCII 文字を生成できます。

$code = '';
$length = 4;
for ($i = 0; $i < $length; $i++) {
    $code .= chr(rand(97, 122));
}
ログイン後にコピー

上記のコードは、ASCII コード値を使用して、97 から 97 までの 4 文字のランダムな文字列を生成します。 122.このコードを変更して、数字を含む文字列を生成したり、必要に応じて文字列の長さを増やしたりできます。

ステップ 2: キャンバスの作成

検証コード テキストを生成した後、それを表示するキャンバスを作成する必要があります。 PHP 組み込み関数 imagecreate() を使用して、指定された幅と高さのキャンバスを作成します。

$width = 120;
$height = 40;
$image = imagecreate($width, $height);
ログイン後にコピー

上記のコードは、幅 120 ピクセル、高さ 40 ピクセルのキャンバス $image を作成します。

ステップ 3: 背景色とテキストの色を設定する

検証コードの画像を認識しやすくするために、背景色やテキストの色などの色を設定する必要があります。 PHP 組み込み関数 imagecolorallocate() を使用して色を作成します。

$bg_color = imagecolorallocate($image, 255, 255, 255); // 将背景色设置为白色
$text_color = imagecolorallocate($image, 0, 0, 0); // 将文字颜色设置为黑色
ログイン後にコピー

上記のコードは、背景色を白、テキストの色を黒に設定します。必要に応じて色の値を変更できます。

ステップ 4: 干渉線とノイズ ポイントを追加する

検証コードの難易度を高めるために、いくつかの干渉線とノイズ ポイントを追加できます。 PHP 組み込み関数 imageline() を使用して干渉ラインを作成します。

for ($i = 0; $i < 5; $i++) {
    $line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 生成一种随机颜色
    imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $line_color); // 在随机位置生成一条干扰线
}
ログイン後にコピー

上記のコードは 5 つのランダムな干渉ラインを生成します。必要に応じて干渉線の数を増減できます。

PHP 組み込み関数 imagesetpixel() を使用して、ノイズ ポイントを作成します。

for ($i = 0; $i < 100; $i++) {
    $noise_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)); // 生成一种随机颜色
    imagesetpixel($image, rand(0, $width), rand(0, $height), $noise_color); // 在随机位置生成一个噪点
}
ログイン後にコピー

上記のコードは、100 個のランダムなノイズ ポイントを生成します。必要に応じてノイズの量を増減できます。

ステップ 5: テキストの追加

最後に、生成された検証コード テキストをキャンバスに追加する必要があります。 PHP 組み込み関数 imagettftext() を使用してテキストを作成します。

$font_path = 'font.ttf'; // 字体文件路径
$font_size = 20; // 字体大小
$x = 20; // 文本起始横坐标
$y = 30; //文本起始纵坐标
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font_path, $code); // 将验证码文本添加到画布上
ログイン後にコピー

上記のコードは、フォント ファイル font.ttf を使用してサイズ 20 のテキストを作成し、そのテキストをキャンバスの指定された位置に追加します。 。

ステップ 6: イメージの出力

最後に、生成された検証コード イメージをブラウザに出力するか、ファイルに保存する必要があります。 PHP 組み込み関数 imagepng() を使用して、画像をブラウザに出力します。

header('Content-Type: image/png');
imagepng($image);
ログイン後にコピー

上記のコードは、出力タイプを image/png に設定し、canvas $image を PNG 形式でブラウザに出力します。 JPEG、GIF などの他の画像形式も使用できます。

完全なコードは次のとおりです:

$code = '';
$length = 4;
for ($i = 0; $i < $length; $i++) {
    $code .= chr(rand(97, 122));
}

$width = 120;
$height = 40;
$image = imagecreate($width, $height);

$bg_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 0, 0, 0);

for ($i = 0; $i < 5; $i++) {
    $line_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
    imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $line_color);
}

for ($i = 0; $i < 100; $i++) {
    $noise_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
    imagesetpixel($image, rand(0, $width), rand(0, $height), $noise_color);
}

$font_path = 'font.ttf';
$font_size = 20;
$x = 20;
$y = 30;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font_path, $code);

header('Content-Type: image/png');
imagepng($image);
ログイン後にコピー

PHP と GD ライブラリを使用してイメージ検証コードを生成するのは非常に簡単で、上記の手順に従うだけです。特定のプログラミングの基礎がある人は、より複雑な文字や数字の組み合わせ、カスタム フォントなどを使用するなど、生成プロセスをさらに最適化できます。しかし、画像認証コードがどのような種類のものであっても、それはオンライン詐欺を防ぐための基本的なツールであり、インターネットセキュリティの構築に重要な貢献をしてきました。

以上がPHPとGDライブラリを使用して画像検証コードを生成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート