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

您所在的位置:网站首页 code39字体库条码无法扫描 Zint 库:Zint库的编译及使用(二维码QrCode生码),MFC/VC使用实例

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

2024-06-27 03:37| 来源: 网络整理| 查看: 265

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

 

编译:会生成 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。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3