PHPでは、GDライブラリは、ポリゴンを含むさまざまなグラフィックを描画できる強力な画像処理機能を提供します。検証コードの反障害性を改善するためにランダムなポリゴンパターンを使用して検証コードを生成する場合、 Imageopenpolygon関数は非常に役立ちます。
この記事では、 ImageOpenPolygonとGDライブラリを使用してポリゴンを描画し、簡単な検証コード画像を生成する方法を詳細に紹介します。
PHP 7.0以上
GD拡張機能がインストールされ、有効になっています( phpinfo()経由で有効になっているかどうかを確認できます)
ImageOpenPolygonは、GDライブラリが提供する機能の1つであり、画像に開いたポリゴンを描画します(つまり、行は最初と端で接続されていません)。 Image -Polygon (閉じたポリゴンの描画)とは異なり、 Imageopenpolygonは、検証コードの干渉線など、開いた曲線が必要なシーンに適しています。
関数定義は次のとおりです。
bool imageopenpolygon(GdImage $image, array $points, int $num_points, int $color)
$画像:描画する画像リソース。
$ポイント:ポイント座標を含む配列[x0、y0、x1、y1、x2、y2、...] 。
$ num_points :頂点の数。
$カラー:ラインカラー。
ランダムポリゴンを使用して検証コード画像を生成する方法の完全な例を次に示します。
<?php
// コンテンツタイプを絵に設定します
header('Content-Type: image/png');
// キャンバスを作成します
$width = 200;
$height = 70;
$image = imagecreatetruecolor($width, $height);
// カラー設定
$backgroundColor = imagecolorallocate($image, 255, 255, 255); // 白い背景
$textColor = imagecolorallocate($image, 0, 0, 0); // 黒いフォント
$polygonColor = imagecolorallocate($image, 100, 100, 255); // 青いポリゴン
// 背景を埋めます
imagefill($image, 0, 0, $backgroundColor);
// ランダム検証コードテキストを生成します
$characters = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
$captchaText = '';
for ($i = 0; $i < 5; $i++) {
$captchaText .= $characters[rand(0, strlen($characters) - 1)];
}
// 検証コードテキストを記述します
$fontSize = 5; // 内蔵フォントサイズ
$x = ($width - imagefontwidth($fontSize) * strlen($captchaText)) / 2;
$y = ($height - imagefontheight($fontSize)) / 2;
imagestring($image, $fontSize, $x, $y, $captchaText, $textColor);
// 複数の開いたポリゴンをランダムに描画します
for ($i = 0; $i < 3; $i++) {
$points = [];
$numPoints = rand(3, 6); // 六角形から三角形
for ($j = 0; $j < $numPoints; $j++) {
$points[] = rand(0, $width);
$points[] = rand(0, $height);
}
imageopenpolygon($image, $points, $numPoints, $polygonColor);
}
// 出力画像
imagepng($image);
// リソースを破壊します
imagedestroy($image);
?>
上記のPHPファイルを実行すると、白い背景を持つ検証コード、中央にランダムな英数字のセット、およびその周りにランダムに描かれた青い開いたポリゴンが表示され、画像の干渉が増加します。
GD拡張機能を有効にする必要があります。有効になっていない場合は、 APTインストールPHP-GDやPHP.iniの編集などのコマンドをインストールすることで有効にできます。
改善された検証コードの複雑さ:ポリゴンの数を増やし、色とグラフィックサイズを変更し、自動認識を防ぐことにより、検証コードをより複雑にすることができます。
安全な出力:画像を生成する前にHTML出力を持っていない場合、それ以外の場合は画像ファイルが破損します。
湾曲したテキスト、回転効果、バックグラウンドノイズの追加など、検証コードをよりパーソナライズしたい場合は、 PHPのためにCaptcha Builderなどのより高度なライブラリを使用することができます。