Dank Smartphones werden QR-Codes immer mehr zum Mainstream und werden immer nützlicher. Von Bushaltestellen, Produktverpackungen, Baumärkten, Autos bis hin zu vielen Websites integrieren sie alle QR-Codes auf ihren Webseiten, damit die Leute sie schnell finden können. Mit der wachsenden Zahl von Smartphone-Nutzern nimmt die Nutzung von QR-Codes exponentiell zu.
Werfen wir einen kurzen Überblick über QR-Codes und wie man sie in Java generiert.
QR-Code-Einführung
QR-Code (Quick Response Code) ist eine Art Matrix-Barcode (oder QR-Code), der ursprünglich für die Automobilindustrie entwickelt wurde. Dank ihrer schnellen Lesbarkeit und großen Speicherkapazität erfreuen sich QR-Codes auch außerhalb der Automobilindustrie zunehmender Beliebtheit. Das Muster besteht aus geordnet angeordneten schwarzen Quadraten auf weißem Hintergrund. Bei den kodierten Daten kann es sich um eines von vier Standarddaten (numerisch, alphanumerisch, Byte/Binär, chinesische Zeichen) handeln, sie können aber auch erweitert werden, um weitere Daten zu implementieren.
Die Toyota-Tochtergesellschaft Denso Wave erfand 1994 den QR-Code, um Fahrzeuge am Fließband zu verfolgen. Seitdem sind QR-Codes die beliebteste wörtliche Übersetzung von 2D-Barcodes. QR-Codes sollen die Hochgeschwindigkeitsdekodierung von Inhalten unterstützen.
Hallo Welt, QR-Code in Java implementieren
Zebra Crossing (ZXing) ist großartig und funktioniert auf fast allen Plattformen (Android, JavaSE, iPhone, RIM, Symbian). Eine Open-Source-Bibliothek für Generieren und Parsen von QR-Codes. Wenn Sie jedoch nur einen einfachen QR-Code generieren möchten, ist die Verwendung nicht einfach.
QRGen wurde auf Basis von ZXing entwickelt. Diese Bibliothek macht die Generierung von QR-Codes mit Java zum Kinderspiel. Es hängt von ZXing ab, daher benötigen Sie beim Generieren von Mustern die JAR-Pakete von ZXing und QRGen.
Sie finden die JAR-Datei nicht auf der ZXing-Downloadseite. Sie müssen es selbst aus dem Quellcode kompilieren. Den Link finden Sie hier.
zxing-core-1.7.jar (346 KB)
zxing-javase-1.7.jar (21 KB)
Das JAR-Paket von QRGen kann von der offiziellen Website heruntergeladen werden .
Importieren Sie sie in den Klassenpfad und führen Sie dann den folgenden Java-Code aus:
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 } } }
Diese Codes sind sehr intuitiv. Wir verwenden die Klasse QRCode, um den QR-Code-Stream zu generieren und ihn über den Byte-Stream in die Datei C:QR_Code.jpg zu schreiben.
QR_Code_Java.zip (339 KB)
Wenn Sie diese JPEG-Datei öffnen und mit Ihrem iPhone- oder Android-QR-Code-Tool scannen, sehen Sie ein cooles „Hallo Welt“
Zusätzlich zur Verwendung der QRGen-API zum Generieren von Datenströmen können wir auch die folgende API zum Erstellen von QR-Codes verwenden:
// 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();
Website-Links (URL) in Java-QR-Code generieren
Die häufigste Anwendung von QR-Code besteht darin, Traffic auf eine bestimmte Webseite oder Download-Seite der Website zu leiten. Daher verschlüsseln QR-Codes häufig eine URL oder Website-Adresse, die Benutzer mit der Kamera ihres Telefons scannen und in ihrem Browser öffnen können. URLs können direkt in QR-Codes kodiert werden. Ersetzen Sie im obigen Beispiel „Hello World“ einfach die Zeichenfolge „Hello World“ durch die URL, die codiert werden muss. Hier ist der Codeausschnitt:
ByteArrayOutputStream out = QRCode.from("http://viralpatel.net").to(ImageType.PNG).stream();
QR-Code in Servlet
Meistens müssen Sie einige QR-Codes auf der Website dynamisch generieren. Wir haben gesehen, wie einfach es ist, QR-Codes in Java zu generieren. Sehen wir uns nun an, wie man die Generierung von QR-Codes in Java Servlet integriert.
Das Folgende ist ein einfaches HTTP-Servlet, das QRGen- und ZXing-Bibliotheken zum Erstellen von QR-Codes verwendet. Der Inhalt des QR-Codes kann vom Nutzer bereitgestellt werden.
Die Datei index.jsp enthält ein einfaches HTML-Formular mit Eingabefeldern und einer Schaltfläche zum Senden. Der Benutzer kann den Text, den er verschlüsseln möchte, eingeben und absenden.
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>
Das Geheimnis liegt in QRCodeServlet.java. Hier verwenden wir QRGen und ZXing, um QR-Code aus dem von request.getParameter erhaltenen Text zu generieren. Sobald der QR-Code-Stream generiert ist, schreiben wir ihn in die Antwort und legen den entsprechenden Inhaltstyp fest.
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(); } }
Verwenden Sie web.xml, um die /qrservlet-Anfrage QRCodeServlet.java zuzuordnen.
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>