Java实现二维码扫描:从扫码到跳转,快速进入目标网站!

您所在的位置:网站首页 扫描二维码的网页 Java实现二维码扫描:从扫码到跳转,快速进入目标网站!

Java实现二维码扫描:从扫码到跳转,快速进入目标网站!

2023-12-12 05:23| 来源: 网络整理| 查看: 265

👨‍🎓作者:bug菌 ✏️博客:CSDN、掘金、InfoQ、51CTO等 🎉简介:CSDN | 阿里云 | 华为云 | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金 | InfoQ | 51CTO| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。

🏆本文收录于《Java进阶实战》,专门攻坚指数提升,2023 年国内最系统+最强(更新中)。

1. 前言

  二维码扫描在现代日常生活中已经得到了广泛的应用,例如通过扫描餐厅的二维码来查看菜单、扫描商店的二维码来获取优惠券等等,这些都需要实现二维码扫描后跳转到相应的网址。本教程将介绍如何使用Java实现二维码扫描后跳转网址。

  那么,具体如何实现呢?这将又会是干货满满的一期,全程无尿点不废话只抓重点教,具有非常好的学习效果,拿好小板凳准备就坐!希望学习的过程中大家认真听好好学,学习的途中有任何不清楚或疑问的地方皆可评论区留言或私信,bug菌将第一时间给予解惑,那么废话不多说,直接开整!Fighting!!

2. 摘要

本教程将介绍如何使用Java编程实现将二维码扫描后跳转网页的功能。主要内容包括:

二维码的概念和原理 二维码的创建 二维码的扫描 根据扫描URL跳转网页 测试用例和全文小结

提示:本教程旨在为初学者提供参考和帮助,读者需要具备Java编程的基本知识。

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE 3. 二维码 3.1 二维码的概念和原理

  二维码是一种可以存储信息的二维图像,通常由黑白相间的小正方形组成。通过扫描二维码,可以将其中存储的信息快速读取出来,例如网址、文本、图片等。

  二维码的实现原理主要是通过将信息编码成一组特定的格式,然后按照一定规则绘制成图像。在扫描二维码时,通过解析图像上的黑白像素信息,可以将编码的信息还原出来。常见的二维码格式有QR码、DataMatrix码、PDF417码等。

3.2 使用Java编写二维码扫描程序

  Java中可以使用Zxing库来编写二维码扫描程序,该库提供了一系列用于生成和解析二维码的API接口。zxing源码地址:github.com/zxing/zxing

4. 正文 4.1 搭建Spring Boot应用

  首先,我们先创建个基础的Spring Boot项目,如果还不会点这里,此处就不详细赘述啦。

4.2 导入依赖

  这里我们采用Zxing库来编写二维码扫描程序,该库提供了一系列用于生成和解析二维码的API接口,具体如下:

com.google.zxing core 3.3.0

以下是使用Zxing库编写简单的二维码扫描程序的代码:

4.3 实现生成指定网址的二维码图片

  我们可以使用ZXing库来生成一个指定网址的二维码图片。下面是我封装好的一个工具类,需要的可自取,可以根据你的需要进行修改或新增。

示例代码如下,仅供参考:

package com.example.springboothttp.util; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.HashMap; import javax.imageio.ImageIO; import com.google.zxing.*; import com.google.zxing.common.BitMatrix; import com.google.zxing.common.HybridBinarizer; import com.google.zxing.qrcode.QRCodeWriter; /** * 二维码相关工具方法 * * @author bug菌 * @version 1.0 * @date 2023/9/5 15:25 */ public class QRCodeUtil { /** * 生成指定网址大小及图片格式的二维码 * * @param url 网址 * @param size 尺寸 * @param fileType 二维码图片格式 * @param qrFile 生成图片保存地址 */ private static void createQRCode(String url, int size, String fileType, File qrFile) throws WriterException, IOException { HashMap hintMap = new HashMap(); hintMap.put(EncodeHintType.CHARACTER_SET, "UTF-8"); QRCodeWriter qrCodeWriter = new QRCodeWriter(); BitMatrix bitMatrix = qrCodeWriter.encode(url, BarcodeFormat.QR_CODE, size, size, hintMap); int matrixWidth = bitMatrix.getWidth(); BufferedImage image = new BufferedImage(matrixWidth, matrixWidth, BufferedImage.TYPE_INT_RGB); image.createGraphics(); Graphics2D graphics = (Graphics2D) image.getGraphics(); graphics.setColor(Color.WHITE); graphics.fillRect(0, 0, matrixWidth, matrixWidth); graphics.setColor(Color.BLACK); for (int i = 0; i < matrixWidth; i++) { for (int j = 0; j < matrixWidth; j++) { if (bitMatrix.get(i, j)) { graphics.fillRect(i, j, 1, 1); } } } ImageIO.write(image, fileType, qrFile); } }

方法解读:此方法接受一个 URL、一个尺寸、一个文件类型和一个文件对象作为参数。在内部,它使用 QRCodeWriter 类和 BitMatrix 类来生成一个 QR 码的二进制矩阵,并将其转换为一个 BufferedImage 对象。然后,它在 BufferedImage 上创建一个 Graphics2D 对象以将 QR 码绘制为黑色的像素点。最后,它使用 ImageIO 将 BufferedImage 对象写入到指定类型的文件中。

4.4 实现二维码扫描和跳转网址功能 4.4.1 实现扫描二维码方法

创建一个名为scanQRCode方法类,实现二维码的扫描功能,示例代码如下:

/** * 读取二维码网址 */ public static String scanQRCode(String filePath) { String url = ""; try { File file = new File(filePath); BufferedImage image = ImageIO.read(file); LuminanceSource source = new RGBLuminanceSource(image.getWidth(), image.getHeight(), getPixels(image)); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Result result = new MultiFormatReader().decode(bitmap); url = result.getText(); System.out.println("二维码中的网址为:" + url); } catch (IOException | ReaderException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return url; }

方法解读:scanQRCode(String filePath) 方法接收一个文件路径参数,它会读取该文件,并将其转换成 BufferedImage 对象。接着,创建一个 LuminanceSource 源对象,并使用 RGBLuminanceSource 类从 BufferedImage 对象中获取像素数据。然后,使用 HybridBinarizer 类创建 BinaryBitmap 对象,用于表示二值化后的图像,也就是只有黑和白两种颜色的图像。接着,使用 MultiFormatReader 类解码 BinaryBitmap 对象,解析出其中的信息,并将其打印出来。

4.4.2 实现获取图像像素方法

创建一个获取图像像素的方法,示例代码如下:

//获取图像的像素数据 private int[] getPixels(BufferedImage image) { int width = image.getWidth(); int height = image.getHeight(); int[] pixels = new int[width * height]; image.getRGB(0, 0, width, height, pixels, 0, width); return pixels; }

方法解读:getPixels(BufferedImage image)是一个辅助方法,用于从 BufferedImage 对象中获取像素数据。它首先获取图像的宽度和高度,然后创建一个像素数组,并使用 getRGB() 方法从 BufferedImage 对象中获取像素数据,把它存储在像素数组中,并返回该数组。

4.4.3 实现网址跳转功能

  采用Java中调用默认浏览器打开指定URL的代码。Desktop是Java中的一个类,它提供了一些与操作系统桌面交互的功能,如打开文件、打开URL等。getDesktop()方法返回默认的桌面实例。browse(new URI(url))方法则是在默认浏览器中打开指定URL的操作。 示例代码如下:

/** * 根据网址跳转 */ public static void dropUrl(String url) { try { //调用系统默认浏览器打开指定URL Desktop.getDesktop().browse(new URI(url)); } catch (IOException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } } 4.5 功能测试 4.5.1 测试生成二维码图片

  为了测试我们的程序是否可以正确识别和跳转网页,我们先创建一张附带博客地址的二维码,由于平台限制,二维码样例需要的就从我的Github中获取吧,你可以根据自己的需求调整为自己的。需要注意的是,生成的链接一定要带上http:// 或 https:// 表明这是链接,而不是一段文字。 在main方法中调用createQRCode()方法,示例如下:

/** * 测试生成一张指定地址的二维码 * */ public static void main(String[] args) { String url = "https://blog.csdn.net/weixin_43970743?type=blog"; int size = 300; String fileType = "png"; File qrFile = new File("./template/csdnQrcode.png"); try { //调用生成二维码 createQRCode(url, size, fileType, qrFile); System.out.println("QR code generated successfully!"); } catch (WriterException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

测试结果如下:

在这里插入图片描述

指定网址的二维码图片已经生成好了,接着就是测试读取二维码获取网址并打开跳转。

4.5.2 测试扫描二维码并跳转URL

  我们拿刚才生成的二维码图片作为演示,写个main函数直接调用,示例代码仅供参考;如果一切正常,程序应该可以正确地识别二维码中的网址,并在默认浏览器中打开该网页。示例代码如下:

/** * 测试二维码读取url进行跳转 */ public static void main(String[] args) { //传入一张二维码图片地址 String filePath = "./template/csdnQrcode.png"; //读取二维码url String url = QRCodeUtil.scanQRCode(filePath); //浏览器打开 QRCodeUtil.dropUrl(url); }

执行结果如下: 在这里插入图片描述

main函数执行完成的瞬间会调出你系统的默认浏览器,并打开了读取到的网址:

如下就是将二维码指定的URL打开了QQ浏览器(本机默认浏览器)。

image.png

肉眼可见,该网站URL就是我们当初生成二维码所指定的网址,大功告成。

4.6 小结

  本教程介绍了如何使用Java编程实现将二维码扫描后跳转网页的功能。我们首先介绍了二维码的概念和原理,然后使用Zxing库编写了简单的二维码扫描程序,并最终实现了跳转网页的功能。通过本教程的学习,读者可以了解相关技术的实现原理,掌握相关的编程技能,为未来的工作和学习打下坚实的基础。

... ...

    ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。

「赠人玫瑰,手留余香」,咱们下期拜拜~~

5. 热文推荐💭

Java大揭秘:如何轻松获取客户端真实公网IP地址?

Java数据库连接:手写代码实现MySQL或Oracle连接并操作数据

对比Mysql和Oracle分页:哪个更快、更有效?

惊!为什么Java中print和println输出对象时会泄露内存地址?

MyBatis中如何使用discriminator鉴别器实现多态查询?

教你如何轻松实现三个线程的有序执行!

JavaSE中compare与compareTo的比较:挑战自己的“排序神经

锁定线程,提升并发性能——解析synchronized关键字的使用方法

一招制敌,快速实现单例类

单例类中的volatile关键字:保证线程安全的必要手段

...

如果还想学习更多,推荐你学习《Java进阶实战》,本专栏致力打造最硬核Java系列进阶学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。

在入门及进阶之途,我必助你一臂之力,系统性学习,从入门到精通,带你不走弯路,直奔终点;投资自己,永远性价比最高,都这么说了,你还不赶紧来学??

本文涉及所有源代码,均已上传至github开源,供同学们一对一参考 GitHub传送门,

同时,原创开源不易,欢迎给个star🌟,想体验下被🌟的感jio,非常感谢❗

📣关于我

我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3