mrubyでQRCode


mrubyでQRCodeを表示するためのmrbgemを作ってみました。

後日追記:すでに作られていた方がいらっしゃいました。そちらは画像を返すmrbgemのようですが、こちらは画像処理が入っていないmrbgemになります。

使い方は簡単で文字列をmruby-packを使って配列にして、クラスメソッドのencodeに渡します。

txt = "MORI MORI QRCode"
qr = QRCode.encode(0, 1, txt.unpack("C*"))

でqrコードのビットパターンの配列が返ってきます。

第一引数がLevelで0から4で第二引数がVersionで第三引数がエンコードするデータの配列です。

漢字の場合はmruby-nkfでSJISにします。

sjis = NKF.nkf('-s', txt).unpack("C*")

mruby-cairoで液晶に表示してみました。

    wnnsjis = NKF.nkf('-s', wata + naka).unpack("C*")
    qr = QRCode.encode(0, 2, wnnsjis)
    offx = (128 - (25 * 2)) / 2
    offy = 80
    c.set_source_rgb(0, 0, 0)
    for n in 0..24 do
      for m in 0..24 do
        if qr[n * 25 + m] == 1 then
          c.rectangle(m*2+offx, n*2+offy, 2, 2)
          c.fill()
        end
      end
    end
    lcd.write_cmd([0x2C])
    lcd.copyspi(c)

SJISでゴメンね>栗林さん

c++のコードを使っているので実行にはc++のライブラリが必要になります。

コアの部分はサイテックさんが公開されているコードを利用させてもらいました。ありがとうございます。

mruby-qrcodeはFreeBSDで作りましたが、特にOS依存はないはずなので、他のプラットフォームでも使えると思います。