一起学习二维码(一)生成自己的二维码

小白最近需要做一个和二维码相关的项目,因此近期小白会陆陆续续的为大家带来一些和二维码相关的分享。

关于二维码的背景,相信很多小伙伴都比较了解了,即使不是很清楚,也每天都在使用二维码,因此这里小白就先不讲“绪论”和“引言”了,直接切入主题了。

小白需要将项目中的部分信息融入到二维码中,之后再进行解码,因此首先第一步就是如何生成指定信息的二维码。这部分其实比较容易,因为网上有很多在线的二维码生成软件,直接输入就可以,效果有时会比自己生成的更加理想。但是为了项目的整体性,因此,还是有必要自己写一个程序能够生成自己想要的二维码。

经过缜密的考虑(谁知道缜密不缜密,反正最后做了这个决定)决定使用QR二维码。小白决定使用libqr库来实现自己生成二维码。选好开源库,接下来就开始安装吧。

这里特别说明,小白使用的是window10+Visual Studio 2013环境

小白也是参考网上的教程进行安装,程序比较复杂,小白重新梳理了一遍。

下 载 源 码

这里需要下载两个安装包,一个是libqr库的源码,另一个是其依赖库zlib。由于后续的操作比较复杂,小白这里建议将两个文件单独放在一个文件夹下。

对于libqr可以通过github进行下载:https://github.com/rsky/qrcode

Zlib库需要用源码进行编译,也可以使用已经编译好的库。小白建议直接使用编译好的库即可,这样可以避免在编译库的时候出现问题。

已编译好的库下载地址:https://pan.baidu.com/s/1nuErVtv (小白亲测这里面的zlib库是可以使用)

下载好后我们需要进行一点点小小的改动,进入libqr文件夹下,找到CMakeList.txt文件夹,修改对zlib引用的目录。将源文件的22-24行注释掉,在原处增加以下内容:

#find_package(ZLIB)
#set my own zlib path
set (ZLIB_INCLUDE_DIRS "")  #set in visual studio
set (ZLIB_LIBRARIES "")     #set in visual studio

#add_definitions(-Wall -Wextra)
# Set default compile flags for GCC
if(CMAKE_COMPILER_IS_GNUCXX)
message(STATUS "GCC detected, adding compile flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98 -pedantic -Wall -Wextra")
endif(CMAKE_COMPILER_IS_GNUCXX)

安 装 libqr 库

上面的工作完成啦,之后要进行安装,不过由于需要用到cmake进行编译,因此我们这里还得下载cmake。具体网址如下:

64位: https://cmake.org/files/v3.9/cmake-3.9.1-win64-x64.msi

32位: https://cmake.org/files/v3.9/cmake-3.9.1-win32-x86.msi

根据自己的系统选择不同的版本,之后进行安装,在安装选择变量环境的时候直接选择最下面的一项(由于小白已经安装了,无法再次安装,不能给小伙伴放图了)。安装成功后去看看有没有正确安装,有没有加入环境变量里。按“win+R”,之后输入“cmd”,会出现如下界面:

输入“cmake”,出现如下界面表示正确安装,如果没有出现如下界面,建议小伙伴重新安装时重新配置环境变量,或者百度一下如何添加环境变量。

安装好后就开始编译,首先进入qrcode的libqr目录下,执行”cmake .”,这个命令的意思是编译刚才我们修改后的CMakeList.txt文件。,之后相同目录下生成VS的项目文件,如下:

配 置 环 境

之后配置动态库和VS项目的环境。打开libqr_shared.vcxproj,打开后,我们会看到如下的界面。

右键进入属性界面,按照如下步骤进行操作(这里小白说明一下,由于小白已经配置成功,且配置过程个人觉得比较麻烦,为了节省时间,本文的配置环境直接引用参考文章内容,侵删)

  • 设置预处理 QR_DLL_BUILD (如果是编译静态库项目libqr_static则设置为 QR_STATIC_BUILD)

  • 之后设置我们下载的zlib库文件和lib目录,这里,我们将文件夹下的include复制到qrcode文件夹下,将Release(或者Debug)复制到qrcode里面的lib文件夹下(没有自己创建)。之后进行如下操作:

之后进行编译即可。

在编译过程中可能会出现一些报错,例如:

编译时可能会提示 error LNK2019: 无法解析的外部符号 _snprintf 错误,我们替换所有snprintf为_snprintf,vsnprintf为_vsnprintf就可以了

有的小伙伴可能会出现无法找到或者打开m.lib文件的情况,我们直接将附加依赖项中的m.lib删除就可以了。

生 成 二 维 码

所有的配置都大功告成,接下来开始写程序生成我们需要的内容,程序具体如下:

#include <stdio.h>
#include <fstream>
#include "qr.h"

using namespace std;

int main()
{
   int errcode = QR_ERR_NONE;
   //qrInit的5个参数分别是version,mode,纠错等级和掩码,使用过程中使用除了QR_EM_8BIT以外的mode会生成不正常的二维码,暂时不知道原因。
   QRCode* p = qrInit(10, QR_EM_8BIT, 2, -1, &errcode);
   if (p == NULL)
   {
       printf("error\n");
       return -1;
   }
//下面进入程序最重要的部分
//下面进入程序最重要的部分
//下面进入程序最重要的部分

string strData = "快来关注“小白学视觉吧”";//这句话是重点哦

//最重要的部分结束
//最重要的部分结束
//最重要的部分结束
   qrAddData(p, (const qr_byte_t*)strData.data(), strData.length());
   //注意需要调用qrFinalize函数
   if (!qrFinalize(p))
   {
       printf("finalize error\n");
       return -1;
   }
   int size = 0;
   //两个5分别表示:像素之间的距离和二维码图片的放大倍数,范围都是1-16
   qr_byte_t * buffer = qrSymbolToBMP(p, 5, 5, &size);
   if (buffer == NULL)
   {
       printf("error %s", qrGetErrorInfo(p));
       return -1;
   }
   ofstream f("qrcode.bmp");
   f.write((const char *)buffer, size);
   f.close();
   return 0;
}

编译通过,没有任何问题,运行,报错,没有找到zbar.dll。我们需要进行最后一步操作,将zbar.dll和qr.dll放到程序源码所在的文件夹内就可以成功编译了。图如下:

运行后生成我们想要的二维码,小伙伴可以拿出手机扫描一下,验证一下是否是我们输入的内容。

后续小白还要对这个二维码进行修改,中间加上图片,以及对二维码通过程序解码,相关的内容小白会陆续的和小伙伴们分享。

小白在安装的时候主要参考以下博客:

https://blog.csdn.net/qq_35583007/article/details/78874524

(0)

相关推荐

  • 利用JS生成二维码图片,优化WEB性能及页面加载速度 | 张戈博客

    一.意淫场景 2年前接触网站建设后,二维码也进入了我折腾的范围,当时意淫了这样一个场景:当用户首次在别人电脑上看到我们的网站时,突然有事要离开,但是这个网页内容很赞,实在难以割舍,他该怎么办? 我继续 ...

  • 分享张戈博客自用的php网址在线转换二维码的API源码 | 张戈博客

    朗读本文 最新补充:博客已分享性能最好的js生成二维码方案==>传送门 去年张戈博客曾分享过一篇与二维码API有关的文章:<分享几个可用的二维码API,以及给博客添加文章二维码图片的方法& ...

  • PHP利用PHP QR Code二维码类生成二维码

    这里PHP使用生成QR码的php类库PHP QR Code. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <?php   ini_set('display_ ...

  • 用 Python 生成炫酷二维码及解析

    说到二维码大家一定不陌生,可以说现在二维码几乎渗透到了我们生活的各个角落,举例来说吧,我们到超市商场购物时扫描二维码付款,我们出行时乘坐公交地铁扫描二维码进站,我们到菜鸟驿站取件时扫描二维码取件,如果 ...

  • 用LARAVEL生成二维码很简单

    第一步,安装扩展插件 composer require simplesoftwareio/simple-qrcode 第二步,注册扩展包 config/app.php 'providers' => ...

  • Excel自带控件批量生成条形码或二维码

    ▎具体需求 根据A列信息,批量生成二维码或者条形码. ▎思路分析 我们这里使用Excel自带的二维码条形码控件搭配VBA,实现批量生成的效果. ▎具体步骤 ①由于二维码控件不是默认控件,需要单独找到添 ...

  • 二维码离线生成工具PsQREdit

    朗读本文 智能机普及的同时,二维码也跟着火了,不知道各位看官跟上节奏了没?比如下面这个图,你扫过没? 好吧,我承认我又打广告了...咳咳咳,赶紧进入正题了.. 二维条码/二维码(英文名:QR Code ...

  • phyphox离线二维码的生成

    前一段时间phyphox官网可能正维护,也可能是封网,总之是phyphox网站上不去了.那时候大家正研究使用手机音频口作为示波器,比如通过音频口测心电图.通过音频口测量交流低压信号等实验. 但是因为p ...

  • 二维码的生成原理和工作原理

    二维码由来 在1994年,这个类似于一个正方形马赛克的图片由日本DENSO WAVE公司发明----两位程序员为了追踪汽车零部件而设计.而现在,应用更为广泛的是由美国人设计的pdf417,datama ...

  • 到你的城市,刷我的码!北上广地铁二维码通用啦

    今天(5月12日)起 北京.广州地铁乘车 实现二维码互通了! 使用"亿通行App" 或"广州地铁App" 均可乘坐两地的地铁 到你的城市 刷我的二维码 网友表示 ...

  • 三维码来了!与二维码明显不同,将难以复制

    三维码来了!与二维码明显不同,将难以复制

  • 二维码软件之彩色流水号二维码的制作

    黑白色的QR,Date Matirx, Maxi Code等二维码类型,我们已经屡见不鲜.颜色出挑,容易夺人眼球的彩色二维码(彩码)日渐多了起来. 彩码好看也容易做,制作方法如下: 1.启动软件,二维 ...