Zint 库:Zint库的编译及使用(二维码QrCode生码),MFC/VC使用实例

1.Zint库的使用手册

https://github.s3.amazonaws.com/downloads/zint/zint/zint_manual_242.pdf

大家没事没人会去看这个文档的,因为是英文的而且都是专业术语,一般人看不懂且也不想去看,我们用zint库也就是用来生个码,可能是二维码,可能是一维码等等。但是呢,我建议你通读一遍,不然很可能在使用zint库的时候常常因为某个参数值问题而停滞。

2.zint库的资源下载

下载zint源码:   https://sourceforge.net/p/zint/code/ci/master/tree/

zint库的编译依赖于两个库:zlib和libpng,需要说明的是这两个库是编译才需要,使用时并不需要

下载zlib库源码:  http://www.zlib.net

下载libpng库源码:  https://sourceforge.net/projects/libpng/

三个文件下载后解压并进行改名:

3.编译zlib/lpng库

lpng1637\projects\vstudio\vstudio.sln打开,我用的是VS2015

编译libpng和zlib:编译成功后你可以得到 libpng16.dll libpng16.lib  zlib.lib

如果编译过程中出现找不到文件的错误,请检查文件夹名称是否正确,各个版本的不一样,请参照zlib

在D盘新建一个文件夹opt,并在此目录下新建include,lib两个文件夹,并拷贝文件进来

4.编译zint库

打开:zint-code\win32\zint.sln

libzint增加包含目录:

zint增加附加库目录

zint增加附加依赖库:

在libzint工程下右键,选择添加现有项,选择zint-code\backend目录下所有的.h和.c,然后添加。避免编译出错

如果出现  未定义的标识符 alloc_ ,在出现此问题的*.c文件中增加: #include <malloc.h>

编译:会生成 zintd.dll   libzint.lib

5.VC(MFC)使用Zint库生成二维码(支持中文汉字),并生成bmp文件

动态调用方式需要三个文件:zintd.dll   libzint.lib   zint.h

二维码的设置需要如下几个参数:

scale  放大倍数

option_1 依赖于symbology,不同编码有不同意义

option_2 依赖于symbology,不同编码有不同意义

symbology  编码类型,在手册上有描述,如二维码是58

output_options 有无边框之类的控制

show_hrt 在图片上显示可读信息,如果设置为1,则text必须含有内容。

text 图片上显示的文字信息,配合show_hrt使用。

input_mode 决定编码格式,二进制流,还是ASCII,亦或是UTF8。

#include "zint.h"
#pragma comment(lib, "libzint.lib")

BOOL GenerateBarcode(const char * szText, int len)
{
	struct zint_symbol * symbol;
	int ret = 0;
	
	if (!szText)
	{
		
		return FALSE;
	}
	
	TRY
	{
		symbol = ZBarcode_Create();
		if (symbol != NULL)
		{
			symbol->scale = 2;
			symbol->option_1 = 3; //容错级别
			symbol->option_2 = 10; //版本,决定图片大小
			symbol->symbology = BARCODE_QRCODE;
			symbol->output_options = 0;
			symbol->show_hrt = 0; //可显示信息,如果设置为1,则需要设置text值
			symbol->input_mode = DATA_MODE;
			strcpy(symbol->outfile, "TempQr.bmp");
			ret = ZBarcode_Encode(symbol, (unsigned char *)szText, len); //编码
			if (ret != 0)
			{
				AfxMessageBox(("ZBarcode_Encode err: %s", symbol->errtxt));
				ZBarcode_Delete(symbol);
				return FALSE;
			}
			ret = ZBarcode_Print(symbol, 0); //antate angle 旋转角度
			
			ZBarcode_Delete(symbol);
			return TRUE;
		}else
		{
			AfxMessageBox(("ZBarcode_Create err: %s", symbol->errtxt));
			return FALSE;
		}
	}CATCH(CException, e)
	{
		char szErr[256] = {0};
		e->GetErrorMessage(szErr, 255);
		AfxMessageBox(("GenerateBarcode exception: %s", szErr));
		return FALSE;
	}END_CATCH
}

                                                                

6.专业术语解释

名词解释:

1. Symbol,可以看成是编码之后生成的一张图 
2. Symbology,代表一种编码方法。每种条码都有自己的编码标准。 
3. Linear,应该是长条状的码,例如条形码。 
4. Stacked,包含多个长条状码的码,例如 PDF417 
5. Matrix,二维码,包括 QR、Maxicode 等等 
6. x-dimension,最小模块的大小,通常是最小模块的宽,因为条码的模块大小有固定的长宽比,通过宽就能计算出长。对于条形码来说,x-dimension 表示一列的宽(像素大小);对于二维码来说,x-dimension 表示一个模块的宽(像素大小)

重要参数:

生成QRCODE时会用到的几个参数:

1、TZintSymbol.symbology 条码类型,本例中使用BARCODE_QRCODE,对应的值为58,更多条码类型参考zint.h头文件中的定义

2、TZintSymbol.option_1 容错级别。对应的值为1、2、3、4 ,也就是LEVEL_L、LEVEL_M、LEVEL_Q、LEVEL_H

3、TZintSymbol.option_2 图像大小,取值范围为1 - 40,数值越大生成的图像越大,有些例子称之为版本version。

4、TZintSymbol.input_mode 输入类型,取值范围0、1、2、3、4,分别表示DATA_MODE、UNICODE_MODE、GS1_MODE、KANJI_MODE、SJIS_MODE;默认值为0,即DATA_MODE。建议处理中文时使用DATA_MODE,并将输入内容编码为UTF8。

发布了147 篇原创文章 · 获赞 48 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/sunhuansheng/article/details/105304832
今日推荐