QRコードとは
QRコード(Quick Response Code)は、黒と白のスクエア(四角)パターンを使用した二次元のバーコードです。デンソーウェーブによって1994年に開発されました。
QRコードの主な特徴は次のとおりです:
情報の量: QRコードは、数百から数千文字の情報を格納できます。一方、一次元のバーコードは、通常20文字以下の情報しか格納できません。
種類の多さ: QRコードは、テキスト、URL、電子メールアドレス、電話番号、連絡先情報(vCard形式)、カレンダーの予定など、様々な種類の情報を格納することができます。
エラー訂正機能: QRコードにはエラー訂正機能があり、汚れや破れによってQRコードの一部が欠落してもオリジナルのデータを再構築することができます。
読み取り速度: "Quick Response"の名前が示すように、QRコードは高速に読み取ることができます。
アクセシビリティ: 今日のほとんどのスマートフォンには、QRコードを読み取るためのアプリケーションが含まれています。
QRコードを生成するサーブレット
以下のサンプルコードは、URLを基にQRコードを生成し、レスポンスとしてPNG画像を送信するServletです。QRコード生成のためにZXingというライブラリを使用しています。
https://mvnrepository.com/artifact/com.solvoj.zxing-java6/core-java6/3.2.0
https://mvnrepository.com/artifact/com.google.zxing/javase/3.2.0
以下のサーブレットを実行すると上記のQRコードが生成されます。
package controller;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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;
/**
* Servlet implementation class QRCodeServlet
*/
@WebServlet("/QRCode")
public class QRCodeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String url = "https://saycon.co.jp/"; // 当社のURL
QRCodeWriter qrCodeWriter = new QRCodeWriter(); // QRCodeWriterオブジェクトを生成
BitMatrix bitMatrix = null; // BitMatrix型の変数をnullで初期化
try {
// urlからQRコードを生成。サイズは200x200ピクセル
bitMatrix = qrCodeWriter.encode(url, BarcodeFormat.QR_CODE, 200, 200);
} catch (WriterException e) {
e.printStackTrace(); // 例外が発生した場合、エラーを出力
}
// BitMatrixからBufferedImageに変換
BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
response.setContentType("image/png"); // レスポンスのContent-Typeをimage/pngに設定
// レスポンスとしてQRコードのPNG画像を送信
ImageIO.write(image, "PNG", response.getOutputStream());
}
}