windows 下 c++ 二维码生成库
这三个唯一一个不依赖其它库的是 QR-Code-generator, 但缺点也很明显,不支持生成图片, 纯算法, 不生成图片,当然也不依赖第三方库。重点研究的libqr,发现依赖库主要用在生成png TIFF 图片格式上,如果只生成BMP的话,则不需要额外依赖库,所以重点改造了这个库。libqr,因为支持了png,所以有了依赖项目,而我实际工作中,只需要生成BMP就行了。因此,最好只需要头文件 c
目录
二、改造libqr, 不依赖第三方库,直接在项目中,添加.h .c 就可以生成二维码
一、调研的几个二维码生成库
调研了几个二维码生成库
1、libqr
GitHub - rsky/qrcode: C library and its language bindings to make a QR Code.
2、QR-Code-generator
3、libqrencode
4、优缺点如下:
这三个唯一一个不依赖其它库的是 QR-Code-generator, 但缺点也很明显,不支持生成图片 , 纯算法, 不生成图片,当然也不依赖第三方库
其它两个,都支持生成图片
libqr依赖 zlib 、libqrencode依赖的库更多
windows下,用cmake编译很麻烦,必须得有依赖库支持
重点研究的libqr, 发现依赖库主要用在生成png TIFF 图片格式上,如果只生成BMP的话,则不需要额外依赖库,所以重点改造了这个库
二、改造libqr, 不依赖第三方库,直接在项目中,添加.h .c 就可以生成二维码
实际应用中,我只想在我的项目中,添加二维码生成功能
因此,最好只需要头文件 c文件,就能实现最好,不要额外的lib文件、更不要dll文件
这三个库,重点研究了 libqr, 对其改造,实现了所需功能
libqr,因为支持了png,所以有了依赖项目,而我实际工作中,只需要生成BMP就行了
1、实际用到的文件
总的文件如下:

实际用到的如下:

2、去除lib生成,便于移植
修改dll宏
qr.h中,将宏定义置空
原来:
#if defined(WIN32) && !defined(QR_STATIC_BUILD)
#ifdef QR_DLL_BUILD
#define QR_API __declspec(dllexport)
#else
#define QR_API __declspec(dllimport)
#endif
#else
#define QR_API
#endif
去掉dll宏定义后
#if defined(WIN32) && !defined(QR_STATIC_BUILD)
//#ifdef QR_DLL_BUILD
//#define QR_API __declspec(dllexport)
//#else
//#define QR_API __declspec(dllimport)
#ifdef QR_DLL_BUILD
#define QR_API
#else
#define QR_API
3、建立个控制台项目,移植测试
1)、添加所需文件

2)、测试代码
#include "libqr/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 = "https://www.gudianxiaoshuo.com";
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("a.bmp");
f.write((const char*)buffer, size);
f.close();
return 0;
}
3)生成效果

嫌麻烦的话,可打赏10元,奉上我整理的源码测试
更多推荐
所有评论(0)