利用libqrencode生成二维码

关于二维码

Version

二维码一共有40个尺寸。官方叫版本Version。Version 1是21 x 21的矩阵,Version 2是 25 x 25的矩阵,Version 3是29的尺寸,每增加一个version,就会增加4的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高Version 40,(40-1)*4+21 = 177,所以最高是177 x 177 的正方形。
// 21:Version=1,最大字符=17(8.5个汉字)
// 25:Version=2,最大字符=32(16个汉字)
// 29:Version=3,最大字符=49(24.5个汉字)
// 33:Version=4,最大字符=78(39个汉字)
// 37:Version=5,最大字符=106(53个汉字)
// 41:Version=6,最大字符=134(67个汉字)
// 45:Version=7,最大字符=154(77个汉字)
// 49:Version=8,最大字符=192(96个汉字)
。。。

Error Correction Code Level

二维码中有四种级别的纠错,这就是为什么二维码有残缺还能扫出来,也就是为什么有人在二维码的中心位置加入图标。
二维码有4种纠错等级,可恢复的码字比例为:
#define QR_LEVEL_L 0 //7%的字码可被修正
#define QR_LEVEL_M 1 //15%的字码可被修正
#define QR_LEVEL_Q 2 //25%的字码可被修正
#define QR_LEVEL_H 3 //30%的字码可被修正

源码地址

https://fukuchi.org/works/qrencode/
或者
https://github.com/fukuchi/libqrencode
下载源码

添加文件

添加根目录下的c文件和h文件,其中qrenc.c是一些使用例子,不用添加,把所有c文件中的

#if HAVE_CONFIG_H
# include "config.h"
#endif

改成

//#if HAVE_CONFIG_H
#include "config.h"
//#endif

config.h,就是配置文件,其中如下宏要注意

/* Define to 1 if you have the `strdup' function. */
#define HAVE_STRDUP 0

如果没有strdup,就改成0

还有如果内存分配释放不是mallocfree,比如FreeRTOS是pvPortMallocvPortFree,则需对应替换,还有,如果callocrealloc目标平台没有也需要找到相应位置改写。

测试例程

#include <string.h>
#include <stdio.h>
#include <stdint.h>

#include "qrencode.h"
#include "qrspec.h"
#include "mqrspec.h"
#include "bitstream.h"
#include "qrinput.h"
#include "rsecc.h"
#include "split.h"
#include "mask.h"
#include "mmask.h"
 
int main(void)
{
	QRcode*qrcode; //最后结果 
	qrcode= QRcode_encodeString("测试",2, QR_ECLEVEL_L, QR_MODE_8,0);
	
	printf("====version=%d========\r\n",qrcode->version);
	
	for(int y=0;y<qrcode->width;y++)
	{
		for(int x=0;x<qrcode->width;x++)
		{
			if(qrcode->data[y*qrcode->width+x]&0x01)
			{
			printf("1");
			// LCD_SetPixel(x,y,BLACK);
			}
			else
			{
			printf(" ");
			// LCD_SetPixel(x,y,WHITE);
			}
		}
		printf("\n");
	}
	QRcode_free(qrcode);
	printf("\r\n");

    return 0;
}

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值