最新消息: 新版网站上线了!!!

ThinkPHP验证码的美化

 这两天研究用ThinkPHP做点东西,写到登录功能的时候,发现默认的验证码样式实在是太丑了,真心不忍直视,所以,自己动手改吧~


    先上两组图,对比下效果。
【整容前】

 

    

【整容后】

    

 

    通过对比可以发现,修改前,验证码字号小,且颜色与干扰线相同。当干扰先过密时,不易识别;修改后这些写问题都解决了。虽然以前有人说过我审美有问题,但我觉得,这次应该没出错,还是修改后的好看。 

    改动不是很大,主要有三点:
    1. 生成干扰之前,
除了文字颜色,再用同样的方法随机生成另外两个颜色(因为是随机,所以颜色很大几率会不同),用作干扰线和杂点的颜色,这样就可以把文字的颜色和其他的东西区分开;

    2. 在function开的时候,定义一个$fontPath,存储字体文件的路径,然后在相应的路径下拷进去一个字体文件;

    3. 最关键的一步:生成图片内容时,用imagettftext函数代替imagestring,就同时解决了字号和字体的问题。imagestring的参数,可以问度娘。在此不得不多一句嘴:百度真的是最好的老师,古今中外、天文地理、人文科学、岛国欧美,你问啥,她答啥~
 

最后来道硬菜,上代码(红色是修改过的部分):
 

    /**

     * 生成图像验证码

     * @static

     * @access public

     * @param string $length  位数

     * @param string $mode  类型

     * @param string $type 图像格式

     * @param string $width  宽度

     * @param string $height  高度

     * @return string

     */

    static function buildImageVerify($length=4, $mode=1, $type='png', $width=48, $height=22, $verifyName='verify')
{

        import('ORG.Util.String');

        $fontPath=THINK_PATH."/Common/consolab.ttf"; // 字体文件路径

$randval = String::randString($length, $mode);

        session($verifyName, md5($randval));

        $width = ($length * 10 + 10) > $width ? $length * 10 + 10 : $width;

        if ($type != 'gif' && function_exists('imagecreatetruecolor'))
        {

            $im = imagecreatetruecolor($width, $height);

        }
        else
        {

            $im = imagecreate($width, $height);

        }

        $r = Array(225, 255, 255, 223);

        $g = Array(225, 236, 237, 255);

        $b = Array(225, 236, 166, 125);

        $key = mt_rand(0, 3);

 

        $backColor = imagecolorallocate($im, $r[$key], $g[$key], $b[$key]);    //背景色(随机)

        $borderColor = imagecolorallocate($im, 100, 100, 100);                    //边框色

        imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor);

        imagerectangle($im, 0, 0, $width - 1, $height - 1, $borderColor);

        // 原有的文字颜色
        
$stringColor = imagecolorallocate($im, mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120));

        // 干扰线颜色,与文字颜色一并随机生成,但可很大几率的保证颜色不同,方便识别
        $disturbColor_line = imagecolorallocate($im, mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120));
       
// 干扰点颜色,与文字颜色一并随机生成,但可很大几率的保证颜色不同,方便识别
        
$disturbColor_circle = imagecolorallocate($im, mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120));
        
// 干扰

        for ($i = 0; $i < 10; $i++)
        {

            imagearc($im, mt_rand(-10, $width), mt_rand(-10, $height), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $disturbColor_line);

        }

        for ($i = 0; $i < 25; $i++)
        {

            imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $disturbColor_circle);

        }

        for ($i = 0; $i < $length; $i++)
        {
            
// 替换原来的函数,生成图片时引入字体文件,美化样式

            imagettftext($im,14,10,$i*10+5,mt_rand(16,26),$stringColor,$fontPath,$randval{$i});

   /*imagestring($im, 5, $i * 10 + 5, mt_rand(1, 8), $randval{$i}, $stringColor);*/

        }

        Image::output($im, $type);

    } 

转载请注明:谷谷点程序 » ThinkPHP验证码的美化