博客开发记录0x03——微信小程序码插件
发布于 3 年前 作者 rsong 1816 次浏览 来自 分享

博客开发记录0x03——微信小程序码插件

小程序二维码的算法没有公开,于是只能自己研究解析算法。这也是我目前编写耗时最久的插件了。🤣

方案简述

微信小程序二维码于2017年面世,长得“犹如一朵盛开的菊花”。其具体生成、解析的算法微信官方没有公开,但是可以直接解析记录具体线条的位置、长度,再以此来还原小程序码。

参考资料

菊花绽放:微信是如何识别小程序码的?

【小程序码-设计篇】菊花绽放

解析步骤

寻找定位点

将图片二值化,沿X轴统计连续的黑/白像素数量,根据长度比例筛选出合适的像素点。
对筛选出来的像素再沿着Y轴、45度再筛一边。最后得到三个定位点。

确定圆心及起始半径

三个定位点呈等腰直角三角形分布,最长边的中点即为圆心。
自直角顶点向圆心遍历,统计每个半径的关键点总数。100%到0%的突变半径即为小程序码线条的起始半径。

解析线条

在72个方向,从起始半径开始,以一定的步长开始采样。统计各方向上定位点的采样数,并以此为该方向的标准长度。最后根据长度比例计算格子数。

解析结果

23;1;1519;1;1277;1;1021;1;8165;1;625;1;763;1;1751;1;7069;1;15;1;7551;1;6677;1;7677;1;7021;1;1057;1;6219;1;157;1;9;1;7;1;31;1;3931;1;1691;1;6899;1;7045;1;1739;1;7895;1;7499;1;15;1;7343;1;1175;1;7787;1;6573;1;6851;1;7119;1;655;1;459;1;

还原

还原结果

因为种种原因,有一些线条的长度偶尔容易出错。不过,小程序码本身有纠错机制,最后的识别效果很好。😁

插件

插件效果

回到顶部