Webサイトを開発する場合、検証コードシステムは、悪意のある登録やロボット攻撃を防ぐための重要な手段です。 PHPには強力なGDライブラリが組み込まれており、カスタム画像検証コードを簡単に作成できます。その中で、 ImageFontWidth関数は、文字幅を動的に計算するのに役立ち、それにより検証コード画像の適応幅設計を実現し、検証コードをより美しく合理的に表示することができます。
この記事では、PHPのImageFontWidth関数を使用して適応幅画像検証コードシステムを実装する方法について詳しく説明します。
ImageFontWidthは、PHP GDライブラリの関数であり、組み込みのフォントの単一文字の幅(単位:ピクセル)を返します。基本的な使用法は次のとおりです。
imagefontwidth(int $font): int
パラメーター$フォントは、1〜5の範囲のフォントサイズを表す整数で、数が大きくなるほど、フォントが大きくなります。
この関数は、多くの場合、 ImageFonteightと組み合わせて使用され、文字が占有するスペースを正確に計算します。
適応幅を持つ検証コード画像を作成するには、主な手順は次のとおりです。
検証コード文字列を生成します(通常、ランダムな文字と数字の組み合わせ)
検証コードの総幅を計算します<br> ImageFontWidthを使用して、単一の文字の幅を取得し、文字の数を掛け、検証コード全体の必要な幅を取得します
幅<br>に基づいてキャンバスを作成します ImageCreateTrueColorを使用して、指定された幅と高さの画像を作成します
検証コード文字を描画<br> 左から右に配置されたキャラクターを順番に順番に書きます
写真を出力し、リソースを破壊します
ImageFontWidthに基づいて適応幅検証コードを実装する方法を示す完全なサンプルコードを次に示します。
<?php
// ランダム検証コード文字列を生成します
function generateCaptchaCode($length = 5) {
$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; // 紛らわしい文字を避けてください
$code = '';
for ($i = 0; $i < $length; $i++) {
$code .= $chars[random_int(0, strlen($chars) - 1)];
}
return $code;
}
// メイン関数は、検証コード画像を生成します
function createCaptchaImage($code) {
$font = 5; // 組み込みのフォントサイズを使用します5
$charWidth = imagefontwidth($font);
$charHeight = imagefontheight($font);
$padding = 10; // 左と左のマージン
// 画像の幅と高さを計算します
$width = $charWidth * strlen($code) + $padding * 2;
$height = $charHeight + $padding * 2;
// 画像リソースを作成します
$image = imagecreatetruecolor($width, $height);
// 色を定義します
$bgColor = imagecolorallocate($image, 255, 255, 255); // 白い背景
$textColor = imagecolorallocate($image, 0, 0, 0); // 黒いテキスト
$noiseColor = imagecolorallocate($image, 100, 120, 180); // ノイズカラー
// 背景を埋めます
imagefilledrectangle($image, 0, 0, $width, $height, $bgColor);
// 干渉ノイズを追加します
for ($i = 0; $i < 50; $i++) {
imagesetpixel($image, random_int(0, $width), random_int(0, $height), $noiseColor);
}
// 文字ごとに検証コードテキストを描画します
$x = $padding;
$y = $padding;
for ($i = 0; $i < strlen($code); $i++) {
imagestring($image, $font, $x, $y, $code[$i], $textColor);
$x += $charWidth;
}
// 出力画像ヘッダー
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
}
// 検証コード文字列を生成します
$captchaCode = generateCaptchaCode(6);
// 出力検証コード画像
createCaptchaImage($captchaCode);
?>
適応幅:コードは、 ImageFontWidthを介して単一の文字の幅を動的に計算し、検証コード文字の数を掛けてからマージンを追加して、検証コード画像の幅がコンテンツの長さで自動的に調整されるようにします。
フォントサイズ:この例では、GDビルトインフォント5を使用します5。より良い視覚効果が必要な場合は、 ImagetTftextを使用してTrueTypeフォントをロードできますが、文字幅の計算をさらに処理する必要があります。
セキュリティ:検証コードを生成した後、フォームが送信されたときに検証のために検証コード文字列をセッションに保存できます。
美化:ノイズと曲線を追加するか、フォントの色を変更して、検証コードの壊れ防止能力を高めることができます。
PHPのImageFontWidth関数を使用すると、単一の文字の幅を正確に取得し、検証コード画像の幅の動的調整を実現できます。この方法はシンプルで効率的であり、基本的な適応幅画像検証コードを生成するのに適しています。
より複雑な検証コード効果が必要な場合は、他のGD描画機能を組み合わせたり、サードパーティ検証コードライブラリを使用したりできます。