<?php
session_start();
$image = imagecreatetruecolor( 200,60 );
$bgcolor = imagecolorallocate( $image,255,255,255);#fffff
imagefill( $image,0,0,$bgcolor );
$fontface = 'msyh.ttf';
$strdb = array( '沐','课','网','赞');
$captch_code = '';
//
for($i=0;$i<4;$i++){
$fontcolor = imagecolorallocate( $image,rand(0,120),rand(0,120),rand(0,120));
$cn = $strdb[$i];
$captcha_code.=$cn;
imagettftext( $image,mt_rand(20,24),mt_rand(-60,60),(40*$i + 20),mt_rand(30,35),$fontcolor,$fontface,$cn);
}
$_SESSION['authcode'] = $captch_code;
//点干扰元素
for($i=0;$i<200;$i++){
$pointcolor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
imagesetpixel( $image,rand(1,199),rand(1,59),$pointcolor);
}
//线干扰元素
for($i=0;$i<3;$i++){
$linecolor=imagecolorallocate( $image,rand( 80,220),rand(80,220),rand(80,220));
imageline( $image,rand(1,199),rand(1,59),rand(1,199),rand(1,59),$linecolor);
}
header('content-type:image/png');
imagepng( $image);
//end
imagedestroy($image);
?>
$fontface = 'msyh.ttf';首先确认一下PHP文件目录下是否放置了msyh.ttf文件,如果该文件不存在或者损坏的话imagettftext函数会报错。
另外$captcha_code.=$cn;需要改成$cn = iconv('gbk', 'utf-8', $strdb[$i]); 否则会显示乱码。因为imagettftext函数只接受UTF-8编码的字符。
for($i=0;$i<4;$i++){
$fontcolor = imagecolorallocate( $image,rand(0,120),rand(0,120),rand(0,120));
$cn = $strdb[$i];
** $captcha_code.=$cn;**//这里变量写错了,改成$captch_code.=$cn;就能正确显示
imagettftext( $image,mt_rand(20,24),mt_rand(-60,60),(40*$i + 20),mt_rand(30,35),$fontcolor,$fontface,$cn);
}