Captcha検証コードを作成する場合、検証コードがマシンが自動的に識別できないようにするだけでなく、ユーザーが簡単に識別できるようにすることが重要な技術的な難しさです。 PHPは、 ImageAntialias()が画像の防止効果を効果的に改善できる豊富な画像処理機能を提供し、それにより、検証コードのテキストまたはグラフィックスのエッジをよりスムーズにし、読みやすさを向上させることができます。
この記事では、PHPのGDライブラリを組み合わせて、CaptCha検証コードを生成するときに検証コードの視覚効果を改善するために、 ImageAntialias()関数を使用する方法を示します。
ImageAntialias()は、PHP GDライブラリの関数であり、画像の防止効果をオンまたはオフにします。ジャグは、画像のエッジには滑らかな段階的なピクセル境界があるためです。アンチアリアシングにより、エッジピクセルを滑らかにすることでエッジがよりスムーズに見えます。
関数プロトタイプは次のとおりです。
bool imageantialias ( resource $image , bool $enable )
$画像:画像リソースハンドル
$ enable :アンチエリアシング効果をオンまたはオフにしてください、 trueはオン、 falseがオフになります
最初に基本的な検証コード画像を作成しましょう:
<?php
// 写真を作成します 150x50 空白の画像
$image = imagecreatetruecolor(150, 50);
// 色を割り当てます
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
// 白で満たされた背景
imagefilledrectangle($image, 0, 0, 150, 50, $white);
アンチアリアーシングが有効になると、描画された線とテキストのエッジがよりスムーズになります。
// アンチアリアシングをオンにします
imageantialias($image, true);
単純なOCR認識を防ぐために、検証コードに干渉線を追加します。
for ($i = 0; $i < 5; $i++) {
$line_color = imagecolorallocate($image, rand(100, 150), rand(100, 150), rand(100, 150));
imageline($image, rand(0, 150), rand(0, 50), rand(0, 150), rand(0, 50), $line_color);
}
ここでは、imagettftext()関数を使用してテキストを描画し、アンチアリアシングを使用してテキストをより明確にします。
$font = __DIR__ . '/fonts/arial.ttf'; // フォントパスが正しいことを確認してください
$code = substr(str_shuffle('ABCDEFGHJKLMNPQRSTUVWXYZ23456789'), 0, 5);
for ($i = 0; $i < strlen($code); $i++) {
$text_color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
imagettftext(
$image,
20,
rand(-15, 15),
20 + $i * 25,
rand(30, 40),
$text_color,
$font,
$code[$i]
);
}
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
ImageAntialias()は、描画された線と形状でのみ動作し、アンチエイリアシング効果でレンダリングされたimagettftext()はすでに組み込まれています。
アンチアリアー剤をオンにすると、CPUの負担がわずかに増加する可能性がありますが、通常、画質の改善は価値があります。
フォントファイルが存在し、パスが正しいことを確認してください。そうしないと、テキストが正常に表示されません。
<?php
// 画像を作成します
$image = imagecreatetruecolor(150, 50);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 0, 0, 150, 50, $white);
// アンチエイリアシングを有効にします
imageantialias($image, true);
// 外乱線を描きます
for ($i = 0; $i < 5; $i++) {
$line_color = imagecolorallocate($image, rand(100, 150), rand(100, 150), rand(100, 150));
imageline($image, rand(0, 150), rand(0, 50), rand(0, 150), rand(0, 50), $line_color);
}
// 検証コードテキスト
$font = __DIR__ . '/fonts/arial.ttf';
$code = substr(str_shuffle('ABCDEFGHJKLMNPQRSTUVWXYZ23456789'), 0, 5);
for ($i = 0; $i < strlen($code); $i++) {
$text_color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
imagettftext($image, 20, rand(-15, 15), 20 + $i * 25, rand(30, 40), $text_color, $font, $code[$i]);
}
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
上記の例を介して、画像内の線のエッジで画像antialias()のスムーズな改善をはっきりと見ることができ、それによりCaptcha検証コードの全体的な読みやすさが向上します。干渉線と変形したテキストを組み合わせることで、検証コードのセキュリティとユーザーエクスペリエンスを効果的に改善できます。
関連するリソースまたはAPIにアクセスする必要がある場合は、URLドメイン名をM66.netに置き換えることに注意してください。