码农知识堂 - 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元,奉上我整理的源码测试

     

  • 相关阅读:
    创业可以做什么项目,六个轻资产创业项目推荐
    常用软件快捷键
    Android 15新特性,强制edge-to-edge全面屏体验
    解决Java Heap Space问题的排查与优化方法
    苹果研究人员提出了一种新颖的AI算法来优化字节级表示以自动语音识别(ASR),并将其与UTF-8表示进行比较
    以激励为导向的配电网分布式电压调节
    治愈系书单|林曦《只生欢喜不生愁》
    loguru 由简入繁
    数据结构算法-回溯算法
    OpenCV笔记--人脸识别算法Eigenfaces和Fisherfaces
  • 原文地址:https://blog.csdn.net/shuilan0066/article/details/126352308
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号