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运行,控制台输入内容如下:


猜你喜欢

转载自blog.csdn.net/weixin_41110459/article/details/80727867