使用Barcode4j和ZXing生成条形码、二维码
xsobi 2024-12-03 19:13 1 浏览
在网上查阅资料,归纳整理了两款处理条码、二维码的开源Java类库:
- Barcode4j
- ZXing
Barcode4j 已经不再维护了,最新的版本是在2012发布的。ZXing,大名鼎鼎、久负盛名。
条码类型说明:
UPC-A类型:国际商品条码。共 12 位数字组成,最后一位是校验码,根据前 11 位数字计算得出,相当于数字0开头的EAN-13码。主要为美国和加拿大使用。而UPC-E类型是其缩短的一种形式。
EAN-13类型:国际商品条码。是当今世界上使用最广的商品条码。共 13 位数字组成,最后一位是校验码,根据前 12 位数字计算得出。是当今世界上广为使用的商品条码,已成为电子数据交换(EDI)的基础。而EAN-8类型是其缩短的一种形式。
Code 39类型:是一种条、空均表示信息的非连续型条码,它可表示数字0-9、字母A-Z和八个控制字符(-、空格、/、$、+、%、·、*)等44个字符,主要用于工业、图书及票证的自动化管理,目前使用极为广泛。而Code 39 Extended是39码的全ASCII形式。使用2个字符可以将128个ASCII全部字符集进行编码。
Code 128类型:对全部128个字符进行编码。通过起始字符选择不同的代码集。A\B\C代表不同的数据范围,A:大写字母+数字,B:大小写字母+数字,C:为偶数纯数字编码,而Auto是根据数据自动选择起始符进行最短编码。UCC/EAN是在Code 128的基础上扩展的应用标识条码、能标识贸易单元中需表示的信息,如产品批号、数量、生产日期等。SCC和SSCC 为细分的AI标识符条码。
ITF-14类型:是Interleaved 2 of 5 类型的一种规范应用,条形码长度没有限制,用5个黑条和5个白条表示2位数字。比其它的 2 of 5 相比密度要高,但是数据必须为偶位数。条码四周的边框为支撑条,其作用为保护条码的识别区域。多使用于UPC标准物流符号及日本的标准物流符号等包装箱印刷中。
二维码类型说明
我的工作经历中,二维码只使用过QR Code,其他几种之前甚至都没有听说过,所以这里不做说明。
QR CODE类型:是由日本Denso公司于1994年9月研制并对全球免费授权使用,是一种矩阵式二维符号编码,信息容量大、可靠性高、可表示多种文字及汉字信息、保密防伪性强等优点。在我国使用率很高,微信和支付宝的收款码都是采用QR类型,在企业溯源查询方面应用也很广,多使用网址链接做跳转查询真伪。
ZXing
ZXing简介
ZXing是Google开发的一个开源Java类库,能够处理多种格式的条码、二维码。
支持的格式
条码(商品) | 条码(工业) | 二维码 |
UPC-A | Code 39 | QR Code |
UPC-E | Code 93 | Data Matrix |
EAN-8 | Code 128 | Aztec |
EAN-13 | Codabar | PDF 417 |
UPC/EAN Extension | ITF | MaxiCode |
RSS-14 | ||
RSS-Expanded |
生成条形码的代码实现
// 条码内容
String content = "6935387130023";
// 条码图片文件名称
String imageName = "条码.png";
// 条码图片宽度
int imageWidth = 70;
// 条码图片高度
int imageHeight = 25;
// 条码配置信息
MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(0xFF000000, 0xFFFFFFFF);
// 生成条码时的一些配置信息
Map<EncodeHintType, Object> hints = new HashMap<>();
// 设置条码两边空白边距
hints.put(EncodeHintType.MARGIN, 1);
// 设置字符编码格式
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
// 生成条码
EAN13Writer writer = new EAN13Writer();
BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.EAN_13, imageWidth, imageHeight, hints);
// 保存条码
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", Paths.get(imageName), matrixToImageConfig);
这里是以EAN-13类型的条码为例,如果想要生成其它类型的条码,只需要将EAN13Writer和BarcodeFormat.EAN_13替换成对应的Writer和类型就好。
生成二维码的代码实现
// 二维码内容
String content = "Hello World.";
// 二维码图片文件名称
String imageName = "qrcode.png";
// 二维码图片宽度
int imageWidth = 300;
// 二维码图片高度
int imageHeight = 300;
// 二维码配置参数
MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(0xFF002FA7, 0xFFFFFFFF);
Map<EncodeHintType, Object> hints = new HashMap<>();
// 设置二维码空白边距为0
hints.put(EncodeHintType.MARGIN, 0);
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
// 生成二维码
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, imageWidth, imageHeight, hints);
// 保存二维码
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", Paths.get(imageName), matrixToImageConfig);
生成的二维码可以自定义颜色,这还可以。但是如果想要生成中间有图片的二维码,在网上找的资料的实现方式,我感觉都不是很好。
生成中间带Logo图片的二维码,查的资料的实现思路大体都是先生成二维码,然后把Logo图片缩放到一定尺寸放在二维码的中间。这种实现方式不美观、优雅。
话说,生成比较好看的二维码,后端代码实现,你有比较好的方案吗?
生成二维码,前端也有实现方案。这是之前笔者写的使用前端开源框架生成二维码的文章:使用vue-qr生成个性化的二维码,有兴趣的可以看下。
Barcode4j
Barcode4j简介
Barcode4j是一个Java开源的条形码类库,也能够生成几种类型的二维码,比如DataMatrix和PDF417,提供了多种输出格式。
支持的格式
条码(商品) | 条码(工业) | 二维码 |
UPC-A | Code 39 | QR Code |
UPC-E | Code 128 | Data Matrix |
UPC-S | Codabar | PDF 417 |
EAN-8 | EAN-128 | |
EAN-13 |
代码实现
String barcodeText = "978020137963";
String fileName = "条码.png";
EAN13Bean generator = new EAN13Bean();
BitmapCanvasProvider canvas =
new BitmapCanvasProvider(160, BufferedImage.TYPE_BYTE_BINARY, false, 0);
generator.generateBarcode(canvas, barcodeText);
BufferedImage bufferedImage = canvas.getBufferedImage();
ImgUtil.write(bufferedImage, Paths.get(fileName).toFile());
BitmapCanvasProvider构造方法参数说明:
/**
*
* @param resolution 生成图片的分辨率
* @param imageType 图片类型
* @param resolution 是否抗锯齿(边缘柔化)
* @param resolution 生成条形码的方向,值可以是0, 90, 180, 270, -90, -180 or -270
*/
public BitmapCanvasProvider(int resolution, int imageType, boolean antiAlias,
int orientation)
要想生成其它类型的条码,只需要将EAN13Bean改成相应的Bean就可以。
- 上一篇:假如有一天 我不再善良………
- 下一篇:基于ZXing.Net生成一维二维码
相关推荐
- 好用的云函数!后端低代码接口开发,零基础编写API接口
-
前言在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作。不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人,通过...
- 快速上手:Windows 平台上 cURL 命令的使用方法
-
在工作流程中,为了快速验证API接口有效性,团队成员经常转向直接执行cURL命令的方法。这种做法不仅节省时间,而且促进了团队效率的提升。对于使用Windows系统的用户来说,这里有一套详细...
- 使用 Golang net/http 包:基础入门与实战
-
简介Go的net/http包是构建HTTP服务的核心库,功能强大且易于使用。它提供了基本的HTTP客户端和服务端支持,可以快速构建RESTAPI、Web应用等服务。本文将介绍ne...
- #小白接口# 使用云函数,人人都能编写和发布自己的API接口
-
你只需编写简单的云函数,就可以实现自己的业务逻辑,发布后就可以生成自己的接口给客户端调用。果创云支持对云函数进行在线接口编程,进入开放平台我的接口-在线接口编程,设计一个新接口,设计和配置好接口参...
- 极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:iN在之前和大家说过,在iN的家里是没有墙面开关的。...
- window使用curl命令的注意事项 curl命令用法
-
cmd-使用curl命令的注意点前言最近在cmd中使用curl命令来测试restapi,发现有不少问题,这里记录一下。在cmd中使用curl命令的注意事项json不能由单引号包括起来json...
- Linux 系统curl命令使用详解 linuxctrl
-
curl是一个强大的命令行工具,用于在Linux系统中进行数据传输。它支持多种协议,包括HTTP、HTTPS、FTP等,用于下载或上传数据,执行Web请求等。curl命令的常见用法和解...
- Tornado 入门:初学者指南 tornados
-
Tornado是一个功能强大的PythonWeb框架和异步网络库。它最初是为了处理实时Web服务中的数千个同时连接而开发的。它独特的Web服务器和框架功能组合使其成为开发高性能Web...
- PHP Curl的简单使用 php curl formdata
-
本文写给刚入PHP坑不久的新手们,作为工具文档,方便用时查阅。CURL是一个非常强大的开源库,它支持很多种协议,例如,HTTP、HTTPS、FTP、TELENT等。日常开发中,我们经常会需要用到cur...
- Rust 服务器、服务和应用程序:7 Rust 中的服务器端 Web 应用简介
-
本章涵盖使用Actix提供静态网页...
- 我给 Apache 顶级项目提了个 Bug apache顶级项目有哪些
-
这篇文章记录了给Apache顶级项目-分库分表中间件ShardingSphere提交Bug的历程。说实话,这是一次比较曲折的Bug跟踪之旅。10月28日,我们在GitHub上提...
- linux文件下载、服务器交互(curl)
-
基础环境curl命令描述...
- curl简单使用 curl sh
-
1.curl--help#查看关键字2.curl-A“(添加user-agent<name>SendUser-Agent<name>toserver)”...
- 常用linux命令:curl 常用linux命令大全
-
//获取网页内容//不加任何选项使用curl时,默认会发送GET请求来获取内容到标准输出$curlhttp://www.baidu.com//输出<!DOCTYPEh...
- 三十七,Web渗透提高班之hack the box在线靶场注册及入门知识
-
一.注册hacktheboxHackTheBox是一个在线平台,允许测试您的渗透技能和代码,并与其他类似兴趣的成员交流想法和方法。它包含一些不断更新的挑战,并且模拟真实场景,其风格更倾向于CT...
- 一周热门
- 最近发表
-
- 好用的云函数!后端低代码接口开发,零基础编写API接口
- 快速上手:Windows 平台上 cURL 命令的使用方法
- 使用 Golang net/http 包:基础入门与实战
- #小白接口# 使用云函数,人人都能编写和发布自己的API接口
- 极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关
- window使用curl命令的注意事项 curl命令用法
- Linux 系统curl命令使用详解 linuxctrl
- Tornado 入门:初学者指南 tornados
- PHP Curl的简单使用 php curl formdata
- Rust 服务器、服务和应用程序:7 Rust 中的服务器端 Web 应用简介
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- strcat (25)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- vs打不开 (29)
- nmap (30)
- webgl开发 (24)
- parse (24)
- c 视频教程下载 (33)
- paddleocr (28)
- listview排序 (33)
- firebug 使用 (31)
- transactionmanager (30)
- characterencodingfilter (33)
- getmonth (34)
- commandtimeout (30)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)