一种图片验证码的生成方法与流程

文档序号:12365160阅读:来源:国知局

技术特征:

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图片所对应的帧数个图片放入图片列表之中;

步骤五、将图片列表中的验证码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=(width+height)×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×height,r2×width),终点坐标为(r1×height+r3×20,r2×width+r4×20),宽度为2+r5×5,颜色灰度为r6×255;

所述,r1×height为直线的起点横坐标,r2×width为直线的起点纵坐标;r1×height+r3×20为直线的终点横坐标,r2×width+r4×20直线的终点纵坐标;height为高度,width为宽度;

步骤三六、LineCounter自减1,转到步骤三三;

步骤三七、建立一个宽度为W和高度为H的纹理二维数组;

步骤三八、对于一个宽度为W和高度为H的256级灰度图片的每一个像元,取出每一个像元的灰度值,将灰度值存储在纹理二维数组的对应位置的元素中。

5.根据权利要求4所述一种图片验证码的生成方法,其特征在于:所述步骤四中随机生成二维方向矢量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,转到步骤四四;

步骤四十、结束图片列表建立过程。

6.根据权利要求5所述一种图片验证码的生成方法,其特征在于:所述步骤四五中移动后的位置坐标(disX,disY)计算公式表示为:

disX=(origX+v1+2×height)%height;

disY=(origY+v2+2×width)%width;

所述,v1为二维方向矢量的横坐标,v2为二维方向矢量的纵坐标,%为求余数操作;disX为移动后的位置坐标的横坐标,disY为移动后的位置坐标的纵坐标。

7.根据权利要求6所述一种图片验证码的生成方法,其特征在于:所述步骤四六中移动后的位置坐标(disX,disY)计算公式表示为:

disX=(origX-v1+2×height)%height;

disY=(origY-v2+2×width)%width。

8.根据权利要求7所述一种图片验证码的生成方法,其特征在于:所述步骤五中将图片列表中的验证码GIF图片所对应的帧数个图片转换为GIF动态图片文件,将GIF动态图片文件作为图片验证码输出;具体过程为:

步骤五一、建立宽度为W和高度为H的GIF动态图片文件;

步骤五二、指定GIF动态图片文件每一帧的显示持续时间为0.2秒;

步骤五三、将图片列表中的每一个图片转换为GIF图片的一帧,加入到GIF动态图片文件之中;

步骤五四、将GIF动态图片文件作为图片验证码输出。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1