生成验证码比较简单,画图也不难,不过大家都不喜欢读手册,也不喜欢自己动手,一般是网上抄一段代码了事,我一直如此,偶尔画图,其实发现画图挺有趣。
不过拿普通字体生成的验证码,是没有一点“战斗力”的,很轻易的就会验证码识别程序识别内容,然后轻易被灌水,要生成好的验证码图片不是简单的事情,有些大公司专门一个部门去做这么一件事情,不过我这里只是了解演示,一般用途应该就够用了吧,呵呵。
下面两个函数,一个能够画出中文内容,另外一个能够画出英文内容,按照需要使用。
/*
*
* 生成中文字符,
*
* 必须有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 );
}
* 生成中文字符,
*
* 必须有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 );
}
有兴趣的欢迎自行加入干扰元素,或者是对图片进行变形,让那些图片识别程序无法识别。(最近两个月超级忙,好久没写东西,写一篇凑数,嘿嘿,表见怪)