当前位置:首页 > 嵌入式 > 嵌入式大杂烩
[导读]一、zint1.介绍Zint是一个软件,允许在任何广泛的公共领域条形码标准中轻松编码数据,并允许将这种功能集成到您自己的程序中。Zint项目的目标是提供一个完全跨平台的开源条形码生成解决方案,目前包含了:一个基于Qt的基础GUI一个命令行工具一个允许用户调用API使用Zint的库...

一、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倍了」):

放大

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

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开发。

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

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:

往期推荐:

国产芯片替代STM32的一些经验分享

深入理解嵌入式中重要的编程模型

在公众号聊天界面回复1024,可获取嵌入式资源;回复 ,可查看文章汇总。


点击阅读原文,查看更多分享

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

中国科技公司已经开发出顶尖AI大模型,但和美国及世界其它国家一样,没有人知道如何用AI赚到钱。从OpenAI、Anthropic到谷歌,从深度求索、月之暗面到阿里巴巴、字节跳动,投资都远超收益。

关键字: AI 人工智能 开源 闭源 AI模型

平均年龄约30岁的年轻团队与资深工艺师傅共同打造,面向机械加工企业免费开放 上海2026年7月16日 /美通社/ -- 世界人工智能大会前夕,一支平均年龄约30岁的年轻团队交出了一份答卷——蓝沃AI在沪发布并开源「沃土...

关键字: 开源 模型 AI LEVEL

基于 10 万张真实工厂图纸、36 位从业 20 年以上工艺工程师亲手校验,与老师傅思路契合度超 95%,工艺路线起草提速约 60% 上海2026年...

关键字: AI LEVEL 开源 模型

从开源创新走向更成熟的全球生产实践,异构算力虚拟化与 Kubernetes 原生 GPU 共享调度进入新阶段 上海2026年7月7日 /美通社/ -- 随着 AI 应用从试点走向生产,企业对算力基础设施的关注正在发生变...

关键字: BAT 开源 TI AI

北京2026年6月26日 /美通社/ -- 6 月 25 日,第 21 届开源中国·开源世界高峰论坛在北京中关村展示中心举行。本届大会由开源软件推进联盟(COPU)名誉主席、国际开源领袖奖获得者陆首群发起,...

关键字: 开源 AI 模型 AGENT

在芯片设计领域,Synopsys ICC2/Cadence Innovus 是数字后端(P&R)的事实标准,但其高昂的授权费用将许多学术团队与初创公司拒之门外。OpenROAD 项目旨在提供一套完全开源、License-...

关键字: OpenROAD 开源 数字后端

北京——2026年6月18日 亚马逊云科技宣布,专注于Agent构建、连接与优化的一站式平台Amazon Bedrock AgentCore推出多项新功能,助力企业加速构建拥有更广阔知识和持续学习能力的Agent。这些新...

关键字: AI 开源 模型

北京2026年6月16日 /美通社/ -- 6月16日,亦数智能(北京)科技有限公司(简称亦数智能)在北京经开区(北京亦庄)正式揭牌。该公司聚焦具身智能机器人数据采集、数据存储、数据资产化以及高质量数据集的规模...

关键字: 机器人 数据采集 模型 开源

中国济南2026年6月12日 /美通社/ -- 2026年6月11日,2026信息技术应用创新发展大会在济南成功举行。大会期间,瀚高股份正式发布了面向AI时代的智能数据基座——HigoBase。来自政府、高校、企业、科研...

关键字: 开源 SE GO AI

全面定义大模型长时运行与混沌负载特征,推进行业分工与消费端质量监控标准化 北京2026年6月11日 /美通社/ --  2026年以来,随着Claude Code、OpenClaw等智能体(AI Agent)...

关键字: TOKEN 开源 智能体 模型
关闭