二维码分类及简介: https://blog.csdn.net/qq_29110265/article/details/86521156

QR Code二维码详解: https://coolshell.cn/articles/10590.html
https://blog.csdn.net/liulina603/article/details/42099121

1、说明:
  libqrencode是一个C语言编写的用来生成二维条形码的库,生成的二维条形码可以通过手机的CCD摄像机轻易的扫描出来。此库生成的二维码的容量多达7000个数字或4000个字符,并且具有很强的鲁棒性。

QR二维码示例

  qrencode接受字符串或数据块列表,然后在QR Code符号中编码为位图数组。当其他QR Code应用程序生成图像文件时,使用libqrencode允许应用程序直接从原始位图数据中呈现QR Code符号。该库还包含一个命令行实用程序,可输出各种格式的QR Code图像。

2、规格
  qrencode支持JIS(日本工业标准)X0510:2004或ISO / IEC 18004中描述的QR Code模型2。
该规范中的大多数功能都已实现,例如:

  • 可以嵌入数字,字母,日语汉字(Shift-JIS)或任何8位代码
  • 优化的字符串编码
  • 符号的结构化追加
  • 微型QR码(实验性)

当前不支持以下功能:

  • ECI和FNC1模式
  • QR Code模型1(不建议使用)

3、使用(qt为例)

(1)源代码获取(库)

  项目链接(github):https://github.com/fukuchi/libqrencode

  上面github项目为libqrencode的开发版本。
  官方的稳定版本,参见https://fukuchi.org/works/qrencode/,然后就是说明最新版本是多少。

(2)添加到自己的项目中
  首先将上面下载的源代码中的有用文件拷贝到项目的一个子目录下(自己定义)。

  库代码是c语言写的,然后直接按自己习惯操作,将上面的c库添加到自己的工程项目中,和自己的项目一起编译。

(3)demo代码
主要使用如下函数对内容进行编码:

QRcode* qr = QRcode_encodeString(s.toUtf8(), 1, QR_ECLEVEL_Q, QR_MODE_8, 0);

函数原型:

qt将编码的数据转为QImage,和编码一起封装为函数,代码如下:

QImage encodeImage(const QString& s, int bulk)
{QImage ret;QRcode* qr = QRcode_encodeString(s.toUtf8(), 1, QR_ECLEVEL_Q, QR_MODE_8, 0);if ( qr != nullptr ){int allBulk = (qr->width) * bulk;ret = QImage(allBulk, allBulk, QImage::Format_Mono);QPainter painter(&ret);QColor fg("black");QColor bg("white");painter.setBrush(bg);painter.setPen(Qt::NoPen);painter.drawRect(0, 0, allBulk, allBulk);painter.setBrush(fg);for( int y=0; y<qr->width; y++ ){for( int x=0; x<qr->width; x++ ){if ( qr->data[y*qr->width+x] & 1 ){QRectF r(x*bulk, y*bulk, bulk, bulk);painter.drawRects(&r, 1);}}}QRcode_free(qr);}return ret;
}

如果是使用的标准库,可以使用如下函数将二维码信息生成bmp格式的二维码图片。

void qr_code(std::string _src_str, std::string _dst_bmp_path)
{//参数_src_str是待编码的字符串,_dst_bmp_path是编成二维码后生成的bmp路径名,比如 ./my_qrcode.bmpconst char*     szSourceSring = _src_str.c_str();unsigned int    unWidth, x, y, l, n, unWidthAdjusted, unDataBytes;unsigned char*  pRGBData, *pSourceData, *pDestData;QRcode*         pQRC;FILE*           f;if (pQRC = QRcode_encodeString(szSourceSring, 0, QR_ECLEVEL_H, QR_MODE_8, 1)){unWidth = pQRC->width;unWidthAdjusted = unWidth * 8 * 3;if (unWidthAdjusted % 4)unWidthAdjusted = (unWidthAdjusted / 4 + 1) * 4;unDataBytes = unWidthAdjusted * unWidth * 8;// Allocate pixels bufferif (!(pRGBData = (unsigned char*)malloc(unDataBytes))){exit(-1);}// Preset to whitememset(pRGBData, 0xff, unDataBytes);// Prepare bmp headersBITMAPFILEHEADER kFileHeader;kFileHeader.bfType = 0x4d42;  // "BM"kFileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + unDataBytes;kFileHeader.bfReserved1 = 0;kFileHeader.bfReserved2 = 0;kFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);BITMAPINFOHEADER kInfoHeader;kInfoHeader.biSize = sizeof(BITMAPINFOHEADER);kInfoHeader.biWidth = unWidth * 8;kInfoHeader.biHeight = -((int)unWidth * 8);kInfoHeader.biPlanes = 1;kInfoHeader.biBitCount = 24;kInfoHeader.biCompression = BI_RGB;kInfoHeader.biSizeImage = 0;kInfoHeader.biXPelsPerMeter = 0;kInfoHeader.biYPelsPerMeter = 0;kInfoHeader.biClrUsed = 0;kInfoHeader.biClrImportant = 0;// Convert QrCode bits to bmp pixelspSourceData = pQRC->data;for (y = 0; y < unWidth; y++){pDestData = pRGBData + unWidthAdjusted * y * 8;for (x = 0; x < unWidth; x++){if (*pSourceData & 1){for (l = 0; l < 8; l++){for (n = 0; n < 8; n++){//以下三行是设置三基色,三基色都设置为0x00,则生成的二维码图片就是黑色的了,要什么颜色自己调整*(pDestData + n * 3 + unWidthAdjusted * l) = 0x00;            *(pDestData + 1 + n * 3 + unWidthAdjusted * l) = 0x00;*(pDestData + 2 + n * 3 + unWidthAdjusted * l) = 0x00;}}}pDestData += 3 * 8;pSourceData++;}}// Output the bmp fileif (!(fopen_s(&f, _dst_bmp_path.c_str(), "wb"))){fwrite(&kFileHeader, sizeof(BITMAPFILEHEADER), 1, f);fwrite(&kInfoHeader, sizeof(BITMAPINFOHEADER), 1, f);fwrite(pRGBData, sizeof(unsigned char), unDataBytes, f);printf("qrcode has generated in %s\n", _dst_bmp_path.c_str());fclose(f);}else{printf("Unable to open file");exit(-1);}// Free datafree(pRGBData);QRcode_free(pQRC);}else{printf("NULL returned");exit(-1);}
}

二维码编码库qrencode相关推荐

  1. C/C++二维码生成库qrencode的使用

    1.在 https://fukuchi.org/works/qrencode/ 下载qrencode库,我下的是qrencode-4.0.2.tar.gz版本. 2.为该库生成vs解决方案,这里用到c ...

  2. AB1601移植二维码编码库注意事项

    移植过程中出现编译成功,但连接报错,找不到相关的函数入口. 推测是库方面的问题,在工程中把跟库相关的几个文件增加进来就可以了.具体配置情况如下: #----- SYSTEM -----# cSRC   ...

  3. [2021]Linux下C语言qrencode二维码生成库的基本使用和ARM开发板移植

    文章目录 一.前言 二.准备所用到的环境以及版本信息 1.Ubuntu和内核版本 2.gcc和g++版本 3.交叉编译gcc和g++版本 4.开发板信息 三.开发环境编译&安装qrencode ...

  4. C++二维码相关库编译

    一.瞎想 坐在地铁上闲来无聊,突然想到了二维码,顺手就百度了下相关的资料,目前C++二维码相关的库不多,也就zbar(开源中国上下了半天也没下载下来).zxing,不过这两个库据说都是解析二维码的,不 ...

  5. zbar--对zbar开源二维码解码库的分析

    前言 鉴于网上对zbar这一开源二维码解码库的中文文档较少,刚好做了点这个库的调用,写了点分析笔记,如果有错,望指出批评. 正题 源码内容较多,还多涉及图像算法的内容,于是从其头文件的各注释和函数分析 ...

  6. Java实现二维码编码与解码

    1.构建maven项目,导入对应依赖 这里引用谷歌的zxing包实现二维码的编码与解码,导入依赖如下所示 <!-- 谷歌二维码 --> <dependency><grou ...

  7. libqr--简单好用的c++二维码生成库

    libqr简介 libqr是github上开源的二维码生成库,地址:https://github.com/rsky/qrcode.使用c语言写成,但是用在c++代码里面毫无违和感,api简单好用,自带 ...

  8. 条形码和二维码编码解码工具类源码

    有一个好的工具,会让你的开发事半功倍.再将讲这个工具类之前,我先给小白补充一点条形码和二维码(以下基础知识选自,我本科阶段的一本教材:<物联网导论>(刘云浩 编著).有对物联网感兴趣的,可 ...

  9. 推荐一个开源的 .NET 二维码生成库

    你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,实用的工具和组件,希望对您有用! 介绍 QrCodeGenerator 是开源的 .NET 二维码生成库,它支持从文本字符串和字节数组 ...

最新文章

  1. 怎么用python生成随机数
  2. NoSQL生态系统——类似Bigtable列存储,或者Dynamo的key存储(kv存储如BDB,结构化存储如redis,文档存储如mongoDB)...
  3. tomcat架构分析(valve机制)
  4. Proguard源码分析(五) ConfigurationParser.keep参数
  5. 获取一组radio按钮选中的值Value
  6. 运用Links方法安装插件
  7. Bitmap缩放(二)
  8. Spark Mllib里数据集如何取前M行(图文详解)
  9. [渝粤教育] 郑州工程技术学院 试验设计与数据处理 参考 资料
  10. eclipse svn 分支合并到主干
  11. hadoop之大数据生态系统的前世今生
  12. 【交流学习】厦门大学到福州大禹电子交流超声波水下通讯技术
  13. 在线CRM客户管理系统有好用的吗?这5款千万别错过!
  14. 什么是保健品?保健品引流产品什么样的最好?
  15. 什么是“便携式”应用程序,为什么如此重要?
  16. 蜂窝数据app只剩两个_蜂窝和无线网络探戈需要两个时间
  17. [转]经验分享:微信小程序外包接单常见问题及流程
  18. 设计模式——门面模式
  19. cesium加载接入百度地图(cesium篇.2)
  20. 湖北大学计算机考入清华,697分考入清华却退学,襄阳学霸高考二刷699分!一心入行人工智能...

热门文章

  1. android 流量的统计
  2. Direct2D教程(一)
  3. 气动四自由度机械手结构设计(设计说明书+CAD图纸) 套类零件自动上下料机构
  4. java提取word中的文字,java获取word里面的文本
  5. 国内外几个主流的CMS系统推荐
  6. 国内最优质的10个小众网站,你知道几个?
  7. 基于matlab小波变换的突变检测识别
  8. 2022年全球与中国激光预警系统市场现状及未来发展趋势
  9. HTML Url 编码(Encode 和 Url Decode)
  10. 六个免费网站统计平台工具对比推荐 你的网站统计用哪个