6.生成二维码

一、前言

本文主要介绍如何使用C++来实现二维码的生成,使用到了开源库:qrencode

代码生成结果如下图,完全是可以扫描的:

image-20230924095901582

二、qrencode库的基本使用

如果你目前在使用vcpkg,那就非常简单了,直接运行以下命令进行安装即可:

.\vcpkg.exe install libqrencode:x64-windows

vcpkg的使用教程可以参考另一篇文章:C++开源库配置

如果没有使用vcpkg,那么就需要先下载我编译好的库:qrencode

解压后有一个头文件与一个静态库文件(为 x64 Release 版本):

在这里插入图片描述

使用方法同样参考文章C++开源库配置的手动配置部分。

如果想要尝试自己编译这个库,可以参考这篇文章:windows 编译qrencode库

然后在代码中使用它也非常简单,基本只需要一个函数:

#include"qrencode.h"
#pragma comment(lib,"qrencode.lib")
int main(){
	QRcode* pQRC = QRcode_encodeString("https://www.kucoding.com", 0, QR_ECLEVEL_H, QR_MODE_8, 1);
}

如果使用的vcpkg下载安装,那么直接包含头文件就可以使用了:

#include<qrencode.h>
int main(){
	QRcode* pQRC = QRcode_encodeString("https://www.kucoding.com", 0, QR_ECLEVEL_H, QR_MODE_8, 1);
}

即,我们大部分情况只用得到这个库中的QRcode_encodeString函数,该函数的作用是将字符串编码为符号串并返回,返回的QRcode对象中就包含了二维码的数据

它有5个参数,但事实上除了第一个参数为我们要进行编码的字符串外,其它参数基本就是固定的:

  1. 要进行编码的字符串
  2. 版本,填0即可自动选择
  3. 纠错级别,基本就填这个值,即高级别即可
  4. 编码模式,现在一般都是采用的utf-8进行编码,所以这个值也是固定的
  5. 是否区分大小写,一般也是要区分的,所以基本固定填1

更多详细介绍可以参考官网说明:QRcode_encodeString

编码成功后,它会返回一个QRcode对象,定义如下:

typedef struct {
	int version;         ///< 版本
	int width;           ///< 宽度
	unsigned char *data; ///< 生成的数据
} QRcode;

由于二维码是长宽相等的正方形,所以data的长度为 width*width

后面我们也主要是通过这两个数据来生成我们的二维码

由于他返回的是一个指针,所以使用完后我们还需要调用一个函数来释放内存:

QRcode_free(pQRC);

这里注意一下上面这个data返回的数据格式,其含义是按照来划分的,一个字节(char)有8位

每一位的含义如下(来源于官网):

MSB 76543210 LSB
    |||||||`- 1=black/0=white
    ||||||`-- 1=ecc/0=data code area
    |||||`--- format information
    ||||`---- version information
    |||`----- timing pattern
    ||`------ alignment pattern
    |`------- finder pattern and separator
    `-------- non-data modules (format, timing, etc.)

但事实上,除了第0位,其它位一般我们都用不上,只要第0位为1,就说明该位置应该为黑色,为0则为白色

一般二维码都为黑白色,但后面自己生成二维码图片时,其实是可以更改生成的二维码颜色的

三、BMP图片生成原理

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux