接触PHP一个星期了,boss要写一个图片验证框。在网上查了很多的资料,总结后得到如下最终的代码。以下代码生成的验证码有干扰条,干扰像素,字体旋转等。如果有不足的地方请回帖。
60) $temp[2] = 60; $temp = HsvToRgb($temp[0], $temp[1], $temp[2]); $textcolor[$i] = imagecolorallocate($image, $temp[0], $temp[1], $temp[2]); } for ($i = 0; $i < $disturbpiontnum && $disturbpiont; ++ $i) //加入干扰象素 { $randpixelcolor = ImageColorallocate($validatepic, rand(0, 255), rand(0, 255), rand(0, 255)); imagesetpixel($validatepic, rand(1, $width -1), rand(1, $height -1), $randpixelcolor); } // 干扰线使用颜色较明亮的颜色 $temp = RgbToHsv(rand(0, 255), rand(0, 255), rand(0, 255)); if ($temp[2] < 200) $temp[2] = 255; $temp = HsvToRgb($temp[0], $temp[1], $temp[2]); $randlinecolor = imagecolorallocate($image, $temp[0], $temp[1], $temp[2]); // 画干扰线 for ($i = 0; $i < $disturblinenum && $disturbline; $i++) imageline($validatepic, rand(1, 239), rand(1, 39), rand(1, 239), rand(1, 39), $randpixelcolor); for ($i = 0; $i < $strnum; ++ $i) { $image = imagecreatetruecolor($size, $size); // 刷新画板 imagefilledrectangle($image, 0, 0, $size, $size, $back); // 画出背景色 imagefttext($image, 13, 0, 5, 20, $textcolor[$i], $font_file, $randStr[$i]); $image = imagerotate($image, $degrees[$i], $back); imagecolortransparent($image, $back); imagecopymerge($validatepic, $image, 5 + 30 * $i, 5, 0, 0, imagesx($image), imagesy($image), 100); } imagerectangle($validatepic, 0, 0, $width -1, $height -1, $border); // 画出边框 header('Content-type: image/png'); imagepng($validatepic); imagedestroy($validatepic); imagedestroy($image); $_SESSION['code'] = $validate;//将验证码存入session,如果实际应用,请md5. ?>
字体文件和该文件放在同一目录下即可,如果不是请设置
$font_file
需要设置背景颜色请修改
$back = imagecolorallocate($image, 255, 255, 255); // 背景色
显示图框的大小会随着设置显示的字符数变化。使用起来还是比较方便的。