一、ZXing介绍及前言
ZXing是Google开发的用于Java,Android的条形码扫描库。
现在的项目中需要加上二维码扫描,虽然使用了第三方库,也还好用,但是对这部分只是还是比较感兴趣,所以研究一下。
二、二维码处理分类
二维码处理分为两部分:编码与解码
编码:使用字符串生成图片。
解码:解析图片中的字符串。
首先明确一个概念:二维码图片存在的形式非常多,文件、纸张、手机、电脑屏幕。在不同的平台上存在的形式是不一样的。
三、生成二维码图片
1、这里需要先引入zxing包,有两种方式,一种是获取源码自己编译,GitHub地址。编辑后打包成jar在导入到自己的项目里使用。
这里只需要编译这两个目录文件即可:如下图
2、第二种使用maven添加依赖
<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.zxing/javase -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.3</version>
</dependency>
</dependencies>
3、生成二维码图片,代码如下:
package com.yhq.test;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @author: Yhq
*/
public class TestApplication {
public static void main(String[] args) {
//设置生个图片格式
String format = "png";
//设置二维码内容
String context = "我爱你中国!";
//设置额外参数
Map<EncodeHintType,Object> map = new HashMap<>();
//设置编码集
map.put(EncodeHintType.CHARACTER_SET,"utf-8");
//容错率,指定容错等级,例如二维码中使用的ErrorCorrectionLevel
map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
//生成条码的时候使用,指定边距,单位像素,受格式的影响。类型Integer, 或String代表的数字类型
map.put(EncodeHintType.MARGIN,2);
try {
//生成二维码,(参数为:编码的内容、编码的方式(二维码、条形码...)、首选的宽度、首选的高度、编码时的额外参数)
BitMatrix encode = new MultiFormatWriter().encode(context, BarcodeFormat.QR_CODE, 300, 300, map);
//生成二维码图片,并将二维码写到文件里
MatrixToImageWriter.writeToPath(encode,format,new File("D:/test.png").toPath());
} catch (WriterException | IOException e) {
e.printStackTrace();
}
}
}
4、在D盘里查看文件:
5、测试一下
至此ZXing3.3.3生成二维码就完成了!!!
下篇文章介绍解析识别二维码,待续。。。。
如果有问题,请在下方评论,或者加群讨论 200909980