|
@:onioncn_13)
在我的建议下,海浩的宠物中心终于更改了一个相对难一点的验证码程序了..
吼吼..
在纪念原有的验证码消失的时候,你是否也有心想了解一下识别方法呢?
那就来看看,我最后代码中使用的方法吧:
60宽*20高的像素..源图为BMP..
1.第一步,程序中得到验证图片:
使用wb控件在页面中判断是验证界面时,可以利用tagName方便的枚举出网页中唯一的图片,
为了节省时间,直接将图片对象设置为区域,然后利用剪贴板,转到图片框控件中- Set tImg = wb.Document.getElementsByTagName("img")
- Set tRange = wb.Document.body.createControlRange()
- tRange.Add (tImg)
- tRange.execCommand ("Copy")
- PicYzm.Picture = Clipboard.GetData
- Set tImg = Nothing
- Set tRange = Nothing
复制代码 2.呵呵,原来我的做法是直接去背和去孤点..在和ft(缩写)的讨论中,得知原来4分之1图时,并不会分割开文字,就可以得到
完整且独立的4个文字图片..
分别的起止坐标为:
0,0
15,0
30,0
45,0
大小均为: 15宽*20高(像素)
3.杂色清除: 在独立的文字图块中,文字的色点(像素总数)在不计背景的白色和边框的黑色时,数量是最多的..由此可以利用
此特点得到完整的干净的文字图片:
使用方便的GetPixel这个API,可以迅速的得到每点的颜色RGB值,ScaleMode为pix呵,
Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
不计背景的白色和边框的黑色: 也就是&HFFFFFF,&H0是不记取的.
此时,建立一个和图片长宽相同的2维数组,long型,可以方便快速的利于后面的判断..
此数组中存储对应点的rgb值,并在存储过程中丢弃值为:&HFFFFFF,&H0的颜色..
计算所有出现的颜色中,数量最大值,并再次遍历数组,将非此值的点,全部置为0,反之为1,此时就可以得到一个干净的文字记录
,当然不再是图片形式了,如果你也认为没有必要显示的话..
4.去除边白: 好的做法是写4个函数,用于起始x,y和终止x,y的坐标..然后写入到一个一维字符串中..
例子为起点Y坐标,其它同..- '取起点Y坐标
- Private Function GetStartY(ByRef pix() As Boolean) As Long
- Dim x&, y&
- For y = 0 To pY - 1
- For x = 0 To pX - 1
- If pix(x, y) Then
- GetStartY = y
- Exit Function
- End If
- Next
- Next
- End Function
复制代码 5.到至此,拿到手上的已是一个俗称为字模的字符串了..
写出学习程序,将所有得到的字模与文字一一对应..至此识别程序就完整且准确的实现了..
相对于干扰色在文字之上,或是文字有一点扭曲变形的时候,可以做一套标准字模后,在进行字模比对时,
设置一个相对合适的阀值..就可以在希望的范围内得到相似文字的判断了..
@:onioncn_12)
好了,妮妮的纪念文章首发在海浩呵.. 希望对软件开发人员有一定的帮助呵...有什么疑问可以随时发贴讨论呵.
其它: 部分数字字模..
2=011110110011110011000011001110011000110000111111
3=011110110011000011011110000011000011110011011110
4=000011000111001111011011110011111111000011000011
5=111111110000111110110011000011000011110011011110
6=011110110011110000111110110011110011110011011110
7=111111000011000110000110001100001100011000011000
8=011110110011110011011110110011110011110011011110
9=011110110011110011110011011111000011110011011110
2=011110110011110011000011001110011000110000111111
像什么呢??
011110
110011
110011
000011
001110
011000
110000
111111
@:onioncn_13) 你觉得像什么呢...???
后记: 新的验证码看似变幻莫测..其实仍然是很方便呵.. 在得到gif尾帧图片后.. 和背景色不近似的最高数量
颜色就是文字..如法泡制..写出新的识别程序也方便的..
[ 本帖最后由 妮可宝贝 于 2008-10-11 10:46 编辑 ] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|