ホームページ >バックエンド開発 >PHPの問題 >PHP を通じてグラフィカルな検証コードを描画するにはどうすればよいですか?

PHP を通じてグラフィカルな検証コードを描画するにはどうすればよいですか?

WBOY
WBOYオリジナル
2021-10-20 10:18:072145ブラウズ

前回の記事では『PHPで多角形、円弧、楕円を描くには? (グラフィックの詳細説明) 」では、PHP でグラフィックを描画する方法を詳しく紹介しています。この記事では、PHP でグラフィック検証コードを生成する方法を見ていきます。みんなが助けてくれることを願っています!

PHP を通じてグラフィカルな検証コードを描画するにはどうすればよいですか?

PHP での画像描画に関する前回の記事を通じて、その知識を利用して、毎日のログイン ページでよく使用するグラフィカル検証である拡張機能を作成できます。グラフィック検証コードはどのように形成されますか? グラフィック検証コードの作成方法を学びたい場合は、まず PHP でテキストを描画する方法を見てみましょう。

テキストの描画

テキストを描画するために一般的に使用される関数は次のとおりです:

  • ##imagechar() : 文字を横方向に描画

  • imagecharup() : 描画縦方向に文字を描画します。 文字

  • #imagestring() : 文字列を横方向に描画します。

  • imagestringup() : 文字列を縦方向に描画します

  • imagettftext() : TrueType を使用しますfont to image でテキストを書き込みます

  • このうち、imagechar()、imagecharup()、imagestring()、imagestringup() 関数の構文形式は同じです。
imagechar(resource $image, int $font, int $x, int $y, string $c, int $color)

このうち、$imageは作成したキャンバスを表します。次の操作はキャンバス上で行われます。$fontは描画したフォントの色を表します。$xと$yは座標を表します( $x, $y).その位置にテキストを描画します。$c は描画される文字 (または文字列) を表し、$color は描画されるフォントの色を表します。


例は次のとおりです:

<?php
    $a = &#39;young and beautiful&#39;;
    $img = imagecreate(300, 200);
    imagecolorallocate($img, 255, 255, 255);
    $green = imagecolorallocate($img, 0, 255, 0);
    imagestring($img, 5, 5, 50, $a, $green);
    imagestringup($img, 2, 200, 180, $a, $green);
    imagechar($img, 3, 80, 100, $a, $green);
    imagecharup($img, 4, 100, 100, $a, $green);
    header(&#39;Content-type:image/jpeg&#39;);
    imagejpeg($img);
    imagedestroy($img);
?>

出力結果:


PHP を通じてグラフィカルな検証コードを描画するにはどうすればよいですか?imagettftext という関数もあります() 関数は、テキストを描画することもできますが、Windows システムの拡張機能である TrueType フォントを使用できる点が異なります。 Ttf 形式のフォントで、その構文形式は次のとおりです。

imagettftext(resource $image, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text)

このうち、$size は文字の大きさを表し、$angle は角度を表し、この角度の 0 度は左から読むテキストを表します。右へ、 を押す 値は反時計回りに増加します; $fontfile は使用する TrueType フォント ファイルへのパスを表します; $textb は描画する文字列を表します。


例は次のとおりです:

<?php
    $str1 = &#39;young and beautiful&#39;;
    $font = &#39;C:\Windows\Fonts\simhei.ttf&#39;;
    $img = imagecreate(300, 300);
    imagecolorallocate($img, 255, 255, 255);
    $green = imagecolorallocate($img, 0, 255, 0);
    imagettftext($img, 16, 45, 40, 250, $green, $font, $str1);
    header(&#39;Content-type:image/jpeg&#39;);
    imagejpeg($img);
    imagedestroy($img);
?>

出力結果:


#これは imagettftext() によって完了します。関数 テキストの描画。 PHP を通じてグラフィカルな検証コードを描画するにはどうすればよいですか?

グラフィック検証コードの描画

テキストと画像の描画について学習した後、以前に学習した知識を使用してグラフィックを描画できます。検証コードの描画では、ログイン インターフェイスでグラフィカルな検証コードが頻繁に表示されるので、その作成方法を見てみましょう。

まず、最終的な効果を見てみましょう:


このような効果を実現するには、いくつかの手順を実行する必要があります: PHP を通じてグラフィカルな検証コードを描画するにはどうすればよいですか?

最初のステップは、必要なキャンバスを準備することです。つまり、キャンバスを作成します。次に生成したい文字列を用意し、キャンバス上に干渉模様を描画して画像を出力し、最後にリソースを解放します。

例は次のとおりです:

<?php
check_code();
function check_code($width = 100, $height = 50, $num = 4, $type = &#39;jpeg&#39;) {
 $img = imagecreate($width, $height);
 $string = &#39;&#39;;
 for ($i = 0; $i < $num; $i++) {
 $rand = mt_rand(0, 2);
 switch ($rand) {
 case 0:
 $ascii = mt_rand(48, 57); //0-9
 break;
 case 1:
 $ascii = mt_rand(65, 90); //A-Z
 break;
 case 2:
 $ascii = mt_rand(97, 122); //a-z
 break;
 }
 //chr()
 $string .= sprintf(&#39;%c&#39;, $ascii);
 }
 //背景颜色
 imagefilledrectangle($img, 0, 0, $width, $height, randBg($img));
 //画干扰元素
 for ($i = 0; $i < 50; $i++) {
 imagesetpixel($img, mt_rand(0, $width), mt_rand(0, $height), randPix($img));
 }
 //写字
 for ($i = 0; $i < $num; $i++) {
 $x = floor($width / $num) * $i + 2;
 $y = mt_rand(0, $height - 15);
 imagechar($img, 5, $x, $y, $string[$i], randPix($img));
 }
 //imagejpeg
 $func = &#39;image&#39; . $type;
 $header = &#39;Content-type:image/&#39; . $type;
 if (function_exists($func)) {
 header($header);
 $func($img);
 } else {
 echo &#39;图片类型不支持&#39;;
 }
 imagedestroy($img);
 return $string;
}
//浅色的背景
function randBg($img) {
 return imagecolorallocate($img, mt_rand(130, 255), mt_rand(130, 255), mt_rand(130, 255));
}
//深色的字或者点这些干 扰元素
function randPix($img) {
 return imagecolorallocate($img, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
}
?>

出力結果:


PHP を通じてグラフィカルな検証コードを描画するにはどうすればよいですか?PHP を通じてグラフィカルな検証コードを描画するにはどうすればよいですか?推奨研究:《 PHP を通じてグラフィカルな検証コードを描画するにはどうすればよいですか?PHP ビデオ チュートリアル

以上がPHP を通じてグラフィカルな検証コードを描画するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。