スマートフォンのおかげで、QRコードはますます主流になり、ますます便利になっています。バス停、商品パッケージ、ホームセンター、自動車から多くの Web サイトに至るまで、Web ページに QR コードが組み込まれており、人々がすぐに見つけられるようにしています。スマートフォンユーザーの増加に伴い、QRコードの使用が飛躍的に増加しています。
QR コードの概要と Java で QR コードを生成する方法を見てみましょう。
QR コードの紹介
QR コード (クイック レスポンス コード) は、自動車産業向けに最初に設計されたマトリックス バーコード (または QR コード) の一種です。 QR コードは、読み取りが速く、記憶容量が大きいため、自動車業界以外でも人気が高まっています。このパターンは、白い背景に黒い正方形が規則正しく配置されています。エンコードされるデータは 4 つの標準データ (数値、英数字、バイト/バイナリ、漢字) のいずれかになりますが、より多くのデータを実装するために拡張することもできます。
トヨタの子会社であるデンソーウェーブは、生産ライン上の車両を追跡するために 1994 年に QR コードを発明しました。それ以来、QR コードは 2D バーコードの直訳として最もよく使われるようになりました。 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 パッケージは公式 Web サイトからダウンロードできます。
それらをクラスパスにインポートし、次の 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 QR コード ツールでスキャンすると、クールな「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 で Web サイト リンク (URL) の QR コードを生成する
QR コードの最も一般的な用途は、トラフィックをもたらす Web サイトの特定の URL を作成することです。そのため、QR コードは多くの場合、ユーザーが携帯電話のカメラでスキャンしてブラウザで開くことができる URL または Web サイトのアドレスをエンコードします。 URL は QR コードに直接エンコードできます。上記の Hello World の例では、文字列「Hello World」をエンコードする必要がある URL に置き換えるだけです。コード スニペットは次のとおりです:
ByteArrayOutputStream out = QRCode.from("http://viralpatel.net").to(ImageType.PNG).stream();
サーブレットの QR コード
ほとんどの場合、Web サイト上でいくつかの QR コードを動的に生成する必要があります。 Java で QR コードを生成することがいかに簡単であるかを見てきました。ここで、QR コードの生成を Java サーブレットに統合する方法を見てみましょう。
以下は、QRGen および ZXing ライブラリを使用して QR コードを作成する単純な HTTP サーブレットです。 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 コード ストリームが生成されたら、それを応答に書き込み、適切なコンテンツ タイプを設定します。
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
rree