码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • windows 下 c++ 二维码生成库


    目录

    一、调研的几个二维码生成库

    1、libqr

    2、QR-Code-generator

    3、libqrencode

    4、优缺点如下:

    二、改造libqr, 不依赖第三方库,直接在项目中,添加.h  .c  就可以生成二维码

    1、实际用到的文件

    2、去除lib生成,便于移植

    3、建立个控制台项目,移植测试

    1)、添加所需文件

    2)、测试代码

    3)生成效果


    一、调研的几个二维码生成库

    调研了几个二维码生成库

    1、libqr

    GitHub - rsky/qrcode: C library and its language bindings to make a QR Code.

    2、QR-Code-generator

    GitHub - nayuki/QR-Code-generator: High-quality QR Code generator library in Java, TypeScript/JavaScript, Python, Rust, C++, C.

    3、libqrencode

    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中,将宏定义置空

    原来:

    1. #if defined(WIN32) && !defined(QR_STATIC_BUILD)
    2. #ifdef QR_DLL_BUILD
    3. #define QR_API __declspec(dllexport)
    4. #else
    5. #define QR_API __declspec(dllimport)
    6. #endif
    7. #else
    8. #define QR_API
    9. #endif

     

    去掉dll宏定义后

    1. #if defined(WIN32) && !defined(QR_STATIC_BUILD)
    2. //#ifdef QR_DLL_BUILD
    3. //#define QR_API __declspec(dllexport)
    4. //#else
    5. //#define QR_API __declspec(dllimport)
    6. #ifdef QR_DLL_BUILD
    7. #define QR_API
    8. #else
    9. #define QR_API

    3、建立个控制台项目,移植测试

    1)、添加所需文件

     

    2)、测试代码

    1. #include "libqr/qr.h"
    2. using namespace std;
    3. int main()
    4. {
    5. int errcode = QR_ERR_NONE;
    6. //qrInit的5个参数分别是version,mode,纠错等级和掩码,使用过程中使用除了QR_EM_8BIT以外的mode会生成不正常的二维码,暂时不知道原因。
    7. QRCode* p = qrInit(10, QR_EM_8BIT, 2, -1, &errcode);
    8. if (p == NULL)
    9. {
    10. printf("error\n");
    11. return -1;
    12. }
    13. string strData = "https://www.gudianxiaoshuo.com";
    14. qrAddData(p, (const qr_byte_t*)strData.data(), strData.length());
    15. //注意需要调用qrFinalize函数
    16. if (!qrFinalize(p))
    17. {
    18. printf("finalize error\n");
    19. return -1;
    20. }
    21. int size = 0;
    22. //两个5分别表示:像素之间的距离和二维码图片的放大倍数,范围都是1-16
    23. qr_byte_t* buffer = qrSymbolToBMP(p, 5, 5, &size);
    24. if (buffer == NULL)
    25. {
    26. printf("error %s", qrGetErrorInfo(p));
    27. return -1;
    28. }
    29. ofstream f("a.bmp");
    30. f.write((const char*)buffer, size);
    31. f.close();
    32. return 0;
    33. }

    3)生成效果

    嫌麻烦的话,可打赏10元,奉上我整理的源码测试

     

  • 相关阅读:
    2-硼酸三苯胺,CAS号:934169-37-6
    图解Bellman Ford算法
    vue 请求代理 proxy
    用DIV+CSS技术设计的个人电影网站(web前端网页制作课作业)
    10个简单好用的Python装饰器
    MySQL索引分类及相关概念辨析
    【Python零基础入门篇 · 6】:Python中的注释、字符串的常见操作、对象的布尔值
    C++ 类和对象 (中)
    对数据进行切片操作slice()函数
    这个Python代码为什么会出现报错呢?正确应该怎么写呢
  • 原文地址:https://blog.csdn.net/shuilan0066/article/details/126352308
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号