QRコード

参考が消えかかってるので。

このページは、G o o g l e で 2008年4月9日 05:28:21 GMT に保存された http://www.fraction.jp/log/archives/2006/10/1035 のキャッシュです。
G o o g l e のキャッシュとはウェブ クロール時に保存したページのスナップショップを指します。
そのため、このページの最新版でない場合があります。こちらから最新のページ(ハイライト表示なし)を参照してください。
このキャッシュ ページには、もはや参照できなくなっている画像が含まれている可能性があります。テキストのみのキャッシュ ページをご覧になるには、ここをクリックしてください。
このページへのリンクやお気に入りの登録には次の URL をお使いください: http://www.google.com/search?q=cache:K_VJ-wkF6XoJ:www.fraction.jp/log/archives/2006/10/1035+ruby+qr%E3%82%B3%E3%83%BC%E3%83%89&hl=ja&ct=clnk&cd=1&gl=jp&lr=lang_ja&client=firefox

Google はこのページの所有者と何ら提携関係はなく、そのコンテンツについても責任を負いかねます。
ハイライトされているキーワード: ruby qr コード
BONNOH FRACTION 13
世の中に寝るほど楽はなかりけり
浮世の馬鹿は起きて働く
検索用語を入力 検索フォームを送信

2006年10月12日(Thu)
RailsQRコードを生成する

QRコードクラスライブラリ for Rubyをダウンロードする。

QRコードpng画像で出力するにはruby-GDライブラリが必要とのこと。つーわけでlibpng3やらGDライブラリとともにruby-GDライブラリをインストール。私はパッケージ管理にFinkを使ってるので以下のようになった。
libpng3のインストール

[yuanying@Kiriko test]$sudo apt-get install libpng3
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
...

GDライブラリのインストール

[yuanying@Kiriko test]$sudo apt-get install gd2
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
gd-bin gd-shlibs libjpeg-shlibs
...

ruby-GDのインストール

RAAから最新版のruby-GDをダウンロードする。

ruby extconfコマンドでMakefileを生成するようだが、念のため--with-gd-include=/sw/include --with-gd-lib=/sw/libと指定する。Linuxの場合はデフォルトで多分平気。

[yuanying@Kiriko src]$wget http://raa.ruby-lang.org/cache/ruby-gd/ruby-GD-0.7.4-1.tar.gz
...
[yuanying@Kiriko src]$tar zxvf ruby-GD-0.7.4-1.tar.gz
ruby-GD-0.7.4/
...
[yuanying@Kiriko src]$tar zxvf ruby-GD-0.7.4.tar.gz
[yuanying@Kiriko src]$cd ruby-GD-0.7.4
[yuanying@Kiriko ruby-GD-0.7.4]$ruby extconf.rb --with-ttf --with-gd-include=/sw/include --with-gd-lib=/sw/lib --enable-gd2_0
...
[yuanying@Kiriko ruby-GD-0.7.4]$make
[yuanying@Kiriko ruby-GD-0.7.4]$sudo make install
/usr/bin/install -c -m 0755 GD.bundle /usr/local/lib/ruby/site_ruby/1.8/i686-darwin8.5.2

RailsアプリにQRコードライブラリを追加し設定を行う

QRコードを生成するRailsアプリのlibフォルダ以下にQRコードクラスライブラリ for Rubyを展開してやる。

[yuanying@Kiriko Downloads]$wget http://www.venus.dti.ne.jp/~swe/program/qrcode_rb0.50beta8.tar.gz
...
[yuanying@Kiriko Downloads]$tar zxvf qrcode_rb0.50beta8.tar.gz
qrcode_rb0.50beta8/
qrcode_rb0.50beta8/qrcode.rb
qrcode_rb0.50beta8/sample1.cgi
...
[yuanying@Kiriko Downloads]$cd qrcode_rb0.50beta8
[yuanying@Kiriko qrcode_rb0.50beta8]$ll
total 104

  • rw-r--r-- 1 yuanying yuanying 6246 5 27 13:05 README.txt
  • rw-r--r-- 1 yuanying yuanying 851 1 13 2003 b.png
  • rw-r--r-- 1 yuanying yuanying 848 1 13 2003 d.png
  • rwxr-xr-x 1 yuanying yuanying 16322 5 27 12:57 qrcode.rb*

drwxr-xr-x 233 yuanying yuanying 7922 12 26 2002 qrcode_data/

  • rwxr-xr-x 1 yuanying yuanying 1963 7 24 2004 qrcode_img.rb*
  • rwxr-xr-x 1 yuanying yuanying 514 7 24 2004 sample0.rb*
  • rwxr-xr-x 1 yuanying yuanying 715 1 13 2003 sample1.cgi*
  • rwxr-xr-x 1 yuanying yuanying 107 5 27 13:06 sample1.rb*
  • rwxr-xr-x 1 yuanying yuanying 653 5 29 2004 sample2.cgi*

[yuanying@Kiriko qrcode_rb0.50beta8]$cp -r * ~/project/rails/test/lib/

Readmeを読んでみると、

qrcode.rbの10行目

@path="./qrcode_data"

をデータディレクトリに合わせて変更してください。

と、書いてあるので、qrcode_dataディレクトリを適切に指定してやる。今回はライブラリをlibフォルダ以下につっこんだので、多分こうなる。

...
def initialize
@path="#{RAILS_ROOT}/lib/qrcode_data"

@qrcode_error_correct="M"
...

RailsアプリからQRコードを出力する

それではテストを兼ねてRailsアプリからQRコードを出力してみる。

QrCodeコントローラにindexというメソッドを追加し、以下のように記述する。

def index
require'qrcode_img'
@headers['Content-Type'] = 'image/png'
x = Qrcode_image.new
# GD::Imageオブジェクトが返る.
img = x.qrcode_image_out('http://www.fraction.jp/log/','png')
# 文字列として出力し、Content-Typeをimage/pngとする.
render :text => img.pngStr, :layout => false
img.destroy
end

サーバを起動し、http://localhost:3000/qr_codeにアクセスしてみる。

見れましたか?
アプリケーションエラーになっちゃう場合

本来ならこれで見れるんだけど、たぶん日本人が作ったアプリケーションだった場合、ほぼ確実にエラーがでてしまってQRコードが生成されない。Nasuta開発ブログの「QRコードの生成について」というエントリにあるようにどうやら文字コードの問題のようだ。

具体的に言うと日本語を利用したRailsアプリの場合、config/environment.rbで$KCODEを指定することが多いと思うのだけど、これを指定することによりRegexpクラスの挙動が変わってしまうことが原因。

$KCODEがスレッドローカルな変数だったのならQRコードを生成するメソッド内のみで$KCODEを指定し直せば良いと思われるが、残念ながらグローバルスコープの変数の模様。

というわけでqrcode.rbの方を修正する。qrcode.rbをvendorフォルダではなく、libフォルダにいれたのは修正作業や編集作業が発生するからだったのだ。

修正するのはqrcode.rbの591行目から606行目までのあたりで、Regexp.compileしているところ。

Regexp.compileに第三番目の引数を与えることによってRegexpエンコーディングフラグをデフォルトに変更しなおしてやる。

# FIX
demerit_n3 = (hor_temp.scan(Regexp.compile(n3_search, false, 'n')).size)*40

demerit_n4 = ((((ver.count(n4_search)*100) / byte_num)-50)/5).abs.to_i * 10

demerit_n2=0

# FIX
ptn_temp=ver_and.scan(Regexp.compile(n2_search1, false, 'n'))
ptn_temp.each{|te|
demerit_n2+=(te.length-1)
}
# FIX
ptn_temp=ver_or.scan(Regexp.compile(n2_search2, false, 'n'))
ptn_temp.each{|te|
demerit_n2+=(te.length-1)
}
demerit_n2*=3

# FIX
ptn_temp=hor.scan(Regexp.compile(n1_search, false, 'n'))

てか久しぶりに長文書いたなあ...。
関連エントリ

* RailsQRコードプラグイン 2007-07-24

Yuanying at 21時23分22秒 | Comments (0)

* Program/Ruby

Comments
Post your comment

Name

Email

URL

Comment
[It's All Text!]

Categories

* Rana
* 日記
* 独り言
* 漫画
* 小説
* Mac
* Mac/自宅サーバ
* iPhone
* PC/Linux
* PC/自宅サーバ
* PC/Windows
* Program/Java
* Program/Ruby
* Program/Python
* Program/JavaScript
* Program/Cocoa
* Program/技術
* ロッテマリーンズ
* Bioinfomatics

Link

* fraction.jp
* 煩悩分画
* 描画分画
* RanaTrac
* eralphaLog
* 不沈艦Log
* 書評生活
* この日記のはてなブックマーク
* google pagerank

あわせて読みたい
© 2004-2007 fraction.jp, All Rights Reserved.