前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >zint | 一个开源的条码二维码生成库和生成工具

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

作者头像
Mculover666
发布于 2021-10-09 08:37:09
发布于 2021-10-09 08:37:09
5K00
代码可运行
举报
文章被收录于专栏:TencentOS-tinyTencentOS-tiny
运行总次数:0
代码可运行

一、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拉取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone git://git.code.sf.net/p/zint/code zint-code

3. 文档

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

二、安装

1. macOS

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
brew install zint

2. linux(从源码安装)

下载源码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone git://git.code.sf.net/p/zint/code zint-code

提前安装好cmake:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install cmake

新建编译文件夹:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd zint
mkdir build

安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd build
cmake ..
make
sudo make install

3. libzint库安装检查

linux默认安装位置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/usr/local/libzint.so

mac默认安装位置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/usr/local/lib/libzint.dylib

4. zint工具安装检查

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zint -h

三、zint命令行工具的使用

1.输入数据

使用-d参数输入数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zint -d "helloworld"

执行之后在当前目录生成图片out.png:

也可以直接从文件中读取数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zint -i ./hello.txt

2. 输出数据

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zint -o hello.png -d "hello world"

3. 选择条形码类型

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zint -t

生成二维码(QRCODE):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zint -b 58 -o hello.png -d "hello world"

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

4. 调整图片大小

图片自身大小

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

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

生成版本为4的二维码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zint -b 58 --vers=4 -d "hello world"

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

放大

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zint -b 58 --vers=4 --scale=2 -d "hello world"

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

四、libzint库

1. 使用方法

使用时需要包含头文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <zint.h>

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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>参数或者设置option_1可以获得四种级别的错误纠正:

符号的大小可以使用--vers=<>参数或者通过option_2参数设置需要的二维码版本(1-40),生成的二维码大小如之前的表所示。

3. API

查询当前libzint库版本

函数原型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int ZBarcode_Version();

使用示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
printf("libzint version:%d\n", ZBarcode_Version());
符号结构体创建/删除

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 /* Create and initialize a symbol structure */
ZINT_EXTERN struct zint_symbol *ZBarcode_Create(void);

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* Create and initialize a symbol structure */
ZINT_EXTERN struct zint_symbol *ZBarcode_Create(void);
生成条形码(默认)

(1) 编码一个条形码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* 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) 使用文件中传入的内容编码一个条形码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* Encode a barcode using input data from file `filename` */
ZINT_EXTERN int ZBarcode_Encode_File(struct zint_symbol *symbol, const char *filename);
输出条形码(输出图片)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* 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)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* 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);
错误码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* 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

生成条形码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <zint.h>
#include <stdio.h>

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;
}

编译:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gcc main.c -lzint -Wl,-rpath="/usr/local/lib"

运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./a.out helloworld

生成的条形码如图:

生成二维码

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
symbol->symbology = BARCODE_QRCODE;

或者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
symbol->symbology = 58;

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

生成指定尺寸的二维码

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
symbol->option_2  = 4;

再次编译运行,生成的二维码大小为66x66(「默认已经放大1倍了」):

同时,可以设置放大倍数来进一步调整二维码大小,比如这里设置放大倍数为4:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
symbol->scale = 4;

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Mculover666 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java生成二维码
/** * */ package com.spg.test; /** * 项目名称:weixinpay * * @description:二维码生成<br> * 注意生成二维码和解析过程中的编码必须为GBK,否则解析过程会出错。 * * @author spg * * @create_time:2014年5月20日 上午11:26:27 * * @version V1.0.0 * */ import java.awt.Col
大师级码师
2021/09/19
5120
Excel催化剂开源第26波-Excel离线生成二维码条形码
在中国特有环境下,二维码、条形码的使用场景非常广泛,因Excel本身就是一个非常不错的报表生成环境,若Excel上能够直接生成二维码、条形码,且是批量化操作的,直接一条龙从数据到报表都由Excel完成,是一个非常不错的解决方案。
Excel催化剂
2021/08/19
4960
每天都扫的二维码,你知道它的技术原理吗? 每天都扫的二维码,你知道它的技术原理吗?
二维码已经成为我们日常生活中必不可少的组成部分了,登录需要扫一扫二维码、买东西付钱需要扫一扫二维码、开会签到也需要扫一扫二维码,那么如此广泛使用的二维码技术,背后的原理是怎样的呢?本文将结合二维码的发展历程以及典型应用场景,分析二维码背后的技术原理。
慕枫技术笔记
2023/03/20
3.1K0
每天都扫的二维码,你知道它的技术原理吗?
每天都扫的二维码,你知道它的技术原理吗?
使用Python生成自己的特色二维码
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。
星星在线
2020/05/22
6160
前端生成二维码和条形码,不能不知道的两个库
二维码和条形码在我们日常生活中可以说是处处可见,我们已经离不开他们了,无论是健康宝行程码,还是购物支付公交车
程序员老鱼
2022/12/02
2.2K0
Vue前台可以生成二维码了,您还在用后台生成吗?
  简介:维码现在已经随处可见了,现在的生活中各种二维码呈现在大家面前,方便大家手机或者手持枪等手持设备进行识别,同时用来标识当前商品或者物品的唯一性。 我们在工业等生产制造业用到的二维码更多,像部品、BOM组件等等。 所以我们无论是做BS开发或者客户端开发,有时用到生成二维码的时候还是比较多的。 以前用java或者.net等后端语言进行生成,前台其实也是可以生成二维码,今天我们看一下vue前台生成二维码。
十分钟空间
2022/08/17
8090
Java实现二维码的生成与解析
生成二维码: 使用ZXing库,您可以轻松地生成二维码。首先,您需要引入ZXing库到您的项目中。然后,您可以使用ZXing提供的API来创建二维码图像,并将所需的信息(例如文本、链接等)编码到二维码中。最后,将生成的二维码保存为图像文件或以其他方式展示出来。
知识浅谈
2024/05/25
7150
(WEB集成CAD插件)网页CAD绘制条形码、二维码的教程
绘制条形码需要根据不同的应用场景选择适当的条形码标准,如常见的 codabar 、CODE30、CODE128等,每一种条形码标准都有它特定的数据编码规则,调用这些编码规则进行数据编码时会将数据字符按照所选编码规则转换成条和空的组合(一组二进制数据)。不同的条形码标准使用不同的编码规则来表示0到9的数字或26个英文字母。
梦想云图网页CAD
2025/01/20
780
(WEB集成CAD插件)网页CAD绘制条形码、二维码的教程
pyzbar 二维码、条形码识别
利用python的第三方模块 pyzbar 可以很方便的进行二维码的识别(也能识别条形码,用法别无二致)。
用户6021899
2019/10/09
5.8K0
pyzbar 二维码、条形码识别
基于zxing的二维码扫描
现在的应用中二维码扫描已经成为一个应用必不可少的功能,现在大部分Android二维码扫描都是基于zxing和Zbar,这文章就来介绍一下基于zxing的二维码扫描。先看下效果图
g小志
2018/09/11
4.1K0
基于zxing的二维码扫描
java——记录一次条形码、二维码、订单自动生成的制作
链接:https://pan.baidu.com/s/12mJTx7TkbK2HiWDgcT_jbQ 提取码:di1y
不愿意做鱼的小鲸鱼
2022/09/26
1.3K0
java——记录一次条形码、二维码、订单自动生成的制作
java生成二维码,微信直接扫描出结果
二维码在我们的生活中随处可见,作为程序员的我们,有没有想过自己生成一个二维码玩玩呢,其实很简单,我们直接用谷歌提供的com.google.zxing就可以了。
公众号 IT老哥
2020/12/15
2.3K0
Java 骚操作--生成二维码
好久没发布博客了,今天发了一个Java工具类,突然发现草稿箱竟然还有以前的存货,一次性发了!!! 目录 1.二维码概念  2.二维码发展历史  3.二维码分类  4.二维码优缺点  5.QR Code  1.二维码又称  二维条码 (2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维码上)分布的黑白相间的图形记录数据符号信息的图形。 2二维码发展历史  1.20世纪20年代 约翰 科芒德实现邮政单据自动分拣方法,  2.1949年美国乔 伍德兰德 伯尼西尔沃发明第一
房上的猫
2018/05/17
9910
如何在线生成二维码?
一、介绍 说到二维码,我相信大家每天都会用到,尤其是在手机支付的场景,使用频率极广。 实际上二维码在1994年的时候就已经诞生了,由 Denso 公司研制而成,只是那个时候使用范围还不是很大。 早期的二维码由于很容易通过技术方式进行伪造,因此很少有企业愿意去使用他,随着技术的不断迭代和更新,二维码的安全性更进一步得到了提升,从而使得更多的企业愿意使用这项新技术,例如当下的移动支付,还有微信互推,扫码出行等等,极大的方便了网民们的购物、社交和出行! 在实际的业务开发过程中,二维码的使用场景开发也会经常出现在我们开发人员的面前,我们应该如何去处理呢,今天小编就带着大家一起深入的了解一下它的技术实现过程。 二、代码实践 在 Java 生态体系里面,操作二维码的开源项目很多,如 SwetakeQRCode、BarCode4j、Zxing 等等。 今天我们介绍下简单易用的 google 公司的 zxing,zxing 不仅使用方便,而且可以还操作条形码或者二维码等,不仅有 java 版本,还有 Android 版。 开源库地址:
Java极客技术
2022/12/02
1.3K0
如何在线生成二维码?
iOS_从相机或相册里扫描二维码或条形码
遵循 AVCaptureMetadataOutputObjectsDelegate 协议,实现扫描回调方法:
mikimo
2023/10/18
5140
Java生成读取条形码和二维码图片
生成条形码,二维码图片,解析条形码,二维码图片的工具类,需要用到的jar包:core.jar,zxing-javase.jar
用户8983410
2021/09/23
1.2K1
ZXing 生成、解析二维码图片的小示例
静默虚空
2018/01/05
2.2K0
python生成二维码(一)
常见的二维码为QR Code最早于1994年被日本公司Denso Wave的腾弘原发明并且由原来的条形码改造而来,相比条形码数据能力存储能力都大大提升。
李小白是一只喵
2020/04/24
6720
如何制作商品条码标签、二维码防伪标签?分享快速
商品条码标签又称产品标识,用于识别产品及其质量、数量、特征和使用方法所做的各种标识的总称,简单理解之即包装卡片上的文字、图形、符号及一切说明。如条形码、文本、二维码、图片、Excel、txt文本、等等外部数据源导入等。
用户6457849
2019/10/17
1.8K0
Java实战:Java使用Zxing二维码生成案例
二维条形码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值内容信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。二维码具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化等特点。
小明互联网技术分享社区
2023/11/13
9250
Java实战:Java使用Zxing二维码生成案例
推荐阅读
相关推荐
java生成二维码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文