归功于智能手机,QR码逐渐成为主流,它们正变得越来越有用。从候车亭、产品包装、家装卖场、汽车到很多网站,都在自己的网页集成QR码,让人们快速找到它们。随着智能手机的用户量日益增长,二维码的使用正在呈指数上升。
让我们来看看QR码的简要概述,以及如何在Java中生成它们。
QR码介绍
QR码(Quick Response 快速响应码)是矩阵条形码(或二维码)的一种类型,最先为于汽车行业而设计。得益于其快速读取性和较大的存储容量,QR码开始在汽车行业以外流行。图案是在白色背景上由有序排列的黑色方块组成。被编码是的数据可以是四种标准数据(数字、字母数字、字节/二进制、汉字)中的一种,但也可以通过扩展来实现更多数据。
丰田子公司Denso Wave在1994年发明了QR码,用来追踪生产线上的车辆。从此,QR码成为了最受欢迎的二维条形码直译。QR码的设计支持对内容进行高速解码。
在Java中实现QR码的Hello World
Zebra Crossing(ZXing)是一个很棒的,几乎可以在所有平台(Android、JavaSE、iPhone、RIM、Symbian)中可以用来生成、解析QR码的开源库。但是,如果你只是要生成简单的QR码,利用它反而不好实现。
QRGen在ZXing基础上开发,这个库使得利用Java生成QR码变为小菜一碟。它需要依赖ZXing,所以生成图案时你同时需要ZXing和QRGen的jar包。
在ZXing的下载页面中你会找不到jar文件。必须要通过源代码自己编译,我帮你生成好了,链接在这里。
zxing-core-1.7.jar (346 KB)
zxing-javase-1.7.jar (21 KB)
QRGen的jar包可以通过官网下载。
把他们导入到classpath中,然后执行以下Java代码:
package net.viralpatel.qrcode; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import net.glxn.qrgen.QRCode; import net.glxn.qrgen.image.ImageType; public class Main { public static void main(String[] args) { ByteArrayOutputStream out = QRCode.from("Hello World").to(ImageType.PNG).stream(); try { FileOutputStream fout = new FileOutputStream(new File( "C:QR_Code.JPG")); fout.write(out.toByteArray()); fout.flush(); fout.close(); } catch (FileNotFoundException e) { // Do Logging } catch (IOException e) { // Do Logging } } }
这些代码非常直观。我们用QRCode类来生成QR码流,并通过字节流写入到文件C:\QR_Code.jpg中。
QR_Code_Java.zip (339 KB)
如果你打开这个JPEG文件,并用你的iPhone或Android二维码工具来扫一扫,你会看到一个很酷的“Hello World”
除了使用QRGen的API来生成数据流,我们还可以使用下面的API来创建QR码:
// get QR file from text using defaults File file = QRCode.from("Hello World").file(); // get QR stream from text using defaults ByteArrayOutputStream stream = QRCode.from("Hello World").stream(); // override the image type to be JPG QRCode.from("Hello World").to(ImageType.JPG).file(); QRCode.from("Hello World").to(ImageType.JPG).stream(); // override image size to be 250x250 QRCode.from("Hello World").withSize(250, 250).file(); QRCode.from("Hello World").withSize(250, 250).stream(); // override size and image type QRCode.from("Hello World").to(ImageType.GIF).withSize(250, 250).file(); QRCode.from("Hello World").to(ImageType.GIF).withSize(250, 250).stream();
在Java中生成网站链接(URL)的QR码
QR 码最常见的应用便是为网站中一个特定的网页或下载页带来流量。因此,QR码常常会编码URL或网站地址,用户可以通过手机摄像头扫描,并在其浏览器中打开。URL可以直接编码在QR码中。在上面的的Hello World示例中,只需把“Hello World”这个字符串替换为需要编码的URL。下面是代码片段:
ByteArrayOutputStream out = QRCode.from("http://viralpatel.net").to(ImageType.PNG).stream();
Servlet中的QR码
大多数时候,你需要在网站上动态的生成一些QR码。我们已经看到Java中生成QR码是多么的容易。现在,我们看看如何把生成QR码集成到Java Servlet中。
下面是使用QRGen和ZXing库来创建QR码的一个简单的HTTP Servlet的。QR码的内容可以由用户提供。
该index.jsp文件包含一个简单的HTML表单,其中有输入框和一个提交按钮。用户可以输入他希望用于编码的的文本并提交。
index.jsp
<form action="qrservlet" method="get"> <p>Enter Text to create QR Code</p> <input name="qrtext" type="text"> <input value="Generate QR Code" type="submit"> </form>
秘密就在QRCodeServlet.java里。在这里,我们使用QRGen和ZXing从request.getParameter得到的文本生成QR码。一旦生成QR码流,我们就写入response中并设置适当的content-type。
QRCodeServlet.java
package net.viralpatel.qrcodes; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.glxn.qrgen.QRCode; import net.glxn.qrgen.image.ImageType; public class QRCodeServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String qrtext = request.getParameter("qrtext"); ByteArrayOutputStream out = QRCode.from(qrtext).to(ImageType.PNG).stream(); response.setContentType("image/png"); response.setContentLength(out.size()); OutputStream outStream = response.getOutputStream(); outStream.write(out.toByteArray()); outStream.flush(); outStream.close(); } }
使用web.xml将/qrservlet请求映射到QRCodeServlet.java。
web.xml
<!--?xml version="1.0" encoding="UTF-8"?--> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>QR_Code_Servlet</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>QRCodeServlet</servlet-name> <servlet-class>net.viralpatel.qrcodes.QRCodeServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>QRCodeServlet</servlet-name> <url-pattern>/qrservlet</url-pattern> </servlet-mapping> </web-app>

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver CS6
视觉化网页开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。