java中ZXing 生成、解析二维码图片的小示例
概述
zxing 是一个开源 java 类库用于解析多种格式的 1d/2d 条形码。目标是能够对qr编码、data matrix、upc的1d条形码进行解码。 其提供了多种平台下的客户端包括:j2me、j2se和android。
实战
本例演示如何在一个非 android 的 java 项目中使用 zxing 来生成、解析二维码图片。
安装
maven项目只需引入依赖:
<dependency> <groupid>com.google.zxing</groupid> <artifactid>core</artifactid> <version>3.3.0</version> </dependency> <dependency> <groupid>com.google.zxing</groupid> <artifactid>javase</artifactid> <version>3.3.0</version> </dependency>
如果非maven项目,就去官网下载发布版本:
生成二维码图片
zxing 生成二维码图片有以下步骤:
1.com.google.zxing.multiformatwriter 根据内容以及图像编码参数生成图像2d矩阵。
2. com.google.zxing.client.j2se.matrixtoimagewriter 根据图像矩阵生成图片文件或图片缓存 bufferedimage 。
public void encode(string content, string filepath) throws writerexception, ioexception { int width = 100; int height = 100; map<encodehinttype, object> encodehints = new hashmap<encodehinttype, object>(); encodehints.put(encodehinttype.character_set, "utf-8"); bitmatrix bitmatrix = new multiformatwriter().encode(content, barcodeformat.qr_code, width, height, encodehints); path path = filesystems.getdefault().getpath(filepath); matrixtoimagewriter.writetopath(bitmatrix, "png", path); }
解析二维码图片
zxing 解析二维码图片有以下步骤:
1.使用 javax.imageio.imageio 读取图片文件,并存为一个 java.awt.image.bufferedimage 对象。
2.将 java.awt.image.bufferedimage 转换为 zxing 能识别的 com.google.zxing.binarybitmap 对象。
3.com.google.zxing.multiformatreader 根据图像解码参数来解析 com.google.zxing.binarybitmap 。
public string decode(string filepath) throws ioexception, notfoundexception { bufferedimage bufferedimage = imageio.read(new fileinputstream(filepath)); luminancesource source = new bufferedimageluminancesource(bufferedimage); binarizer binarizer = new hybridbinarizer(source); binarybitmap bitmap = new binarybitmap(binarizer); hashmap<decodehinttype, object> decodehints = new hashmap<decodehinttype, object>(); decodehints.put(decodehinttype.character_set, "utf-8"); result result = new multiformatreader().decode(bitmap, decodehints); return result.gettext(); }
完整参考示例:测试例代码
以下是一个生成的二维码图片示例:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 详解Java中对象序列化与反序列化
下一篇: Asp.NET 生成静态页面并分页的代码