欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java开发二维码(一) 使用zxing开发

程序员文章站 2022-07-14 17:34:16
...

     二维码概念:二维条码/二维码(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/

    Java开发二维码(一) 使用zxing开发

下载后将zxing进行解压,将core和javase中的包通过eclipse导出jar包

 

Java开发二维码(一) 使用zxing开发

Java开发二维码(一) 使用zxing开发

Java开发二维码(一) 使用zxing开发

代码如下:新建一个java项目

Java开发二维码(一) 使用zxing开发

生成二维码:

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图片

Java开发二维码(一) 使用zxing开发

Java开发二维码(一) 使用zxing开发

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

Java开发二维码(一) 使用zxing开发