打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

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

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

经过缜密的考虑(谁知道缜密不缜密,反正最后做了这个决定)决定使用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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python使用QRCode模块生成二维码
程序员的乐趣,生成自定义二维码,5行Python代码就搞定
用LARAVEL生成二维码很简单
PHP里QRcode的参数详解--生成二维码
STM32可用的QRCODE二维码生成库
PHP利用PHP QR Code二维码类生成二维码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服