zint|一个开源的条码二维码生成库和生成工具

嵌入式资讯精选 2022-04-07 11:45

一、zint

1. 介绍

Zint是一个软件,允许在任何广泛的公共领域条形码标准中轻松编码数据,并允许将这种功能集成到您自己的程序中。

Zint项目的目标是提供一个完全跨平台的开源条形码生成解决方案,目前包含了:

  • 一个基于Qt的基础GUI
  • 一个命令行工具
  • 一个允许用户调用API使用Zint的库

2. 下载

zint在github的仓库地址为:https://github.com/zint/zint,使用过程中发现github上的版本才到2.4.2,太老了。

zint主要维护的是sourceforge仓库,地址为:https://sourceforge.net/projects/zint/,可以下载到最新的「2.10.0」版本,也可以使用git拉取:

git clone git://git.code.sf.net/p/zint/code zint-code

3. 文档

文档地址为:http://www.zint.org.uk。

二、安装

1. macOS

brew install zint

2. linux(从源码安装)

下载源码:

git clone git://git.code.sf.net/p/zint/code zint-code

提前安装好cmake:

sudo apt-get install cmake

新建编译文件夹:

cd zint
mkdir build

安装:

cd build
cmake ..
make
sudo make install



3. libzint库安装检查

linux默认安装位置:

/usr/local/libzint.so

mac默认安装位置:

/usr/local/lib/libzint.dylib

4. zint工具安装检查

zint -h

三、zint命令行工具的使用

1.输入数据

使用参数输入数据:-d

zint -d "helloworld"

执行之后在当前目录生成图片out.png:也可以直接从文件中读取数据:

zint -i ./hello.txt

2. 输出数据

使用参数指定输出文件名:-o

zint -o hello.png -d "hello world"

3. 选择条形码类型

使用参数指定条形码类型,支持的类型列表可以使用如下列表查看:-b

zint -t



生成二维码(QRCODE):

zint -b 58 -o hello.png -d "hello world"

生成的二维码图片为42x42:

4. 调整图片大小

图片自身大小

条形码通过参数来调整高度。--height=<>

二维码通过参数指定版本来调整大小,版本与大小的对应如下表:--vers=<>

生成版本为4的二维码:

zint -b 58 --vers=4 -d "hello world"

生成的二维码图片为66x66(默认已经放大1倍了):

放大

使用参数和默认x维的倍数来改变图片大小,默认是1,这里修改为2:-scale=

zint -b 58 --vers=4 --scale=2 -d "hello world"

生成的二维码大小为132x132:

四、libzint库

1. 使用方法

使用时需要包含头文件:

#include 

编译时需要带上参数和动态库路径:-lzint

gcc main.c -lzint -Wl,-rpath="/usr/local/lib"

2. 符号类型

symbol结构体中的  symbology 成员表示符号类型。

一维码(BARCODE_CODE128)

单个尺寸的符号通常指条形码,由若干条和若干不同宽度的空白组成。

常用类型是 「Standard Code 128 (ISO 15417)」。这种码支持ASCII全字符,并使用三模系统将数据压缩成较小的符号,是Zint默认使用的符号类型。

二维码(BARCODE_QRCODE)

QRCode全称Quick Reponse COde,由Denso开发。

根据下表设置参数或者设置可以获得四种级别的错误纠正:符号的大小可以使用参数或者通过参数设置需要的二维码版本(1-40),生成的二维码大小如之前的表所示。--secure=option_1--vers=<>option_2

3. API

查询当前libzint库版本

函数原型:

int ZBarcode_Version();

使用示例:

printf("libzint version:%d\n", ZBarcode_Version());

符号结构体创建/删除

(1) 创建并初始化一个符号结构体

 /* Create and initialize a symbol structure */
ZINT_EXTERN struct zint_symbol *ZBarcode_Create(void);

(2) 释放并删除一个符号结构体

/* Create and initialize a symbol structure */
ZINT_EXTERN struct zint_symbol *ZBarcode_Create(void);

生成条形码(默认)

(1) 编码一个条形码:

/* Encode a barcode. If `length` is 0, `source` must be NUL-terminated. */
ZINT_EXTERN int ZBarcode_Encode(struct zint_symbol *symbol, const unsigned char *source, int length);

(2) 使用文件中传入的内容编码一个条形码:

/* Encode a barcode using input data from file `filename` */
ZINT_EXTERN int ZBarcode_Encode_File(struct zint_symbol *symbol, const char *filename);

输出条形码(输出图片)

/* Output a previously encoded symbol to file `symbol->outfile` */
ZINT_EXTERN int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle);


/* Encode and output a symbol to file `symbol->outfile` */
ZINT_EXTERN int ZBarcode_Encode_and_Print(struct zint_symbol *symbol, const unsigned char *source, int length,
                    int rotate_angle)
;

/* Encode a symbol using input data from file `filename` and output to file `symbol->outfile` */
ZINT_EXTERN int ZBarcode_Encode_File_and_Print(struct zint_symbol *symbol, const char *filename,
                    int rotate_angle)
;

输出到缓冲区(位图bitmap)

/* Output a previously encoded symbol to memory as raster (`symbol->bitmap`) */
ZINT_EXTERN int ZBarcode_Buffer(struct zint_symbol *symbol, int rotate_angle);

/* Encode and output a symbol to memory as raster (`symbol->bitmap`) */
ZINT_EXTERN int ZBarcode_Encode_and_Buffer(struct zint_symbol *symbol, const unsigned char *source, int length,
                    int rotate_angle)
;

/* Encode a symbol using input data from file `filename` and output to memory as raster (`symbol->bitmap`) */
ZINT_EXTERN int ZBarcode_Encode_File_and_Buffer(struct zint_symbol *symbol, const char *filename,
                    int rotate_angle)
;

错误码

/* Warning and error conditions (API return values) */
#define ZINT_WARN_INVALID_OPTION        2   /* Invalid option given but overridden by Zint */
#define ZINT_WARN_USES_ECI              3   /* Automatic ECI inserted by Zint */
#define ZINT_WARN_NONCOMPLIANT          4   /* Symbol created not compliant with standards */
#define ZINT_ERROR                      5   /* Warn/error marker, not returned */
#define ZINT_ERROR_TOO_LONG             5   /* Input data wrong length */
#define ZINT_ERROR_INVALID_DATA         6   /* Input data incorrect */
#define ZINT_ERROR_INVALID_CHECK        7   /* Input check digit incorrect */
#define ZINT_ERROR_INVALID_OPTION       8   /* Incorrect option given */
#define ZINT_ERROR_ENCODING_PROBLEM     9   /* Internal error (should not happen) */
#define ZINT_ERROR_FILE_ACCESS          10  /* Error opening output file */
#define ZINT_ERROR_MEMORY               11  /* Memory allocation (malloc) failure */
#define ZINT_ERROR_FILE_WRITE           12  /* Error writing to output file */
#define ZINT_ERROR_USES_ECI             13  /* Error counterpart of warning if WARN_FAIL_ALL set (see below) */
#define ZINT_ERROR_NONCOMPLIANT         14  /* Error counterpart of warning if WARN_FAIL_ALL set */

3. demo

生成条形码

#include 
#include 

int main(int argc, char *argv[])
{
    int ret;
    struct zint_symbol *symbol;

    printf("libzint version:%d\n", ZBarcode_Version());

    symbol = ZBarcode_Create();
    if (!symbol) {
        printf("symbol create fail!(%s)\r\n", symbol->errtxt);
        return -1;
    }

    ret = ZBarcode_Encode(symbol, argv[1], 0);
    if (ret != 0) {
        printf("ZBarcode encode fail, ret is %d(%s)\r\n", ret, symbol->errtxt);
        ZBarcode_Delete(symbol);
        return -1;
    }

    ret = ZBarcode_Print(symbol, 0);
    if (ret != 0) {
        printf("ZBarcode print fail, ret is %d(%s)\r\n", ret, symbol->errtxt);
        ZBarcode_Delete(symbol);
        return -1;
    }

    ZBarcode_Delete(symbol);

    printf("ZBarcode delete.\r\n");

    return 0;
}

编译:

gcc main.c -lzint -Wl,-rpath="/usr/local/lib"

运行:

./a.out helloworld

生成的条形码如图:



生成二维码

添加如下设置类型的代码:

symbol->symbology = BARCODE_QRCODE;

或者

symbol->symbology = 58;

默认生成的二维码图片大小是42x42:

生成指定尺寸的二维码

zint命令行工具使用--vers=<>参数设置需要的「二维码版本」(1-40),调用 libzint 库时「设置 option_2 参数」即可:

symbol->option_2  = 4;

再次编译运行,生成的二维码大小为66x66(默认已经放大1倍了):同时,可以设置放大倍数来进一步调整二维码大小,比如这里设置放大倍数为4:

symbol->scale = 4;

重新编译运行,生成的二维码大小为 264x264:

1.什么是 0 欧姆电阻?

2.难倒C语言高手的枚举细节

3.RISC-V正在采取行动,避免MIPS类的碎片化

4.不同电平信号的MCU之间怎么通信?

5.为什么单片机上的程序不怎么使用malloc,而PC上经常使用?

6.C/C++编码准则,可借鉴的东西还挺多!

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。


嵌入式资讯精选 掌握最鲜资讯,尽领行业新风
评论 (0)
  • 三、芯片的制造1、制造核心流程 (1)晶圆制备:以高纯度硅为基底,通过拉晶、切片、抛光制成晶圆。 (2)光刻:光刻、离子注入、薄膜沉积、化学机械抛光。 (3)刻蚀与沉积:使用干法刻蚀(等离子体)精准切割图形,避免侧壁损伤。 (4)掺杂:注入离子形成PN结特性,实现晶体管开关功能。2、材料与工艺创新 (1)新材料应用: 高迁移率材料(FinFET中的应变硅、GaN在射频芯片中的应用); 新型封装技术(3D IC、TSV硅通孔)提升集成度。 (2)工艺创新: 制程从7nm到3nm,设计架构由F
    碧海长空 2025-04-15 11:33 186浏览
  • 二、芯片的设计1、芯片设计的基本流程 (1)需求定义: 明确芯片功能(如处理器、存储、通信)、性能指标(速度、功耗、面积)及目标应用场景(消费电子、汽车、工业)。 (2)架构设计: 确定芯片整体框架,包括核心模块(如CPU、GPU、存储单元)的协同方式和数据流路径。 (3)逻辑设计: 通过硬件描述语言(如Verilog、VHDL)将架构转化为电路逻辑,生成RTL(寄存器传输级)代码。 (4)物理设计: 将逻辑代码映射到物理布局,涉及布局布线、时序优化、功耗分析等,需借助EDA工具(如Ca
    碧海长空 2025-04-15 11:30 143浏览
  • 时源芯微 专业EMC解决方案提供商  为EMC创造可能(适用于高频时钟电路,提升EMC性能与信号稳定性)一、设计目标抑制电源噪声:阻断高频干扰(如DC-DC开关噪声)传入晶振电源。降低时钟抖动:确保晶振输出信号纯净,减少相位噪声。通过EMC测试:减少晶振谐波辐射(如30MHz~1GHz频段)。二、滤波电路架构典型拓扑:电源输入 → 磁珠(FB) → 大电容(C1) + 高频电容(C2) → 晶振VDD1. 磁珠(Ferrite Bead)选型阻抗特性:在目标频段(如100MHz~1GH
    时源芯微 2025-04-14 14:53 96浏览
  • 展会名称:2025成都国际工业博览会(简称:成都工博会)展会日期:4月23 -25日展会地址:西部国际博览城展位号:15H-E010科士威传动将展示智能制造较新技术及全套解决方案。 2025年4月23-25日,中国西部国际博览城将迎来一场工业领域的年度盛会——2025成都国际工业博览会。这场以“创链新工业,共碳新未来”为主题的展会上,来自全球的600+ 家参展企业将齐聚一堂,共同展示智能制造产业链中的关键产品及解决方案,助力制造业向数字化、网络化、智能化转型。科士威传动将受邀参展。&n
    科士威传动 2025-04-14 17:55 83浏览
  • 一、智能语音播报技术演进与市场需求随着人工智能技术的快速发展,TTS(Text-to-Speech)技术在商业场景中的应用呈现爆发式增长。在零售领域,智能收款机的语音播报功能已成为提升服务效率和用户体验的关键模块。WT3000T8作为新一代高性能语音合成芯片,凭借其优异的处理能力和灵活的功能配置,正在为收款机智能化升级提供核心技术支持。二、WT3000T8芯片技术特性解析硬件架构优势采用32位高性能处理器(主频240MHz),支持实时语音合成与多任务处理QFN32封装(4x4mm)实现小型化设计
    广州唯创电子 2025-04-15 08:53 95浏览
  • 你知道精益管理中的“看板”真正的意思吗?在很多人眼中,它不过是车间墙上的一块卡片、一张单子,甚至只是个用来控制物料的工具。但如果你读过大野耐一的《丰田生产方式》,你就会发现,看板的意义远不止于此。它其实是丰田精益思想的核心之一,是让工厂动起来的“神经系统”。这篇文章,我们就带你一起从这本书出发,重新认识“看板”的深层含义。一、使“看板”和台车结合使用  所谓“看板”就是指纸卡片。“看板”的重要作用之一,就是连接生产现场上道工序和下道工序的信息工具。  “看板”是“准时化”生产的重要手段,它总是要
    优思学院 2025-04-14 15:02 117浏览
  • 四、芯片封测技术及应用场景1、封装技术的发展历程 (1)DIP封装:早期分立元件封装,体积大、引脚少; (2)QFP封装:引脚密度提升,适用于早期集成电路。 (3)BGA封装:高密度互连,散热与信号传输优化; (4)3D封装:通过TSV(硅通孔)实现垂直堆叠,提升集成度(如HBM内存堆叠); (5)Chiplet封装:异质集成,将不同工艺节点的模块组合(如AMD的Zen3+架构)。 (6)SiP封装:集成多种功能芯片(如iPhone的A系列SoC整合CPU、GPU、射频模块)。2、芯片测试 (1
    碧海长空 2025-04-15 11:45 177浏览
  • 一、智能门锁市场痛点与技术革新随着智能家居的快速发展,电子门锁正从“密码解锁”向“无感交互”进化。然而,传统人体感应技术普遍面临三大挑战:功耗高导致续航短、静态人体检测能力弱、环境适应性差。WTL580微波雷达解决方案,以5.8GHz高精度雷达感知技术为核心,突破行业瓶颈,为智能门锁带来“精准感知-高效触发-超低功耗”的全新交互范式。二、WTL580方案核心技术优势1. 5.8GHz毫米波雷达:精准感知的革命全状态人体检测:支持运动、微动(如呼吸)、静态(坐卧)多模态感知,检测灵敏度达0.1m/
    广州唯创电子 2025-04-15 09:20 82浏览
  • 在当今汽车电子化和智能化快速发展的时代,车规级电子元器件的质量直接关系到汽车安全性能。三星作为全球领先的电子元器件制造商,其车规电容备受青睐。然而,选择一个靠谱的三星车规电容代理商至关重要。本文以行业领军企业北京贞光科技有限公司为例,深入剖析如何选择优质代理商。选择靠谱代理商的关键标准1. 授权资质与行业地位选择三星车规电容代理商首先要验证其授权资质及行业地位。北京贞光科技作为中国电子元器件行业的领军者,长期走在行业前沿,拥有完备的授权资质。公司专注于市场分销和整体布局,在电子元器件领域建立了卓
    贞光科技 2025-04-14 16:18 143浏览
  • 一、芯片的发展历程总结:1、晶体管的诞生(1)电子管时代 20世纪40年代,电子管体积庞大、功耗高、可靠性差,无法满足计算机小型化需求。(2)晶体管时代 1947年,贝尔实验室的肖克利、巴丁和布拉顿发明点接触晶体管,实现电子信号放大与开关功能,标志着固态电子时代的开端。 1956年,肖克利发明晶体管。(3)硅基晶体管时代 早期晶体管采用锗材料,但硅更耐高温、成本低,成为主流材料。2、集成电路的诞生与发展 1958年,德州仪器工程师基尔比用锗材料制成世界上第一块含多个晶体管的集成电路,同年仙童半导
    碧海长空 2025-04-15 09:30 109浏览
  •   高空 SAR 目标智能成像系统软件:多领域应用的前沿利器   高空 SAR(合成孔径雷达)目标智能成像系统软件,专门针对卫星、无人机等高空平台搭载的 SAR传感器数据,融合人工智能与图像处理技术,打造出的高效目标检测、识别及成像系统。此软件借助智能算法,显著提升 SAR图像分辨率、目标特征提取能力以及实时处理效率,为军事侦察、灾害监测、资源勘探等领域,提供关键技术支撑。   应用案例系统软件供应可以来这里,这个首肌开始是幺伍扒,中间是幺幺叁叁,最后一个是泗柒泗泗,按照数字顺序组合
    华盛恒辉l58ll334744 2025-04-14 16:09 146浏览
  •   无人装备作战协同仿真系统软件:科技的关键支撑   无人装备作战协同仿真系统软件,作为一款综合性仿真平台,主要用于模拟无人机、无人车、无人艇等无人装备在复杂作战环境中的协同作战能力、任务规划、指挥控制以及性能评估。该系统通过搭建虚拟战场环境,支持多种无人装备协同作战仿真,为作战指挥、装备研发、战术训练和作战效能评估,提供科学依据。   应用案例   系统软件供应可以来这里,这个首肌开始是幺伍扒,中间是幺幺叁叁,最后一个是泗柒泗泗,按照数字顺序组合就可以找到。   核心功能   虚拟战
    华盛恒辉l58ll334744 2025-04-14 17:24 89浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦