两个简单的画验证码图形程序



生成验证码比较简单,画图也不难,不过大家都不喜欢读手册,也不喜欢自己动手,一般是网上抄一段代码了事,我一直如此,偶尔画图,其实发现画图挺有趣。

不过拿普通字体生成的验证码,是没有一点“战斗力”的,很轻易的就会验证码识别程序识别内容,然后轻易被灌水,要生成好的验证码图片不是简单的事情,有些大公司专门一个部门去做这么一件事情,不过我这里只是了解演示,一般用途应该就够用了吧,呵呵。

下面两个函数,一个能够画出中文内容,另外一个能够画出英文内容,按照需要使用。

/* *
 * 生成中文字符,
 *
 * 必须有GD库、iconv或者mbstring库、相应的字体文件
 
*/
function  makeChineseCharPic( $str   =   ' 中文字符 ' ){
    
// 转码
     if  ( function_exists ( ' iconv ' )){
        
$str   =   iconv ( ' gbk ' ,   ' utf-8 ' ,   $str );
    }
elseif  ( function_exists ( ' mb_convert_encoding ' )){
        
$str   =  mb_convert_encoding( $str ,   ' utf-8 ' ,   ' gbk ' );
    }
else {
        
exit ( " Not iconv charset " );
    }

    
// 产生图片
     $im   =  imageCreate( 80 ,   30 );
    
// 背景色
     $bkg   =  imageColorAllocate( $im ,   0 ,   255 ,   255 );
    
// 字体色
     $clr   =  imageColorAllocate( $im ,   0 ,   128 ,   255 );
    
// 字体文件路径
     $font   =   " c:/windows/fonts/simhei.ttf " ;
    
// 使用字体来画TTF内容
    imageTTFText( $im ,   13 ,   0 ,   5 ,   20 ,   $clr ,   $font ,   $str );
    
// --------------------------------------------------
    // 黑体:simhei.ttf, 宋体:simsun.ttc, 隶书:simli.ttf, 楷体:simkai.ttf, 幼圆:simyou.ttf
    // 华文行楷:stxingka.ttf, 华文新魏:stxinwei.ttf, 华文彩云:stcaiyun.ttf, 华文仿宋:stfangso.ttf
    // 方正姚体:fzytk, 方正舒体:fzstk.ttf
    //--------------------------------------------------    

    //输出后清除资源

     header ( " Content-type: image/png " );
    imagePng(
$im );
    imageDestroy(
$im );
}

/* *
 * 画英文字符 (必须有GB库)
 
*/
function  makeEnglishCharPic( $str   =   ' ABCD12 ' ){

    
// 生成图片
     $im   =  imageCreateTrueColor( 65 ,   20 );
    
// 背景色
     $bg   =  imageColorAlLocate( $im ,   0 ,   0 ,   0 );
    
// 字体色
     $textColor   =  imageColorAlLocate( $im ,   0 ,   255 ,   255 );
    
// 画图
    imageString( $im ,   5 ,   5 ,   2 ,   $str ,   $textColor );

    
// 输出后清除资源
     header ( " Content-type: image/jpeg " );
    imageJpeg(
$im );
    imageDestroy(
$im );
}

 

有兴趣的欢迎自行加入干扰元素,或者是对图片进行变形,让那些图片识别程序无法识别。(最近两个月超级忙,好久没写东西,写一篇凑数,嘿嘿,表见怪)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值