1. 適用シナリオ
WEB ウェブサイトでは、悪意のあるユーザーの登録や投稿などを防ぐために画像認証コードがよく使用されます。 PHP では、画像検証コードは主に GD ライブラリが提供する API を通じて完成します。
2. 実装方法
認証コードは一般に乱数と文字の組み合わせであり、ランダム関数と16進関数dechexを使用することで簡単に実装できます。最も重要な問題は、画像をどのように生成するかです。
<?php //生成随机数-》创建图片-》随机数写进图片 -》输出到浏览器 for($i=0;$i<4;$i++) { $rand .= dechex(rand(1,15)); } $im = imagecreatetruecolor(100,30);// 新建一个真彩色图像 x就是宽 ,y就是高 //设置颜色 // 为一幅图像分配颜色(相当于 PhotoShop 的调色板) // imagecolorallocate ( resource image, int red, int green, int blue ) 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。 $bg = imagecolorallocate($im,0,0,0);//第一次对 imagecolorallocate() 的调用会给基于调色板的图像填充背景色。代表了由给定的 RGB 成分组成的颜色 $te = imagecolorallocate($im,225,225,225); //把字符串写在图像左上角 //绘图函数 imagestring ( resource image, font, int x, int y, string s, int col ) //用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。 imagestring($im,5,rand(3,70),rand(0,16),$rand,$te); //直接输出图像到浏览器 header("Content-type: image/jpeg"); // imagejpeg ( resource image [, string filename [, int quality]] ) filename 参数为可选,如果省略,则原始图像流将被直接输出。要省略 filename 参数而提供 quality 参数,使用空字符串('')。通过 header() 发送 Content-type: image/jpeg 可以使 PHP 脚本直接输出 JPEG 图像。 imagejpeg($im); ?>
3. 複雑な画像検証コードを作成する
場合によっては、画像認識ツールによって認識されないようにするために、検証コードに何らかの干渉を設定する必要があります。たとえば、画像に線や点をランダムに追加します。これは主に、imageline() 関数と imagesetpixel() 関数によって実現されます。中国語の認証コードも作成します。
りー