Java ライブラリ ZXing でバーコードを生成/操作しよう (第3回:QRコードを生成しよう)

投稿者 : OSCA

[PR] "東野・岡村の旅猿"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

本連載はバーコードを操作/生成することができる Java ライブラリ ZXing について解説をしています。 前回は、ITFバーコードの生成についてサンプルプログラムで示しました。 今回はQRコードを生成する方法について解説します。

QRコードを生成しよう

今回は普段の生活の中に溢れているコードの一つ「QRコード」を ZXing で生成するサンプルプログラムを示したいと思います。 今回のサンプルプログラムを実行すると、次のようなQRコードを生成することができます。

QRコード

それでは、サンプルプログラムを見ていきましょう。

package sample.zxing;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;

import javax.imageio.ImageIO;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

public class Main {
  public static void main(String[] args) {
    try {
      String contents = "http://photo.oscasierra.net";
      BarcodeFormat format = BarcodeFormat.QR_CODE;
      int width = 160;
      int height = 160;

      Hashtable hints = new Hashtable();
      hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);

      QRCodeWriter writer = new QRCodeWriter();
      BitMatrix bitMatrix = writer.encode(contents, format, width, height, hints);
      BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
      ImageIO.write(image, "png", new File("barcode.png"));
    }
    catch( IOException e ) {
      e.printStackTrace();
    }
    catch (WriterException e) {
      e.printStackTrace();
    }
  }
}

今回も前回同様、上のプログラムで重要なのは try で囲まれた実質10行だけです。 最初の4行, 次の2行, 後の4行をそれぞれ解説します。

最初の4行は次のようになっています。

String contents = "http://photo.oscasierra.net";
BarcodeFormat format = BarcodeFormat.QR_CODE;
int width = 160;
int height = 160;

変数名からなんとなく意味が分かると思いますが、 contents はバーコードで表したい内容です。 ここでは http://photo.oscasierra.net (筆者の別HP)というURLをQRコードで表現します。
format は生成するバーコードの種類を、width は生成するバーコードの幅、height は生成するバーコードの高さを宣言しています。

次の2行はQRコード特有のオプションの指定です。

Hashtable hints = new Hashtable();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);

バーコードを生成する際のヒントとなる hints を宣言し、次の行で QR コードのエラー補正のレベル ErrorCorrectionLevel を指定しています。 補正レベルは次の値を利用できます。

  • ErrorCorrectionLevel.L : 7%の補正レベル
  • ErrorCorrectionLevel.M : 15%の補正レベル
  • ErrorCorrectionLevel.Q : 25%の補正レベル
  • ErrorCorrectionLevel.H : 30%の補正レベル

後半の4行は次のようになっています。

QRCodeWriter writer = new QRCodeWriter();
BitMatrix bitMatrix = writer.encode(contents, format, width, height, hints);
BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
ImageIO.write(image, "png", new File("barcode.png"));

QRコードを出力するためのクラス QRWriter をインスタンス化して、上で宣言した変数やヒントを encode メソッドに指定してビットマトリックスを生成しています。
あとは生成したバーコードのビットマトリックスを画像ファイル “barcode.png” として PNG 形式で保存したいため、ImageIO を利用してファイルに出力しています。

おわりに

今回はQRコードを生成するサンプルプログラムを示しました。 ZXing を利用してのバーコード生成についてご理解頂けたでしょうか?

>

Javaのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca