imagesetpixel($image, mt_rand(0, $image_width-1),mt_rand(0, $image_height-1),$black);
这一句还是不太明白,请再详细讲一下。既然是$image_width-1,$image_height-1,
为什么说是随机的呢?
验证码干扰点随机位置详解
我来用最直观的方式解释这个随机点绘制的工作原理:
图片坐标系统基础
图片的坐标系统就像Excel表格:
左上角是原点(0,0)
向右是X轴正方向(宽度)
向下是Y轴正方向(高度)
为什么要减1?
假设图片宽度是100px,那么:
最左侧像素的X坐标是0
最右侧像素的X坐标是99(不是100!)
所以有效范围是0到99(即0到$image_width-1)
随机性体现在哪里?
mt_rand(0, $image_width-1):在图片宽度范围内随机选一个X坐标
比如宽度100px,可能随机出:0, 23, 56, 99等
mt_rand(0, $image_height-1):在图片高度范围内随机选一个Y坐标
比如高度50px,可能随机出:0, 12, 34, 49等
实际工作过程
每次执行这行代码时:
生成随机X坐标(水平位置)
生成随机Y坐标(垂直位置)
在图片的这个(X,Y)位置画一个黑点
为什么说它是随机的?
因为每次点的位置都是通过
mt_rand()函数新生成的即使图片尺寸不变,每次运行得到的位置都不同
就像掷骰子:虽然骰子只有6面(就像图片有固定尺寸),但每次掷出的点数(位置)是随机的
示例说明
假设:
图片尺寸:宽200px × 高100px
可能的随机结果:
第一次:(50, 30)
第二次:(180, 5)
第三次:(12, 88)
第四次:(199, 99) → 正好在右下角
这样就在图片上随机散布了干扰点,既增加了验证码的安全性,又保持了可读性。