因为修改时间很长了,昨天贴的时候太随意了,没写全代码。今天改正。不好意思,亲们。
研究了一下wc的验证码
总结:wc验证码难认主要有一下几个原因
1、背景噪声跟文本颜色一样,不好认。
2、文本经过算法改变了坐标和形状,不好认。
简单解决办法,思路:改变背景噪声颜色,使其与文本颜色区分。实际测试效果还可以。
#抛砖引玉:
一、找到文件
system/zend/capatch/image.php
二、在487行定义噪声,使其在浅色区域内随机显示颜色,与文本颜色分开,加入代码:
$noise_color = imagecolorallocate($img, rand(100,200), rand(100,200), rand(100,200));
三、找到495行,代码如下,并将$text_color修改为$noise_color
// generate noise
for ($i=0; $i<$this->_dotNoiseLevel; $i++) {
imagefilledellipse($img, mt_rand(0,$w), mt_rand(0,$h), 2, 2, $text_color);
}
for($i=0; $i<$this->_lineNoiseLevel; $i++) {
imageline($img, mt_rand(0,$w), mt_rand(0,$h), mt_rand(0,$w), mt_rand(0,$h), $text_color);
}
四、找到556行继续将$text_color修改为$noise_color
// generate noise
for ($i=0; $i<$this->_dotNoiseLevel; $i++) {
imagefilledellipse($img2, mt_rand(0,$w), mt_rand(0,$h), 2, 2, $noise_color);
}
for ($i=0; $i<$this->_lineNoiseLevel; $i++) {
imageline($img2, mt_rand(0,$w), mt_rand(0,$h), mt_rand(0,$w), mt_rand(0,$h), $noise_color);
}
效果如下,附送快速注册弹出框效果:
有兴趣的同学还可以修改后面算法。
阅读全文
收起全文