2017年12月8日

带图片的彩色二维码生成

作者 非鱼

某天同事来找我,说有个朋友开发了一套带图片的彩色二维码生成技术,问我对于商业化的方案有没有什么建议,还有之前有一家国外的公司做这个的,被阿里投资了,所以现在淘宝管理后台就可以直接生成这种技术,还发了一个网站过来,国内的一家公司,把这个东西称为“三维码”,对个人卖300块一个码,对企业卖800块一个码。

虽然两年多前就见过这种码,对于它是怎么生成的确实没怎么关心,但既然支持传统的扫码方案和设备,那说明它本身还是个标准的二维码。于是就尝试搜索了一下,结果,就TMD找到了四个开源项目。前两个生成出来的图片中间有横竖两条黑白间隔的线,我还以为是必须保留的二维码关键标识,但后面的两个项目生成出来的就没有,漂亮多了。

于是下载了Python版本的代码,测试了一下效果,然后读了一遍Java版和Python版的代码,开始动手写一个自己的C#版。

写的过程中遇到了一些问题,主要是Python里面用到的二维码生成的qrencode包和图像处理的Image包,直接使用了其中的一些方法,而且有一些参数直接固化了,比如box_size=3, version=5,还有像图像的convert(‘L’)这种。一个一个去搜索这个方法的实现,然后修改了C#版的二维码生成库的源码,支持手动选择version和box_size参数,然后实现自己的图片转灰度算法,基本上就直接匹配了Python代码的流程。顺便优化掉了他的代码里的一些重复生成图像和处理的过程,整体效率高了不少,生成过程不会明显等待了。

然后做了个简单的winform客户端,加了个设置保护区域可以防止人脸被盖住的功能,就完工了。

差不多就是这种效果: