1.プラグインを使用する
こちらはプラグインを使用する方法である。導入も簡単で、直ぐに使えるだろう。しかし、問題もある。
- JavaScriptを使用しているため、PCでしか使えない
- QRコードを画像でなく、tableタグとして実現するため、保存できない
参考
2.ライブラリを使用する
今回は携帯向けということで、こちらを使用する。こちらは、GDという画像を扱う為のライブラリを用いてQRコードを生成するため、携帯でも使えるし、画像として保存もできる。ただ、1の方法と比較すると、やや下準備が必要になる。
一発でruby-gdとgdを入れる方法
gem install ruby-gd -- --build-flag --with-freetype --with-jpeg --enable-gd2_0
これで、GDも一緒に入れてくれるみたい。僕は最初これを知らなかったので、以下からの手順をとった(泣)--with-jpegとかは、jpegを扱うためのライブラリを入れているのだろう。pngを扱いたいなら--with-pngとなるのかな。
GDライブラリに必要なライブラリをインストールする
GDは画像を扱うライブラリだが、GD自体も画像を扱うために他のライブラリの機能を使っている。例えば、PNG画像を扱うならzlib、libpngといった具合に。よって、それらをインストールする。
- zlib
[root@server src /]## wget http://jaist.dl.sourceforge.net/sourceforge/libpng/zlib-1.2.3.tar.gz [root@server src]# tar xvzf ./zlib-1.2.3.tar.gz [root@server src]# cd zlib-1.2.3 [root@server zlib-1.2.3]# ./configure [root@server zlib-1.2.3]# make [root@server zlib-1.2.3]# make install
- libpng
[root@server src]#wget http://prdownloads.sourceforge.net/libpng/libpng-1.2.23.tar.bz2 [root@server src]#tar xvjf ./libpng-1.2.23.tar.bz2 [root@server src]#cd libpng-1.2.23 [root@server libpng-1.2.23]#make -f scripts/makefile.linux CC=gcc ZLIBLIB=../zlib-1.2.3 ZLIBINC=../zlib-1.2.3
GDをインストールする
- yum(僕はこっちでやりました)
[root@server src]#yum install gd-devel
- yumでインストールできない場合(envのconfigureのオプションが怪しい・・・)
[root@server src]#wget http://www.boutell.com/gd/http/gd-2.0.33.tar.gz [root@server src]#tar xvzf ./gd-2.0.33.tar.gz [root@server src]#cd gd-2.0.33 [root@server gd-2.0.33]# env CPPFLAGS="-I../zlib-1.2.3 -I../libpng-1.2.8" LDFLAGS="-L../zlib-1.2.3 -L../libpng-1.2.8" ./configure [root@server gd-2.0.33]# make [root@server gd-2.0.33]# make install
ruby-gdをインストールする
gem install ruby-gd --enable-gd2_0
前述した通り、僕は後から一発でruby-gdもGDもインストールする方法に気がついた。実際このステップでは、以下のコマンドでインストールした。2度手間(泣)
gem install ruby-gd -- --build-flag --with-freetype --with-jpeg --enable-gd2_0
ライブラリの設定を行う
- Qrcode#pathの設定
@pathにデータディレクトリのパスを設定します。
今回は、lib下に設置したので、以下のようになります。
class Qrcode def initialize @path="#{RAILS_ROOT}/lib/qrcode/qrcode_data" @qrcode_error_correct="M" @qrcode_version=0 @qrcode_structureappend_n=0 @qrcode_structureappend_m=0 @qrcode_structureappend_parity="" @qrcode_structureappend_originaldata="" end
- アプリケーションエラー対策を行なう
上記の参考にあったサイトの以下の節を参考に、対策を施す。
「アプリケーションエラーになっちゃう場合」
表示用のコードを記述する
ここまでで設定は終わります。最後にQRコードを出力するコードをアプリケーションに追加します。また、注意として、基本的にdocomoはpng形式が使えない。また、ruby-gdもgifを扱わないようになったので、jpegで出力します。
- QRコードコントローラ
コントローラとして定義しておくと、imgタグから呼び出せて便利なので、コントローラとして抽出します。
- controller/util/qrcode_controller.rb
class Util::QrcodeController < ApplicationController def qrcode url = params[:url]+(params[:id] ? "&id="+params[:id] : "") qrcode = Qrcode_image.new gd = qrcode.qrcode_image_out(url,'jpeg') send_data gd.jpegStr(0),:type => 'image/jpeg',:disposition => 'inline' gd.destroy end end
最後に、ビューに、このアクションを呼び出すコードを追加します。
コード中のurl変数に、生成したいurlをセットします。imgタグのsrc属性を使ってアクションを呼び、その結果を表示という作戦です。
<% url = "http://test.co.jp?change=test&id=1" -%> QRコードはこちら <div style="text-align:center;"> <img src="/Util/Qrcode/qrcode/?url=<%= url %>" width="150" height="150" /> </div>