当前位置: 首页 > 工具软件 > QRGen > 使用案例 >

工具类:Java 网页前端二维码生成 (maven:net.glxn.qrgen 下的QrCode方式)

隗嘉歆
2023-12-01

二维码生成的方式有多种,今天博主来介绍其中一种的使用方法。

首先,我们在pom.xml中插入以下代码来下载其jar包支持:

<dependency>
    <groupId>net.glxn</groupId>
    <artifactId>qrgen</artifactId>
    <version>1.4</version>
</dependency>

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

  我们可以看到需要导入两种maven,博主在通过查看底层,发现,如果非得要生成二维码的话,单单引入第二个maven文件就行,那第一个maven是有什么作用呢?其实第一个maven文件相当于第二个maven文件的外包装,使用其可以减少许多代码量,使代码更加直观

  接下来看一下如何使用,下面,博主将写一个Controller类,读者要的话可以直接copy拿去用(记得先导上面的maven文件哦)。

package com.atimynyc.common;

import com.google.zxing.EncodeHintType;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import net.glxn.qrgen.QRCode;
import net.glxn.qrgen.exception.QRGenerationException;
import net.glxn.qrgen.image.ImageType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;

/**
 * @author atimynyc
 * @version 1.0
 * @title 二维码生成Controller
 * @email 495906027@qq.com
 * @since 2018/12/12
 */
@Controller
@RequestMapping("qrCode/")
public class QrCodeController {

	private static final Logger LOGGER = LoggerFactory.getLogger(QrCodeController.class);

	/**
	 * 生成二维码
	 * @param res HttpServletResponse
	 * @param url 需要转换的url
	 * @param width 二维码宽度 默认250
	 * @param height 二维码高度 默认250
	 * @throws IOException
	 */
	@RequestMapping("makeQrCode")
	public void makeQrCode(HttpServletResponse res, String url, Integer width, Integer height) throws IOException {
		LOGGER.info("[二维码]====二维码生成 传入参数 url={} width={} height={}", url, width, height);
		if (url == null || "".equals(url)) {
			LOGGER.warn("[二维码]====传入url为空");
			return;
		}
		width = (width == null ? 250 : width);
		height = (height == null ? 250 : height);
		if (url != null && !"".equals(url)) {
			OutputStream stream = null;
			try {
				QRCode qrCode = QRCode.from(url);
				//定义二维码的参数
				qrCode.to(ImageType.PNG);
				qrCode.withSize(width, height);
				qrCode.withHint(EncodeHintType.CHARACTER_SET, "utf-8");
				qrCode.withHint(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
				qrCode.withHint(EncodeHintType.MARGIN, 2);
				//生成二维码
				stream = res.getOutputStream();
				qrCode.writeTo(stream);
			} catch (QRGenerationException e) {
				e.printStackTrace();
				LOGGER.warn("[二维码]====生成二维码时发生异常 e={}", e);
			} finally {
				if (stream != null) {
					stream.flush();
					stream.close();
				}
			}

		}
	}

}

那我们如何在前端获取呢?我们直接写个<img>标签,将其src的值设为调用该Controller的url就行。如下:

<img id="qrCode" class="pre-img" alt="二维码生成失败,请联系后台管理员" style="vertical-align: middle;height: 250px;display: block;">
<script>
        var url = ;//你要生成二维码的url是什么就写什么,比如:http://www.baidu.com
        var width = 250;
        var height = 250;        
        $("#qrCode").attr("src","(这里填你自己的项目url前缀)/qrCode/makeQrCode?url="+url+"&width="+width+"&height="+height);
</script>

 

 类似资料: