歸功於智慧型手機,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 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能