Java开发二维码(一) 使用zxing开发
二维码概念:二维条码/二维码(2-dimensional bar code)使用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的图形。
二维码分类:1.线性堆叠式二维码
2.矩形式二维码
3.邮政码
优点: 1.高密度编码
2.编码范围广
3.容错能力强
4.译码可靠性
5.可引入加密措施
6.成本低,易制作,持久耐用
缺点:1.二维码技术成为手机病毒、钓鱼网站的新渠道
2.信息泄露
Java生成二维码的方法:
1.借助第三方jar包:如zxing(谷歌研发)、qrcodejar
2.JavaScript,如jquery.qrcode.js
目前流行的三大国际标准:
1.PDF417:不支持中文;
2.DM:需要支付专利费用
3.QR code:专利公开,支持中文
(QR code与其他二维码相比,具有识读速度快、数据密度大、占用空间小的优势)
zxing地址:https://github.com/zxing/
下载后将zxing进行解压,将core和javase中的包通过eclipse导出jar包
代码如下:新建一个java项目
生成二维码:
package com.itstar.zxing;
import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
/**
*生成二维码
*
*/
public class CreateQRCode {
public static void main(String[] args) {
int width = 300;
int height = 300;
//制定图片格式
String format="png";
//内容
String content = "www.baidu.com";
//定义二维码的参数
HashMap map = new HashMap();
map.put(EncodeHintType.CHARACTER_SET, "utf-8");//编码
map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
map.put(EncodeHintType.MARGIN, 2);
//生成二维码
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height,map);
Path file = new File("F:/code/img.png").toPath();//二维码存放路径
MatrixToImageWriter.writeToPath(bitMatrix, format, file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
run as运行,在D盘code文件下生成img.png图片
ps:我们扫描出来的二维码是一个文本内容的二维码,而不是直接跳转网页。原因:二维码扫描时将www.baidu,com当成了一个文本内容,如果想跳转网页,需要将文本内容www.baidu.com改为https://www.baidu.com
解析zxing二维码:
package com.itstar.zxing;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import javax.imageio.ImageIO;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;
/**
* 解析二维码
*/
public class ReadQRCode {
public static void main(String[] args) {
try {
MultiFormatReader formatReader = new MultiFormatReader();
File file = new File("F:/code/img.png");
BufferedImage image = ImageIO.read(file);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
// 定义二维码的参数
HashMap map = new HashMap();
map.put(EncodeHintType.CHARACTER_SET, "utf-8");// 编码
Result result = formatReader.decode(bitmap, map);
System.out.println("解析结果: "+result.toString());
System.out.println("二维码格式类型: "+result.getBarcodeFormat());
System.out.println("二维码文本内容: "+result.getText());
} catch (NotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
run as运行,控制台输入内容如下:
上一篇: 利用WireShark分析H264码流