パソコン

Java関連

周辺機器

QRコード基礎知識

  • データ量によってバージョンが1〜40まである。大きいバージョンほど升目が多く、たくさんの情報が入る
  • エラー訂正レベルが L,M,Q,Hから選べる。高いほどエラーに強くなるが、格納できる情報量は減る
  • コードの周りに4マス分以上の余白マージンを取る必要がある

Javaのqrcodeクラスライブラリ

  • 解説記事
    • http://www.in-vitro.jp/blog/index.cgi/Library/20080619_01.htm
      // QRコードクラスライブラリ for Java の準備。
      Qrcode qrcodeLogic = new Qrcode();
      qrcodeLogic.setQrcodeEncodeMode('*');
      qrcodeLogic.setQrcodeErrorCorrect('M');
      qrcodeLogic.setQrcodeVersion(7);
      
      // QR コードデータを作成。
      byte[] targetBytes = target.getBytes();
      boolean[][] qrcodeData = qrcodeLogic.calQrcode(targetBytes);
      
      // QR コード画像用の BufferedImage を準備。
      //   周りに 4cell 分のマージンを用意する。
      BufferedImage image = new BufferedImage(size.getCellSize()
             * (qrcodeData[0].length + 8), size.getCellSize()
             * (qrcodeData[0].length + 8), BufferedImage.TYPE_INT_BGR);
      Graphics g = image.getGraphics();
      g.setColor(QRCODE_IMAGE_BACKGROUNDCOLOR);
      g.fillRect(0, 0, image.getWidth(), image.getHeight());
      
      // QR コードデータを画像に変換。
      for (int i = 0; i < qrcodeData.length; i++) {
         for (int j = 0; j < qrcodeData[i].length; j++) {
             boolean cellFilled = qrcodeData[i][j];
             Color cellColor = cellFilled ? QRCODE_IMAGE_FOREGROUNDCOLOR
                     : QRCODE_IMAGE_BACKGROUNDCOLOR;
             g.setColor(cellColor);
             g.fillRect(size.getCellSize() * (i + 4), size.getCellSize()
                     * (j + 4), size.getCellSize(), size.getCellSize());
         }
      }
      g.dispose();

Pal.BarcodeによるQRコード作成のサンプル

import pao.barcode.QRCode;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;

private static void QRcodeTest() throws Exception,
FileNotFoundException,	IOException {
BufferedImage im =  new BufferedImage(400, 300,
BufferedImage.TYPE_3BYTE_BGR); 

      Graphics2D g = im.createGraphics();
       g.setColor(Color.WHITE);
       g.fillRect(0, 0, 400, 300);
       
       QRCode c = new QRCode(g);
       c.setVersion(3); //バージョン
       c.setErrorCorrect("M"); //エラー訂正レベル
       c.setEncodeMode("A"); //英数字モード
       c.drawDelicate("0123456789ABCDEFGHIJ", 10, 10, 3);
	
	    // Open output file.
	    OutputStream out = new FileOutputStream("testQR.jpg");
	    
       ImageOutputStream ios =
               ImageIO.createImageOutputStream(out);
       ImageWriter iw = (ImageWriter)ImageIO.
               getImageWritersByFormatName("jpeg").next();
       iw.setOutput(ios);
       iw.write(im);
       
	    // Close output file.
	    out.close();
	}

作成した画像をテストするには

  • Psytec - QR Code Editorが便利
    • 画面上に表示したQRコード(PDFでも、Webページでも)をデコード可能。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-11-16 (火) 18:55:59 (62d)