Java 使用URL生成二维码并实现扫码访问

内容简介:本文介绍如何使用Google提供的ZXing库,实现在Java程序中将URL生成为二维码图像从而令设备能够通过扫码访问。

1,引入资源:

对于maven项目而言,直接在pom.xml中的<dependencies>标签内引入下列资源:

<dependency>
	<groupId>com.google.zxing</groupId>
	<artifactId>javase</artifactId>
	<version>3.3.3</version>
</dependency>

对于普通java项目而言,则需手动下载相应的jar包(GitHub上的发行版地址):https://github.com/zxing/zxing/releases 

最终引入效果如图所示:

2,编写代码

2.1,创建一个二维码生成工具(其中的功能详见代码注释):

package kohgylw.qr_code_quickstart.util;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

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;

/**
 * 
 * <h2>二维码生成工具</h2>
 * <p>该工具用于根据链接生成一个二维码,使得设备扫码后可以访问这一链接。详见方法注释。</p>
 * @author 青阳龙野(kohgylw)
 * @version 1.0
 */
public class QRCodeUtil {

	private static int width = 500;// 设定二维码的宽度
	private static int height = 500;// 设定二维码的高度
	private static String format = "png";// 设定二维码的图片格式
	
	/**
	 * 
	 * <h2>由指定链接生成二维码</h2>
	 * <p>根据传入的链接,在指定文件夹内生成指定名称的二维码文件(png格式)。</p>
	 * @author 青阳龙野(kohgylw)
	 * @param url java.lang.String 要编入二维码的URL
	 * @param dir java.lang.String 存储文件夹名(必须存在)
	 * @param name java.lang.String 存储文件名
	 */
	public static void createQRCode(String url, String dir, String name) throws IOException {
		//对二维码进行必要的设定
		Map<EncodeHintType, Object> hints = new HashMap<>();
		//设定内容的编码格式
		hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
		//设定图像的错误校正程度:
		//M - ~15%
		//L - ~7%
		//H - ~30%
		//Q - ~25%
		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
		//设定图像外边距(像素)
		hints.put(EncodeHintType.MARGIN, 2);
		try {
			//进行编码并获得一个bit封装对象
			BitMatrix bitMatrix = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, width, height, hints);
			Path file = new File(dir, name + ".png").toPath();
			//使用默认设置、将bit封装对象以指定的图像格式、写入至指定文件中
			MatrixToImageWriter.writeToPath(bitMatrix, format, file);
			//至此,一个二维码图像就生成完毕了,或者也可以使用下面的方法将其写出至输出流中
			//MatrixToImageWriter.writeToStream(matrix, fileName, stream);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

上述代码均经过检查,不存在其他自定义的工具类,能够直接运行使用。

2.2,接下来,编写一个主类进行测试

测试内容:将百度的URL地址生成一个二维码并存放在项目中的“output”文件夹内,二维码图像的文件名为“baidu.png”。

测试代码:

package kohgylw.qr_code_quickstart.mc;

import java.io.IOException;

import kohgylw.qr_code_quickstart.util.QRCodeUtil;

/**
 * 
 * <h2>快速开始:使用zxing生成二维吗</h2>
 * <p>该示例用于展示如何使用google的zxing库将一个URL生成二维码,从而实现扫码访问。</p>
 * @author 青阳龙野(kohgylw)
 * @version 1.0
 */
public class MC {

	public static void main(String[] args) {
		String url="https://www.baidu.com/";//要生成二维码的链接
		String dir="output";//输出的文件夹
		String name="baidu";//输出的文件名
		try {
			QRCodeUtil.createQRCode(url, dir, name);//调用工具类中的方法进行生成
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

执行上述代码后,会在output内得到生成的结果:

使用“微信”对其进行扫码后,即可访问至百度:

3,总结

以上便是使用ZXing生成二维码的全部内容,由此还可以实现更加高级的功能(例如扫码下载等),这就要看使用者的想象力了。除此以外,ZXing库还可以识别二维码,从而实现应用内的扫码交互(比如扫码下单等),在此不做赘述。

以上,转发请注明出处。

猜你喜欢

转载自blog.csdn.net/qq_25670227/article/details/89349937