1.一种图片验证码的生成方法,其特征在于:一种图片验证码的生成方法具体是按照以下步骤进行的:步骤一、输入验证码GIF图片显示需要的文本信息,输入验证码GIF图片的宽度W和高度H,输入验证码GIF图片所对应的帧数;
所述,宽度W取值范围为100≤W≤1000;高度H取值范围为100≤H≤1000;GIF图片为动态图片;
步骤二、生成一个宽度为W和高度为H的白色背景的空白图片,将文本信息以黑色绘制在白色背景的空白图片上,将绘制后的图片转换为由0和1构成的模板二维数组;
步骤三、生成一个宽度为W和高度为H的256级灰度图片,在该256级灰度图片上的随机位置绘制LineNum条宽度随机、颜色随机的直线,将绘制后的256级灰度图片转换为由0到
255数值构成的纹理二维数组;
所述LineNum为行数;
步骤四、随机生成二维方向矢量v,建立图片列表,根据二维方向矢量v、模板二维数组和纹理二维数组输出验证码GIF图片所对应的帧数个图片,将所有输出验证码GIF图片所对应的帧数个图片放入图片列表之中;具体过程为:步骤四一、随机生成二维方向矢量v=(v1,v2),其中v1,v2均为-2到2之间的随机整数;
所述,v1为二维方向矢量的横坐标,v2为二维方向矢量的纵坐标;
步骤四二、建立图片列表,将图片列表置为空;
将步骤三得到的纹理二维数组复制三次,获得三个数组暂存数组1、暂存数组2和暂存数组3;
建立一个空白的宽度为W和高度为H的图片FrameBMP;
步骤四三、将帧的个数计数器的值置为输入验证码GIF图片所对应的帧数;
步骤四四、当帧的个数计数器大于0则转到步骤四五,否则转到步骤四十;
步骤四五、按照二维方向矢量v的方向将暂存数组1数组中的所有元素移动并存回暂存数组1数组之中;
暂存数组1数组中元素的原始位置坐标为(origX,origY),移动后的位置坐标为(disX,disY);
步骤四六、按照二维方向矢量v的反方向将暂存数组2数组中的所有元素移动并存回暂存数组2数组之中;
暂存数组2数组中元素的原始位置坐标为(origX,origY),移动后的位置坐标为(disX,disY);
步骤四七、对于模板二维数组中的每一个元素,如果该元素值为0那么将暂存数组1数组中每个位置元素值复制到暂存数组3的对应位置,如果该元素值为1那么将暂存数组2数组中每个位置元素值复制到暂存数组3的对应位置;
步骤四八、将暂存数组3数组转换为灰度图片存储到FrameBMP之中,并将FrameBMP加入到图片列表之中;
步骤四九、帧的个数计数器自减1,转到步骤四四;
步骤四十、结束图片列表建立过程;
步骤五、将图片列表中的验证码GIF图片所对应的帧数个图片转换为GIF动态图片文件,将GIF动态图片文件作为图片验证码输出。
2.根据权利要求1所述一种图片验证码的生成方法,其特征在于:所述步骤二中生成一个宽度为W和高度为H的白色背景的空白图片,将文本信息以黑色绘制在白色背景的空白图片上,将绘制后的图片转换为由0和1构成的模板二维数组;具体过程为:步骤二一、生成一个宽度为W和高度为H的白色背景的空白图片文件;
步骤二二、将文本信息以黑色方式绘制在一个宽度为W和高度为H的白色背景的空白图片文件上;
步骤二三、建立一个宽度为W和高度为H的模板二维数组;
步骤二四、对于绘制后的宽度为W和高度为H的白色背景的空白图片文件中的每一个像元,如果该像元为白色,则模板二维数组的对应位置元素赋值为0;如果该像元为黑色,则模板二维数组的对应位置元素赋值为1。
3.根据权利要求2所述一种图片验证码的生成方法,其特征在于:所述步骤三中生成一个宽度为W和高度为H的256级灰度图片,在该256级灰度图片上的随机位置绘制LineNum条宽度随机、颜色随机的直线,将绘制后的256级灰度图片转换为由0到255数值构成的纹理二维数组;具体过程为:LineNum的值通过如下公式计算:
LineNum=(W+H)×20。
4.根据权利要求3所述一种图片验证码的生成方法,其特征在于:所述步骤三中生成一个宽度为W和高度为H的256级灰度图片,在该256级灰度图片上的随机位置绘制LineNum条宽度随机、颜色随机的直线,将绘制后的256级灰度图片转换为由0到255数值构成的纹理二维数组;具体过程为:步骤三一、生成一个宽度为W和高度为H的256级灰度图片;
步骤三二、将条宽度随机、颜色随机的直线的个数计数器的值置为LineNum;
步骤三三、当LineCounter大于0时转到步骤三四,否则转到步骤三七;
所述LineCounter为条宽度随机、颜色随机的直线的个数计数器;
步骤三四、生成6个在区间(0,1)范围内的随机变量r1,r2,r3,r4,r5,r6;
步骤三五、在所述宽度为W和高度为H的256级灰度图片上绘制一条直线,该直线的起点坐标为(r1×H,r2×W),终点坐标为(r1×H+r3×20,r2×W+r4×20),宽度为2+r5×5,颜色灰度为r6×255;
所述,r1×H为直线的起点横坐标,r2×W为直线的起点纵坐标;r1×H+r3×20为直线的终点横坐标,r2×W+r4×20直线的终点纵坐标;H为高度,W为宽度;
步骤三六、LineCounter自减1,转到步骤三三;
步骤三七、建立一个宽度为W和高度为H的纹理二维数组;
步骤三八、对于所述宽度为W和高度为H的256级灰度图片的每一个像元,取出每一个像元的灰度值,将灰度值存储在纹理二维数组的对应位置的元素中。
5.根据权利要求4所述一种图片验证码的生成方法,其特征在于:所述步骤四五中移动后的位置坐标(disX,disY)计算公式表示为:disX=(origX+v1+2×H)%H;
disY=(origY+v2+2×W)%W;
所述,v1为二维方向矢量的横坐标,v2为二维方向矢量的纵坐标,%为求余数操作;
disX为移动后的位置坐标的横坐标,disY为移动后的位置坐标的纵坐标。
6.根据权利要求5所述一种图片验证码的生成方法,其特征在于:所述步骤四六中移动后的位置坐标(disX,disY)计算公式表示为:disX=(origX-v1+2×H)%H;
disY=(origY-v2+2×W)%W。
7.根据权利要求6所述一种图片验证码的生成方法,其特征在于:所述步骤五中将图片列表中的验证码GIF图片所对应的帧数个图片转换为GIF动态图片文件,将GIF动态图片文件作为图片验证码输出;具体过程为:步骤五一、建立宽度为W和高度为H的GIF动态图片文件;
步骤五二、指定GIF动态图片文件每一帧的显示持续时间为0.2秒;
步骤五三、将图片列表中的每一个图片转换为GIF图片的一帧,加入到GIF动态图片文件之中;
步骤五四、将GIF动态图片文件作为图片验证码输出。