PHP验证框

阅读更多

接触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); // 背景色

显示图框的大小会随着设置显示的字符数变化。使用起来还是比较方便的。

 

你可能感兴趣的:(PHP,Zend,360,Cache,F#)