PHP 验证码
gd是一个强大的php图像处理库,最近在做验证码加强的策略,才发现用php作图也能玩出很多花样来。
几个重要函数
- imagecreatetruecolor 创建一张空的画布
- imagecreatefrompng 从文件创建一个图片句柄
- imagecolorallocate 拾取一种颜色(rgb)
- imagettftext 向画布写入文字
- imagecopy 合并两张图片,可指定拷贝区域及大小
- imagecolorat 从图片指定像素点拾取一种颜色
- imagesetpixel 画一个像素点
- imagearc 画一个椭圆,截取部分可用来绘制曲线
php绘图用的最频繁的地方大概就是生成验证码了,我们最常见的验证码数字加英文的组合,生成这种验证码很简单,下面几行代码就可以搞定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
效果图:
其中合并了一张纹理背景并随机绘制出文字的颜色。下面我们再加点料,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
上面的方法往图像中加入了50个噪点和一条干扰曲线,于是验证码变成了这样:
下面来实现汉字和带公式的验证码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
|
生成汉字和上面的英文组合差不多,加个字典就可以,然后可以加入一下随机的字体变换,生成公式呢,其实也是预先定义好数字和符号的字典,靠随机组合来生成图片,然后吧计算结果记录下来就行了。
很多验证码中还会对字体进行扭曲,这会让做的人和看的人都比较纠结。目前的方法大致是先生成一张正常的图,然后拾取图中每个像素点进行正弦变换位置后填入另一张相同大小的图,注意两张图的背景需要一致,否则边缘的图片就很不和谐咯。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
效果图:
最后再加入一个gif动态图的例子,主要原理是预先生成每一帧的gif图像,然后合并为一张图片,对gif进行编码的类库使用的是网上下载的GIFEncoder,代码不多,但是够用。less is more
嘛。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
效果图:
备忘
imagecreate
也是一个创建图像的方法,不过相对于imagecreatetruecolor
,它会使用第一次由imagecolorallocate
生成的颜色作为背景色,比较坑爹,不推荐。