konakona
[原创] 为ThinkPHP2.1生成图像验证码设置字体
[原创] 为ThinkPHP2.1生成图像验证码设置字体

整片文章的重点在于imagettftext()这个函数。

首先打开ThinkPHP2.1的图片类 ThinkPHP.Lib.ORG.Util.Image.class.php 文件

找到buildImageVerify()方法。

以下是完整的修改代码

static function buildImageVerify($length = 4, $mode = 1, $type = 'png', $width = 48, $height = 22, $verifyName = 'verify', $file = "") {
    	//我默认将字体放在公共目录底下了
		$file = $file == "" ? dirname ( __PATH__ ) . "/Public/font/transportm.ttf" : $file;
		if (! is_file ( $file ))
			return false;
		import ( 'ORG.Util.String' );
		$randval = String::rand_string ( $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 ); //边框色
		$pointColor = imagecolorallocate ( $im, mt_rand ( 0, 255 ), mt_rand ( 0, 255 ), mt_rand ( 0, 255 ) ); //点颜色

		@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 ) );
		//杂色干扰
		for($i = 0; $i < 10; $i ++) {
			$fontcolor = imagecolorallocate ( $im, mt_rand ( 0, 255 ), mt_rand ( 0, 255 ), mt_rand ( 0, 255 ) );
			imagearc ( $im, mt_rand ( - 10, $width ), mt_rand ( - 10, $height ), mt_rand ( 30, 300 ), mt_rand ( 20, 200 ), 55, 44, $fontcolor );
		}
		//杂线干扰
		for($i = 0; $i < 25; $i ++) {
			$fontcolor = imagecolorallocate ( $im, mt_rand ( 0, 255 ), mt_rand ( 0, 255 ), mt_rand ( 0, 255 ) );
			imagesetpixel ( $im, mt_rand ( 0, $width ), mt_rand ( 0, $height ), $pointColor );
		}
		//文字部分
		for($i = 0; $i < $length; $i ++) {
			imagettftext ( $im, 13, mt_rand ( 15, 30 ), $i * 10 + 5, mt_rand ( 18, 23 ), $fontcolor, $file, $randval {$i} );
		}
		Image::output ( $im, $type );
    }

如果你要用,直接用就可以了,只需要将文字文件放在网站根目录/Public/font/transportm.ttf 即可。

具体修改的地方

主要添加了$file传参,用来制定文字文件位置

$file = $file == "" ? dirname ( __PATH__ ) . "/Public/font/transportm.ttf" : $file;
if (! is_file ( $file ))  return false;

然后去掉最后一个for()循环中,imagestring()的角色(实现为缩略图添加验证码文字的角色)。

for($i = 0; $i < $length; $i ++) {
     imagettftext ( $im, 13, mt_rand ( 15, 30 ), $i * 10 + 5, mt_rand ( 18, 23 ), $fontcolor, $file, $randval {$i} );
}

这样就可以了,非常简单!
如果觉得验证码还不够生动,可以单独调整imagettftext()函数里的参数。
参数的意思分别是:
imagettftext(图像资源,字体大小,文字的倾斜力度,文字出现的X坐标,文字出现的Y坐标,文字的颜色,文字字体位置,填充的文字内容);

http://blog.crazyphper.com/wp-content/uploads/2012/02/2000.gif
大家不放自己动手试试吧!

赞赏
首页      程序开发      PHP      [原创] 为ThinkPHP2.1生成图像验证码设置字体
https://secure.gravatar.com/avatar/3b712b34a0e1b689cfb524c9c6bcdc47?s=256&r=g

团哥

文章作者

继续玩我的CODE,让别人说去。 低调,就是这么自信。

发表评论

textsms
account_circle
email

konakona

[原创] 为ThinkPHP2.1生成图像验证码设置字体
整片文章的重点在于imagettftext()这个函数。 首先打开ThinkPHP2.1的图片类 ThinkPHP.Lib.ORG.Util.Image.class.php 文件 找到buildImageVerify()方法。 以下是完整的修改代码:…
扫描二维码继续阅读
2012-02-07