本发明涉及计算机应用技术领域,特别是涉及一种生成图形验证码的方法。
背景技术:
图形验证码在很多软件中被使用到,主要目的是为了识别正常用户和确保正常的访问、浏览操作;识别是否为正常和有效访问、浏览操作的主要实现方式是通过要求输入图形验证码结果来区分。
用户需要更具软件提供的验证码图形,理解图形中的意思后把结果输入、返回给软件。
目前很多软件使用的图形验证码生成的方式方法主要有以下缺陷:图形验证码生成有规律性,容易被掌握后破解;验证码的图形内容变化小,容易被大量收集后做比对破解。
技术实现要素:
针对上述现有技术,本发明目的在于提供一种生成图形验证码的方法,解决现有技术由于使用规律性生成算法和固定图片大小或固定验证码长度所导致的容易被机器学习并破解等技术问题。
为达到上述目的,本发明采用的技术方案如下:
一种生成图形验证码的方法,包括以下步骤:
步骤1、获得不同种的字符集、字符集字符尺寸集合有属于图片尺寸关系且不同像素大小的背景图片库、不同种的颜色集,其中字符集字符尺寸集合有属于图片尺寸关系且不同像素大小的背景图片库,即背景图片库中某些图片的大小至少能大于或等于所有被选出的、预定个数的字符总尺寸;
步骤2、按照预定验证码的文字个数,选取种类量小于等于文字个数量的待处理字符集;
步骤3、从背景图片库中选取一张图片作为待处理图片,再判断待处理字符集字符尺寸集合与待处理图片尺寸的大小关系,若待处理图片具有足够容纳空间,将待处理图片随机添加线条后得到背景图片再进行步骤4,若待处理图片不具有足够容纳空间,重新进行步骤3,其中,判断过程即为待处理字符集中预定个数且尺寸相对大的字符组合是否超出图片尺寸;
步骤4、将待处理字符集中每个字符分别依次进行随机角度旋转、局部像素随机偏移和从颜色集中随机赋彩,获得结果字体集,再设置每个结果字体的原点并计算出区域坐标;
步骤5、有序分割背景图片,得到背景图片的等分区域,再按序依次设置每个等分区域的原点,然后根据当前结果字体所对应待处理字符集中的字符像素与当前结果字体的区域坐标的差值关系,确定出对应步骤4中每个结果字体原点的参考点,最后相对参考点将每个结果字体依次覆盖入背景图片的等分区域,获得图形验证码。
上述方案中,所述的步骤4,包括
步骤4.1、参照字符的垂直中轴线,作负九十度至正九十度范围内的随机角度旋转;
步骤4.2、再对旋转后字符的局部像素进行随机连续偏移;
步骤4.3、从颜色集中随机选取颜色,使用所述颜色对偏移的字符赋彩,获得对应步骤4.1中字符的结果字体,若完成所有待处理字符集中字符的步骤4.1-步骤4.3操作,则进行步骤4.4,若还有字符未进行步骤4.1-步骤4.3操作,则跳转至步骤4.1;
步骤4.4、获得对应待处理字符集的结果字体集。
上述方案中,所述的步骤5,包括
步骤5.1、将背景图片沿一个方向等分为e份矩形,记为e1,e2…en…ee,n为1至字符数的正整数,e为大于或等于字符数的正整数;
步骤5.2、相对矩形en中心设置其左上角顶点原点,在原点至坐标(待处理字符集中第n个字符宽度像素-第n个结果字体区域坐标横轴量,待处理字符集中第n个字符高度像素-第n个结果字体区域坐标竖轴量)所定义的矩形中,任意去掉一点作为对应步骤4中每个结果字体原点的参考点,将第n个结果字体以rgb颜色作像素覆盖入背景图片的矩形en;
步骤5.3、若n大于或等于字符数,则保存并获得图形验证码,若n小于字符数,则加1后返回至步骤5.2。
与现有技术相比,本发明的有益效果:
准备多个字符集,计算多个字符集中的每个字符集使得其具有随机的大小和颜色,通过本发明字符旋转和局部像素少量水平或垂直位移的随机处理算法,生成多种随机条件的叠加组合,特别是生成的背景图片和字符颜色相近时,不仅使得文字不具规律性并且抵御图片识别软件性能极强,抗机器学习性能显著增强;本发明准备多种大小不一的背景图片,使得最终生成的图片大小不恒定,即验证码数量也不确定,对机器学习造成图像边界难以定义的问题以致其不能发现本发明的生成规律。
附图说明
图1为本发明主要步骤示意图。
具体实施方式
本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。
下面结合附图对本发明做进一步说明:
实施例1
本发明公开一种生成图形验证码的方法,
s1.准备n种字符集{n1},每种字符集的字符的高度和宽度分别为hn、wn;
s2.准备m张像素大小不同的图片作为背景图片;
s3.准备o种颜色,其集合为{o1};
s4.每次生成包含f个文字的验证码时,从{n1}字符集种选取x种字符集,其中x(0<x≤f),其集合为{c},{c}集合中的字符高和宽的集合分别为{hxc}、{wxc};
s5.从m张图片中选取一张图片作为验证码背景图,图片的垂直高不低于{c}集合中的最大值max(hxc),宽度不能低于和∑(wxc),选取图片记为m1;
s6.在验证码背景图m1随机添加线条,形成背景图m2;
s7.依次从{c}集合中随机选取一个字符,逐一做s8-s10的重复处理操作;
s8.对s4步骤中选取的字符,以字符垂直中轴线做-90度~90度范围内的角度旋转;
s9.对s8步骤的结果字体做局部像素随机水平或垂直连续偏移;随机偏移范围,不超过3个像素。
s10.从集合{o1}随机选取颜色of,颜色of作为s9步骤跳出后结果字体的字体颜色;
s11.以文字左上角为原点,坐标为(0,0),水平方向为x轴,竖直方向为y轴,计算出文字的所在最小长方形的右下角坐标为(xc,yc)
s12.所有字符完成s8-s10步骤后的集合为{c2};
s13.把背景图m2水平方向平均分成e份,集合为e1,e2…en…ee;
s14.把集合{c2}中的字符逐一放置到en中,具体方法:xn的长和宽分别为w像素、h像素,以en的左上角的点为原点,在左上角坐标(0,0)~(w-xc,h-yc)的长方形中任意取一点作为c2集合字体的左上角的点,把字符以rgb颜色做像素覆盖到背景图片中;
s15.保存图片。
作为优选,所述一种生成图形验证码的方法,生成的图片大小不恒定。
作为优选,所述一种生成图形验证码的方法,图片中的文字的形状、位置、水平角度和颜色都是随机的。
作为优选,所述一种生成图形验证码的方法,为保证内容识别性,处理过的文字会完全的现实在图片中。偏移不超过3个像素范围,使得字体变形但不超过背景图片范围。
作为优选,所述一种生成图形验证码的方法,将文字随机角度的旋转。
作为优选,所述一种生成图形验证码的方法,将文字局部随机做偏移。
本发明的核心思想是:准备需要使用的不同背景、不同大小的图片,选取过程中考虑字符的高度和宽度,确保文字能正常显示在背景图片中;准备多种字符集为{n1},生成f个字符组成的验证码,从集合{n1}中选取x种字符集作为备选,0<x≤f,f∈{n1},确保验证码的字符集有随机性;准备o种颜色,每个字符的颜色从o种字符中随机选取;字符在-90度~90度范围内做随机旋转;将字符在水平和垂直方向上做像素局部连续偏移;最终随机放置在背景图片中;上述所有步骤的叠加增加机器识别的难度。
实施例2
图1是发明具体实施方式中生成图形验证码的流程图。如图1所示,该生成图形验证码的流程包括以下步骤:
步骤101:开始,需要生成一个包含f个字符的图形验证码;
步骤102:准备多种字符集,包括多种不同的字体,例如:arial、tahoma、宋体、黑体等;从字符集种选取多种种字符集,其中1<x≤f;
步骤103:从多种字符集中随机选取f个字符;
步骤104:根据选取的字符字体大小和验证码选取背景图片,作为画布;
步骤105:在画布中随机写入一些粗细不规的曲线,作为图片噪音;
步骤106:将选取的字符逐一随机做-90度~90度的旋转;
步骤107:将旋转后的字符逐一随机移动局部像素,使字符局部扭曲;
步骤108:再逐一给字符随机选择颜色;
步骤109:最后把字符像素以rgb值覆盖到背景图片中,形成最终的验证码图片;
步骤110:保存图片。
作为优选,所述一种生成图形验证码的方法,生成的图片大小不恒定。
作为优选,所述一种生成图形验证码的方法,图片中的文字的形状、位置、水平角度和颜色都是随机的。
作为优选,所述一种生成图形验证码的方法,为保证内容识别性,处理过的文字会完全的现实在图片中。
作为优选,所述一种生成图形验证码的方法,将文字随机角度的旋转。
作为优选,所述一种生成图形验证码的方法,将文字局部随机做偏移。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何属于本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。