大家好,我是微信3分钟学堂的郭立员~
今天要讲的动图验证码并不常见,先来看看它到底长啥样:
和普通验证码的区别是图片上的文字是时隐时现的,通过分析动图的每一帧画面发现,每帧画面至少缺失一个以上的文字,所以无论怎么截图,都无法得到全部文字的图片。
我们要怎么得到包含全部文字的图片,就是今天要讲的内容。
先说一下思路:
截取多张图片,把所有图片上的文字合并到一起,得到全部文字的图片。
怎么实现这个效果呢,过程如下:
(1)连续截取10张图片,分别以1-10命名,方便后续合并图片文字使用。
For i=1 to 10
SnapShot \"/sdcard/pictures/gif/\"&i&\".png\",347,707,732,849
Next
存放图片的路径可以自行设置,这里你可能会有疑问,为啥截图是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,849
Next
Dim path=\"/sdcard/pictures/gif/1.png\"
Dim pic=image.size(path)
Dim x=pic[1]
Dim y=pic[2]
TracePrint x,y
Dim 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
Next
Image.SavePixelData(PixelData,"/sdcard/pictures/gif/a.png")
测试效果:
至于识别图片上的文字,直接对接打码平台即可,不是本文重点省略了。
=正文完=
———END———
站 长 微 信: kind1920
暂无评论内容