C++:如何制作高逼格二维码

在网上看到一个制作高逼格二维码的文章,来源http://www.chenxublog.com/2016/05/22/pic-qrcode-colorful.html
步骤那可是相当的复杂,一堆软件各种ps啊什么的,不过根据实现的效果一看,原理貌似很简单嘛,何必弄那么复杂,于是我用代码实现了一个,本文着重介绍原理。编译后的程序在最下面,不过建议使用前先看过去,否则可能你不会用2333
先来几张图你们感受下,支付宝:
zfb

微信:
wx

首先是二维码的原理,通过一个图片里面的4个定位块进行定位,有的定位块是9个。如下图示例:
zfb

我这儿只说说4个定位块的二维码,因为9个定位块的代码我还没实现2333其中左上角、左下角、右上角是三个大的定位块,分别有8*8的大小,右下角有个小的定位块有5*5。除了定位块外还有用于计算二维码宽高的标志位,分别位于第6行与第6列,这个标志位颜色为黑白相间。

由于识别二维码的代码网上没找到(没找到VS2013能编译的、有效的代码,如果谁有的话告诉我一声2333),所以嘛,就有点麻烦了。比如这个二维码:
zfb

这个二维码有三个问题,颜色不是黑色、中间一小块读取的数据是错的、上下左右都有很大的边距。虽然通过较正位可以较正中间错误的色块但这不是没源码嘛。稍微有点麻烦,需要先转一下。

首先来草料二维码扫描器,将二维码解析出来,然后来草料二维码生成器,生成新二维码。通过转换,可以得到准确色块的二维码。

然而这二维码并不怎么准确2333,新生成的二维码里面的黑色或白色的方块,有的宽高为7,有的宽高为6,只能说大体上准确。这就稍微麻烦了,我之前是用直接填数字的方法不过这方法很不好用,于是用代码加了个简单识别宽度的代码,方便朋友们使用。

然后就是一堆比较中庸的代码,总的来说就是提取二维码像素,然后转为类似下面这样的图片(标识色块全部保留,其他色块只保留色块正中间的一个像素,其余的像素全部透明):
zfb2

这种图片弄出来之后,然后就需要找一个动态gif图片,每帧给绘制一遍上面这图片,然后保存,大概如下图这样:
bg
zfb

在此之前,还需要把GIF图片保存下来。GDI+好像没有直接保存的功能,于是使用了一个网上的保存GIF实现:C++ GDI+ 多张图片合并生成GIF动画格式图片

源代码比较杂乱,所以不贴了,如果有需要请到github上面下载。

源代码下载地址:https://github.com/fawdlstty/hm_QRcode

已编译程序下载地址(Win32平台):https://github.com/fawdlstty/hm_QRcode/releases

发布者

fawdlstty

又一只萌萌哒程序猿~~

《C++:如何制作高逼格二维码》上有7条评论

  1. 下载编译好的程序 使用文章中的二维码和动图,生成的图片是 全黑的

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注