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

文档序号:12365160阅读:246来源:国知局
一种图片验证码的生成方法与流程

本发明涉及图片验证码的生成方法。



背景技术:

随着互联网技术的发展,人们工作、学习、生活越来越多的依赖于互联网提供的资源。一些不法分子会利用于“网络爬虫”或“机器人程序”自动的访问网络资源,进行垃圾邮件的攻击、注册验证短信攻击、在线投票系统上的虚假投票、大量购买限购商品或车票以及对网站进行饱和攻击。为了阻挡“网络爬虫”或“机器人程序”对网站资源的访问,各种基于互联网的系统通常会采用图片验证码的方式进行验证,如果用户可以识别出验证码并输入正确的内容那么允许继续访问系统资源,反之不允许继续访问。

随着人工智能技术的快速发展,计算机程序已经可以自动识别系统生成的图片验证码。而为了防止图片验证码被识别,现有的技术通常采用的手段是:变换字体、扭曲变形文字、加入杂点或色块、拉伸平移文字以及加入干扰文字来防止计算机程序自动识别。由于目前的人工智能识别能力已经很强,当前技术采用的方式会遇到一个两难的境地:如果图片验证码中的文字扭曲变形的不够,那么计算机智能程序可以很容易的识别其内容,起不到防护目的;如果内容过度的变化扭曲,那么普通用户也会难于识别出其中的内容,会把正常用户也阻挡在系统之外。

因此需要提供一种新的图片验证码的生成方法和装置来解决现有问题,提高“网络爬虫”或“机器人程序”识别图片验证码的难度的同时不阻挡普通用户识别图片验证码中的内容。



技术实现要素:

本发明的目的是为了解决现有技术提高“网络爬虫”或“机器人程序”识别图片验证码的难度的同时也阻挡了普通用户识别图片验证码中内容的缺点,而提出一种图片验证码的生成方法。

一种图片验证码的生成方法具体是按照以下步骤进行的:

步骤一、输入验证码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动态图片文件作为图片验证码输出。

本发明的有益效果为:

针对现有技术存在的问题,本发明提供一种图片验证码的生成方法,通过该方法可以生成一个由动态GIF图片构成的图片验证码,该验证码内部包含的文字内容不需要经过变形或扭曲,正常的用户观察该图片会有在满是杂色纹理背景下浮现出文字的感觉,识别其中内容较为容易;而人工智能程序加载该图片之后,在该动态图片的任何一帧画面均是由杂乱的线条构成的,其中不包含验证文字信息,程序无法识别其中的内容。

利用该方法生成的图片验证码,“网络爬虫”或“机器人程序”较难识别,而普通用户较容易识别;利用该技术可以有效的帮助各种基于互联网的系统阻挡“网络爬虫”或“机器人程序”的随意访问,而不阻挡普通使用者;可以极大的提高基于互联网的系统的安全性。经测试普通使用者在注视10秒之内便可以识别出图片中包含的文字,而基于SHIFT、神经网、支持向量机等智能算法的人工智能程序均无法识别出验证码内部的文字。

附图说明

图1为本发明流程图;

图2为本发明构成模板二维数组流程图;

图3为本发明构成纹理二维数组流程图;

图4为本发明构建图片列表过程流程图;

图5为本发明图片验证码输出结果流程图。

图6为本发明实施例生成的白色图片文件,将文本内容写在白色的背景上的示意图;

图7为本发明实施例生成的256级灰度图;

图8为本发明实施例生成的一种文字浮在纹理之上的动态示意图。

具体实施方式

具体实施方式一:结合图1说明本实施方式,本实施方式的一种图片验证码的生成方法具体是按照以下步骤进行的:

步骤一、输入验证码GIF图片显示需要的文本信息text,输入验证码GIF图片的宽度W和高度H,输入验证码GIF图片所对应的帧数frameNumber;

所述宽度W取值范围为100≤W≤1000;高度H取值范围为100≤H≤1000;GIF图片为动态图片;

文本信息是方法使用者(比如网站的服务程序、安全管理程序)输入的,比如网站需要显示的验证码;

步骤二、生成一个宽度width为W和高度height为H的白色背景的空白图片(宽度高度是方法使用者输入的),将文本信息以黑色绘制在白色背景的空白图片上,将绘制后的图片转换为由0和1构成的模板二维数组MaskArray;

步骤三、生成一个宽度width为W和高度height为H的256级灰度图片,在该256级灰度图片上的随机位置绘制LineNum条宽度随机、颜色随机的直线,将绘制后的256级灰度图片转换为由0到255数值构成的纹理二维数组BmpArray;

所述LineNum为行数;

步骤四、随机生成二维方向矢量v,建立图片列表BmpList,根据二维方向矢量v、模板二维数组MaskArray和图片列表BmpArray输出验证码GIF图片所对应的帧数frameNumber个图片,将所有输出验证码GIF图片所对应的帧数个图片放入图片列表BmpList之中;

步骤五、将图片列表BmpList中的验证码GIF图片所对应的帧数frameNumber个图片转换为GIF动态图片文件GIFFile,将GIF动态图片文件GIFFile作为图片验证码输出。

具体实施方式二:结合图2说明本实施方式,本实施方式与具体实施方式一不同的是:所述步骤二中生成一个宽度width为W和高度height为H的白色背景的空白图片(宽度高度是方法使用者输入的),将文本信息以黑色绘制在白色背景的空白图片上,将绘制后的图片转换为由0和1构成的模板二维数组MaskArray;具体过程为:

步骤二一、生成一个宽度width为W和高度height为H的白色背景的空白图片文件WhiteBMP;

步骤二二、将文本信息以黑色方式绘制在一个宽度为W和高度为H的白色背景的空白图片文件WhiteBMP上;

步骤二三、建立一个宽度width为W和高度height为H的模板二维数组MaskArray;

步骤二四、对于绘制后的宽度为W和高度为H的白色背景的空白图片文件WhiteBMP中的每一个像元,如果该像元为白色,则模板二维数组MaskArray的对应位置(MashArray的元素个数与WhiteBMP图片的像元个数完全相同,MashArray的每一个元素与WhiteBMP的像元一一对应。)元素赋值为0;如果该像元为黑色,则模板二维数组MaskArray的对应位置元素赋值为1。

其它步骤及参数与具体实施方式一相同。

具体实施方式三:本实施方式与具体实施方式一或二不同的是:所述步骤三中生成一个宽度width为W和高度height为H的256级灰度图片,在该256级灰度图片上的随机位置绘制LineNum条宽度随机、颜色随机的直线,将绘制后的256级灰度图片转换为由0到255数值构成的纹理二维数组BmpArray;具体过程为:

LineNum的值通过如下公式计算:

LineNum=(width+height)×20。

其它步骤及参数与具体实施方式一或二相同。

具体实施方式四:结合图3说明本实施方式,本实施方式与具体实施方式一至三之一不同的是:所述步骤三中生成一个宽度width为W和高度height为H的256级灰度图片,在该256级灰度图片上的随机位置绘制LineNum条宽度随机、颜色随机的直线,将绘制后的256级灰度图片转换为由0到255数值构成的纹理二维数组BmpArray;具体过程为:

步骤三一、生成一个宽度width为W和高度height为H的256级灰度图片GrayBMP;

步骤三二、将条宽度随机、颜色随机的直线的个数计数器LineCounter的值置为LineNum;

步骤三三、当LineCounter大于0时转到步骤三四,否则转到步骤三七;

所述LineCounter为条宽度随机、颜色随机的直线的个数计数器;

步骤三四、生成6个在区间(0,1)范围内的随机变量r1,r2,r3,r4,r5,r6;

步骤三五、在一个宽度width为W和高度height为H的256级灰度图片GrayBMP上绘制一条直线,该直线的起点坐标为(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,转到步骤三三;

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

步骤三八、对于一个宽度width为W和高度height为H的256级灰度图片GrayBMP的每一个像元,取出每一个像元的灰度值,将灰度值存储在纹理二维数组BmpArray的对应位置(GrayBmp是按照行和列存储的图片,而BmpArray是按照行和列存储的二维数组,它们的元素个数一致,按照行和列进行对应。)的元素中。

其它步骤及参数与具体实施方式一至三之一相同。

具体实施方式五:结合图4说明本实施方式,本实施方式与具体实施方式一至四之一不同的是:所述步骤四中随机生成二维方向矢量v,建立图片列表BmpList,根据二维方向矢量v、模板二维数组MaskArray和图片列表BmpArray输出验证码GIF图片所对应的帧数frameNumber个图片,将所有输出验证码GIF图片所对应的帧数个图片放入图片列表BmpList之中;具体过程为:

步骤四一、随机生成二维方向矢量v=(v1,v2),其中v1,v2均为-2到2之间的随机整数;

所述v1为二维方向矢量的横坐标,v2为二维方向矢量的纵坐标;

步骤四二、建立图片列表BmpList,将图片列表BmpList置为空;

将步骤三得到的纹理二维数组BmpArray复制三次,获得三个数组暂存数组1TempArray1、暂存数组2TempArray2和暂存数组3TempArray3;

建立一个空白的宽度width为W和高度height为H的图片FrameBMP;

步骤四三、将帧的个数计数器frameCounter的值置为输入验证码GIF图片所对应的帧数frameNumber;

步骤四四、当帧的个数计数器frameCounter大于0则转到步骤四五,否则转到步骤四十;

步骤四五、按照二维方向矢量v的方向将暂存数组1TempArray1数组中的所有元素移动并存回暂存数组1TempArray1数组之中;

暂存数组1TempArray1数组中元素的原始位置坐标为(origX,origY),移动后的位置坐标为(disX,disY);

步骤四六、按照二维方向矢量v的反方向将暂存数组2TempArray2数组中的所有元素移动并存回暂存数组2TempArray2数组之中;

暂存数组2TempArray2数组中元素的原始位置坐标为(origX,origY),移动后的位置坐标为(disX,disY);

步骤四七、对于模板二维数组MaskArray中的每一个元素,如果该元素值为0那么将暂存数组1TempArray1数组中每个位置元素值复制到暂存数组3TempArray3的对应位置,如果该元素值为1那么将暂存数组2TempArray2数组中每个位置元素值复制到暂存数组3TempArray3的对应位置;

步骤四八、将暂存数组3TempArray3数组转换为灰度图片存储到FrameBMP之中,并将FrameBMP加入到图片列表BmpList之中;

步骤四九、帧的个数计数器frameCounter自减1,转到步骤四四;

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

其它步骤及参数与具体实施方式一至四之一相同。

具体实施方式六:本实施方式与具体实施方式一至五之一不同的是:所述步骤四五中移动后的位置坐标(disX,disY)计算公式表示为:

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

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

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

其它步骤及参数与具体实施方式一至五之一相同。

具体实施方式七:本实施方式与具体实施方式一至六之一不同的是:所述步骤四六中移动后的位置坐标(disX,disY)计算公式表示为:

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

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

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

其它步骤及参数与具体实施方式一至六之一相同。

具体实施方式八:结合图5说明本实施方式,本实施方式与具体实施方式一至七之一不同的是:所述步骤五中将图片列表BmpList中的验证码GIF图片所对应的帧数frameNumber个图片转换为GIF动态图片文件GIFFile,将GIF动态图片文件GIFFile作为图片验证码输出;具体过程为:

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

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

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

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

其它步骤及参数与具体实施方式一至七之一相同。

采用以下实施例验证本发明的有益效果:

实施例一:

本实施例一种图片验证码的生成方法具体是按照以下步骤制备的:

1.假设步骤一输入的text为“TOM123”,帧数frameNumber为100,宽度width=214,高度height=71;

2.在步骤二,生成了白色图片文件WhiteBMP,将文本内容写在白色的背景上,如图6;

对应WhiteBMP.bmp这个文件;

3.在步骤三生成的256级灰度图片GrayBMP,其内容如图7:

对应GrayBMP.bmp这个文件

4.在步骤四生成的BmpList包含100个文件,对应BmpList里面100个图片文件

5.生成的GIFFile,对应GIFFile.gif这个文件,这个文件动态播放的时候由于模板二维数组MaskArray里面为0的像元和为1的像元移动方向相对,给观察者一种文字浮在纹理之上的感觉,如图8,使用时需要播放GIFFile.gif,图8为动态图。

本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,本领域技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

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