大家好,我是公众号3分钟学堂的郭立员~
今天要讲的动图验证码并不常见,先来看看它到底长啥样:
和普通验证码的区别是图片上的文字是时隐时现的,通过分析动图的每一帧画面发现,每帧画面至少缺失一个以上的文字,所以无论怎么截图,都无法得到全部文字的图片。
我们要怎么得到包含全部文字的图片,就是今天要讲的内容。
先说一下思路:
截取多张图片,把所有图片上的文字合并到一起,得到全部文字的图片。
怎么实现这个效果呢,过程如下:
(1)连续截取10张图片,分别以1-10命名,方便后续合并图片文字使用。
For i=1 to 10 SnapShot "/sdcard/pictures/gif/"&i&".png",347,707,732,849Next
存放图片的路径可以自行设置,这里你可能会有疑问,为啥截图是10张,其实10张是随便弄的,具体截几张图,我们是根据截图后,全部图片中文字是不是齐全,以我这个为例,其实1-5张图就包含全部文字了,所以截图5张也可以点图打码怎么玩,为了确保一定能包含全部文字,所以截图10张。
(2)获取图1的颜色信息。
Dim PixelData =Image.GetPicData("/sdcard/pictures/gif/1.png")
我是为了做教程,所以把颜色信息转成json,截图给大家看看点图打码怎么玩,你们如果测试,不需要输出,因为运行这个会比较卡。
(3)分析背景颜色的数值
通过抓抓或者上面颜色信息转换,可以直接到背景颜色RGB的10进制(192,192,192)
(4)合并图片文字的颜色信息
合并的规则是这样,图片1是基准图片,以它的颜色信息为基准颜色,图1文字部分的颜色保留,背景部分的颜色需要替换。
以图1和图2合并文字为例,图1的背景颜色全部用图2同位置的颜色替换。这样图1缺失的文字会被图2补全一些,这里说的是一些,因为有些文字,可能图1、图2都缺失,这种就是没法补全,需要图3-图10去补全。每张图都增添一些新文字,最后补全所有文字。
(5)判断处图片中背景颜色的方法
我们已经知道背景颜色是192,192,192,那么需要做的就是判断每一个颜色是不是等于这个,为了保证容错率,我们不直接用等于,而是一个范围±30吧。
(6)遍历出每一个背景颜色,然后逐个替换成后面的图片。
因为是只替换背景颜色,每次合并后新增的文字都会保留,最终得到所有的文字图片。
完成代码:
For i=1 to 10 SnapShot "/sdcard/pictures/gif/"&i&".png",347,707,732,849NextDim path="/sdcard/pictures/gif/1.png"Dim pic=image.size(path)Dim x=pic[1]Dim y=pic[2]TracePrint x,yDim PixelData =Image.GetPicData("/sdcard/pictures/gif/1.png")For m = 2 To 10 Dim PixelData1 =Image.GetPicData("/sdcard/pictures/gif/"&m&".png") For j = 1 To x For i = 1 To y For k = 1 To 3 If 160 < PixelData[j][i][k] < 220 Then PixelData[j][i][k]=PixelData1[j][i][k] End If Next Next Next NextImage.SavePixelData(PixelData,"/sdcard/pictures/gif/a.png")
测试效果:
至于识别图片上的文字,直接对接打码平台即可,不是本文重点省略了。
=正文完=
———END———
限 时 特 惠: 萌心云每日持续更新海量各大内部创业教程, 点击查看详情
站 长 微 信: 929444
本站内容均转载于互联网,并不代表副业库立场!如若本站内容侵犯了原著者的合法权益,可联系我们进行处理!
拒绝任何人以任何形式在本站发表与中华人民共和国法律相抵触的言论!