java:实现用户扫码二维码自动跳转指定链接功能
0. 引言
近来接到要实现链接转二维码的需求,通过提供二维码给用户,让用户扫描后自动访问指定的H5页面,从而实现业务流转,这样的功能其实在其他很多场景也会用到,比如资产管理系统中,扫码资产二维码,从而实现库存盘点、自动入库、自动出库等功能
今天就这类需求场景,给大家做一个讲解示例
1. 需求分析
首先这类场景,我们先把需求简化,其实根本是要客户访问某个链接,比如库存盘点的功能链接,但是又要与具体的实体绑定,比如要知道这个是对应到具体某一个资产的,但其实只是加一个参数就行了,比如 http://host/assets/check?no=123456
, 其中“123456”就是资产编号,这样就对应上了。
也有不是与具体物品绑定的,而是与账号、用户等虚拟信息绑定的场景,比如某一类app推广场景,用户可以生成自己的推广二维码,扫码了二维码注册的新用户,奖励就会算到这个用户的账户中。这种场景就需要和用户绑定,但转换成链接也很好理解,比如http://host/user/invite?userId=123456
,这里的userId就是分享二维码的用户的id, 这样只要新用户在访问这个链接是,就能记录是谁推广的
如上,我们的需求定义清楚了,就是要用户访问指定的链接,并且链接上可能会带上一定的参数,而这个链接的展现形式就不是直接显示给链接了,而是以二维码的形式展现。
那我们的核心诉求,就变成了指定的链接转换成二维码。那么,我们来看如何实现
2. 二维码的实质
二维码(QR码)是一种二维图形编码技术,它可以将包含数据的信息以模块化的方式编码成黑白像素点组成的矩阵图案。这些图案可以被扫描设备(如手机相机)捕捉并解码,将其中的数据恢复出来。
实质上,二维码是一种特定的编码方式,可以表示数字、文本、链接、图像
等各种类型的数据。
二维码的工作原理基于计算机视觉和图像处理技术。当扫描设备读取二维码时,它首先会通过光源照亮二维码,然后使用感光器记录反射回的光线。这些原始图像数据经过图像预处理、边缘检测和图像分析等步骤后,被转换为数字信号并进行解码,从而恢复出原始的数据。
3. zxing工具实现
在java中,我们可以利用谷歌开源的zxing
工具包来实现二维码的生成
zxing源码地址:https://github.com/zxing/zxing
引入jar包
<dependency> <groupId>com.google.zxinggroupId> <artifactId>coreartifactId> <version>3.3.0version> dependency>
创建工具类
public class QRcodeUtil { private static final String CHARSET = "utf-8"; private static final String FORMAT_NAME = "JPG"; // 二维码尺寸 private static final int QRCODE_SIZE = 300; public static BufferedImage createImage(String url) throws Exception { Hashtable hints = new Hashtable(); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); hints.put(EncodeHintType.CHARACTER_SET, CHARSET); hints.put(EncodeHintType.MARGIN, 1); BitMatrix bitMatrix = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints); int width = bitMatrix.getWidth(); int height = bitMatrix.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF); } } return image; } public static void encode(String url, HttpServletResponse response) throws Exception { BufferedImage image = createImage(url); ImageIO.write(image, FORMAT_NAME, response.getOutputStream()); }}
创建实现转换的接口
@GetMapping("code") public void qrcode(String url, HttpServletResponse response) throws Exception { QRcodeUtil.encode(url, response); }
测试,访问该生成二维码的接口:http://localhost:8092/orders/code?url=http://www.baidu.com
这里我测试生成的链接是百度的,你可以根据自己的需求调整为自己的。需要注意的是,生成的链接一定要带上http://
或https://
表明这是链接,而不是一段文字
生成的二维码如下所示
手机扫码,正常跳转百度,测试通过
总结
至此,针对生成二维码的功能就结束了,通过它我们可以实现各种便捷的交互功能,更多的拓展,大家可以动手尝试
来源地址:https://blog.csdn.net/qq_24950043/article/details/131259497
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341