什么是QR码?

QR CodeQuick Response Code是二维条形码,现代智能手机和特殊的QR Code扫描仪设备均可读取。

QR码由排列在白色背景上的正方形网格中的黑色正方形组成。QR码有多种变体,具体取决于它们的符号大小,布局,编码和结构。

以下是典型QR码的图像(我已经在此QR码图像中进行了编码。请从您的智能手机对其进行扫描以检查其内部内容:-)-

QR码可用于编码各种类型的数据,例如-简单文本,URL,电话号码,短信,地理位置,电子邮件地址等。

在下一节中,我们将学习如何对此类数据进行编码并使用Java生成QR Code。

如何在Java中生成QR码?

我们将使用Google的Zxing库为我们的应用程序生成QR码。

Zxing,发音为Zebra Crossing,是一种用Java实现的开源,多格式1D / 2D条码图像处理库。

1.添加Zxing依赖项

下载Maven发布存储库中托管的以下zxing jar并将其添加到类路径中-

  • zxing core-3.3.0.jar

  • zxing javase-3.3.0.jar

2.生成QR码的程序

在下面的程序中,我编写了一个名为的方法generateQRCodeImage,该方法获取要编码的文本,QR Code的宽度和高度,以及将保存QR Code的文件系统路径。

该函数生成QR码并将其保存在指定路径中。

import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;public class QRCodeGenerator {private static final String QR_CODE_IMAGE_PATH = "./MyQRCode.png";private static void generateQRCodeImage(String text, int width, int height, String filePath)throws WriterException, IOException {QRCodeWriter qrCodeWriter = new QRCodeWriter();BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);Path path = FileSystems.getDefault().getPath(filePath);MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);}/* This method takes the text to be encoded, the width and height of the QR Code, and returns the QR Code in the form of a byte array.*/private static byte[] getQRCodeImage(String text, int width, int height) throws WriterException, IOException {QRCodeWriter qrCodeWriter = new QRCodeWriter();BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream);byte[] pngData = pngOutputStream.toByteArray(); return pngData;}public static void main(String[] args) {try {generateQRCodeImage("This is my first QR Code", 350, 350, QR_CODE_IMAGE_PATH);} catch (WriterException e) {System.out.println("Could not generate QR Code, WriterException :: " + e.getMessage());} catch (IOException e) {System.out.println("Could not generate QR Code, IOException :: " + e.getMessage());}try {byte[] myQRCode=getQRCodeImage("This is my first QR Code", 350, 350);System.out.println(myQRCode.length);} catch (WriterException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

上面的程序将生成带有文本的QR码-“这是我的第一个QR码”,并将其保存在指定的位置。这是生成的QR码-

上面的generateQRCode方法将QRCode图像写入指定的位置。如果您不想保存QRCode并想从函数中将其作为字节数组返回,则可以使用MatrixToImageWriter.writeToStream()zxing库提供的方法-

上面的方法非常有用-

  • 如果您正在开发Web应用程序,并且想返回QR码图像作为对http请求的响应。您可以在http响应的正文中返回字节数组。

  • 如果您正在开发android应用程序,并且想在活动屏幕上显示QR码。您可以将字节数组转换为,BitMap并在中显示图像ImageView

保护您的QR码

任何智能手机和二维码扫描仪设备都可以读取和解释使用QR Code编码的文本。但是,如果您不希望所有人都阅读QR Code中编码的内容怎么办?

嗯,QR Code本身不提供任何安全性。您可以改用以下方法-

  • 在生成带有任何文本的QR码之前,请使用只有您的应用程序有权访问的秘密的任何加密算法对文本进行加密。

  • 生成带有加密文本的QR码。

现在,即使有人扫描了您的QR码,他们也将获得他们无法解密的加密文本,除非他们知道用于加密它的秘密。

但是,当您在应用程序中扫描QR码时,可以使用密码对文本解密,并获取存储在QR码中的实际数据。

使用Zxing在Java中生成QR码相关推荐

  1. 如何在Angular 10中生成QR码

    In this tutorial, we'll learn how to generate QR codes in Angular 10 by building a simple example ap ...

  2. 只需3个步骤,轻松解决程序员在Java中生成、扫描二维码难题

    条形码包含有关产品或公司的信息,以机器可读的形式直观地表示.条码广泛用于跟踪货物和库存管理.我们可以在 WPF 应用程序中轻松生成各种类型的条码.二维码广泛用于分享重要信息.对于不同的要求,您可能希望 ...

  3. 在java中生成二维码,并直接输出到jsp页面

    在java中生成的二维码不存到磁盘里要直接输出到页面上,这就需要把生成的二维码直接以流的形式输出到页面上,我用的是myeclipse 和 tomcat 它的原理是:在加载页面时,根据img的src(c ...

  4. java 中生成文档_在Java中生成专业的公文文档

    在Java中生成专业的公文文档 程序库:http://myxdoc.sohuapps.com/XDocService.jar 源码:http://myxdoc.sohuapps.com/XDocSer ...

  5. 快速生成QR码的方法:教你变成QR Code Master

    目录 简介: 具体实现步骤: 一.可以使用Python中的qrcode和tkinter模块来生成QR码.以下是一个简单的例子,演示如何在Tkinter窗口中获取用户输入并使用qrcode生成QR码. ...

  6. 安卓系统下生成QR码(二)——自定义二维码的纠错等级

    安卓版的Zxing在生成QR码时,本身不提供显式的纠错等级设置功能,但改几个地方就能轻松实现. QR码的4个纠错等级不想在多叙述,不明白的朋友可以参考其他文章.本文主要介绍如何完成安卓下设置QR码的4 ...

  7. 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题

    因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...

  8. OpenCV在相机或图像中检测QR码的实例(附完整代码)

    OpenCV在相机或图像中检测QR码的实例 OpenCV在相机或图像中检测QR码的实例 OpenCV在相机或图像中检测QR码的实例 #include "opencv2/objdetect.h ...

  9. 如何在Java中生成比特币钱包地址

    让我们通过学习比特币(Bitcoin)如何实施该技术的各个方面来工作,好吗?该技术包括以下几个方面: 比特币地址bitcoin address是用来发送和接收比特币的. 交易transaction是比 ...

  10. java中生成pdf,插入图片,页眉、页脚、表格

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java中生成pdf,插入图片,页眉.页脚.表格 import com.lowagie.text.*; import com.lowagie.te ...

最新文章

  1. 2021.4.7 美团买菜后端开发实习生(二面)(含总结)(已oc)
  2. attention retain_Attention-Aware Compositional Network
  3. 卓越性能代码_编程语言性能实测,Go比Python更胜一筹?
  4. mysql characterencoding 枚举值_mysql中enum类型理解,读完之后,大部分程序员收藏了......
  5. dwr和ajax的区别,dwr的ajax实现
  6. 【算法分析与设计】实验 分治算法解决中位数问题
  7. java jtextarea滚动条下滑,关于JTextArea的滚动条问题
  8. array 前端面试题_一则关于js数组的前端面试题
  9. u盘插入后计算机内没有选项,U盘插到电脑,无法读取,属性里面空间全是0是怎么回事?...
  10. mangos服务器架构
  11. php按按字符串长度分割,支持中文的PHP按字符串长度分割成数组代码_PHP
  12. Windows Server 2003 安全指南
  13. 贺州计算机学院,贺州学院
  14. WIN10不显示sql2005服务器,win10系统安装sql2005 sql服务无法启动的解决方法
  15. Wincc安装教程+破解教程(包括软件下载链接——百度网盘)
  16. 如何设计一种简单的恒流/恒压降压转换器
  17. React 环境 webpack less 配置 及 javascriptEnabled 解决方法
  18. 自己动手写java虚拟机(第一话)
  19. Statistic Helper 开发自查帮助文档(五):Sliced Inverse Regression
  20. CV项目肢体动作识别(三)内附完整代码和详细讲解

热门文章

  1. 论文笔记(1):Efficient Convex Completion of Coupled Tensors using Coupled Nuclear Norms
  2. 幂等性需要明确最小颗粒度
  3. Android使用串口打印机打印图片方法
  4. 对android layout_wight属性和weight_sum属性的深入理解
  5. 罗格斯的计算机科学博士奖学金,罗格斯大学计算机科学系
  6. cannot load facet kotlin
  7. 中国海外文物拍卖天价
  8. matlab 矩阵 对称,如何使用Matlab产生对称矩阵
  9. 体系结构实验(4)—— Tomasulo算法
  10. Handling App Links