QRcode Perl/CGI & PHP scripts ver. 0.50i (c)2000-2009, Y.Swetake 1、このプログラムでできること。   このプログラムはperlあるいはPHPを用いてブラウザ上にQRcodeを  表示するためのものです。   perl版(qr_img.cgi)はコマンドラインからでも動作します。   このバージョンでは QRcode model2 の version 1〜40 に対応して  います。ただし以下の機能・モードは使用できません。   (1)、数字・英数字・8ビットモード以外のモード   (2)、コード内部でのモードの変更    などなど   #バージョン0.40より連結に試験的に対応しています。   #引数に漢字のURLエンコードデータを渡してやると変換効率は悪いですが    8ビットモードでエンコードすることはできますが正しく漢字と認識する    かはデコード側の環境によります。 2、内容 (ディレクトリ構造) qr_img0.50-+-perl--+- qr_img.cgi | +- qr_image.pl | +- qr_html.pl | +-data -+- qrvV_N.dat | +- rscX.dat | +- qrvfrV.dat | +-image-+- qrvV.png | +- b.png d.png | +-php -- qr_img.php  qr_img.cgi QRコード表示perl CGI(1つのimageを出力。ただしGDが必要。                     または複数の画像を組み合わせてhtmlで表示)  qr_image.pl  perl版のpng,jpegイメージ出力コード  qr_html.pl perl版のhtml出力コード  qrvV_N.dat   バージョンV,エラー訂正レベルN用データ  rscX.dat   エラー訂正語生成処理に用いる演算テーブル  qrvfrV.dat   バージョンV用固定領域データ(htmlモード用)  qrvV.png    バージョンV用固定イメージ(png,jpeg出力用)  b.png qr_img.cgiのhtmlモードで用いるpngファイル  d.png 同上  qr_img.php QRコード表示PHP(1つのimageを出力。ただしGDが必要。) README.txt このファイル README.sjis このファイルのShiftJIS版 README-e.txt 英語版ドキュメント  処理を高速化するため各種演算結果をdatファイルにまとめています。  そのため合計のファイルサイズが非常に大きくなっております。  あらかじめ使うバージョンが限られている場合は使用しないdatファイルは  削除しても問題ありません。  なおrscX.datについてはJIS X 0510の表15〜21RSブロックの項目で  (c,k,r)とある中のcとkの差がそれに該当します。  例えばバージョン1-Mは(26,16,4)とあるので26-16=10でrsc10.datを使用  します。 3、必要なもの  実行に必要なもの  perl版   ・WWWサーバー (perl CGIが動作するもの。)   ・perl5   以下のものはqr_img.cgiのPNG/JPEG出力に必要です。   ・GD     http://www.boutell.com/gd/   ・GD.pm     http://stein.cshl.org/WWW/software/GD/GD.html   ・libpng ・jpeg-6b    プログラム中の png を gif に変更すると古いgd(1.5以前)とそれ用のGD.pmでも   動作しますが特許関連の問題が絡む恐れがありますの使用者自身の責任でお使いくだ   さい。  PHP版   ・WWWサーバー   ・PHP4.1以降   ・GD   ・libpng  注:GD 2.0について    perl版,PHP版ともGD2.0.10未満およびPHP4.3.0バンドルの    GDではGDのバグにより正常に動作しません。    GD2.0.10以上をご使用ください。  動作確認環境   perl版・PHP版とも Linux 2.4.18    apache-1.3.27 + PHP-4.3.0(as apache module)    perl 5.6.1    GD 2.0.11    GD.pm 2.06  見るために必要なもの   ・WWWブラウザ 4、使用方法 4.1、設定 4.1.1、perl版      1行目の    #!/usr/bin/perl      をそのサーバーのperlへのパスを指定します。      次に下記を設定します # -------- setting area -------- # $path="./../data"; # ---You must set path to data files. # データファイル群("qrv*.dat","rsc*.dat")へのパスを指定します。 # デフォルトは同階層にある data ディレクトリです。 # ---- for PNG or JPEG image $image_path="./../image"; # ---You must set path to QRcode frame images. # 固定領域イメージ群(qrv*.png)へのパスを指定します。 # デフォルトは同階層にある image ディレクトリです。 # ---- for HTML mode $img_path4html=""; # ---You must set path to b.png and d.png. # Default setting is document root. #  HTMLモードの設定を行います。 #  同梱しているb.png d.pngを置いた場所へのパスまたはURLを指定します。 #  これらはドキュメントルートからのパスあるいはURLになります。 #  たとえばドキュメントルート下のimgディレクトリにおいたならば # #   $img_path4html="/img"; # #   となります。 @img_fn=("b.png","d.png"); # In html mode,image size depends these files. # #  画像ファイルの名前を変更したい場合は"b.png","d.png"の部分を変更します。 #  htmlモードではイメージのサイズはこのファイルの画像の大きさに依存します。 # $always_html_mode=0; # #  1を設定すると常にhtmlモードで出力します。 # $version_ul=40; # # バージョンの上限を指定できます。値は1から40の整数です。 # # # ------- setting area end -------- 4.1.2、PHP版 下記を設定します。 /* ------ setting area ------ */ $path="./../data"; /* You must set the path to data files. */ # データファイル群("qrv*.dat","rsc*.dat")へのパスを指定します。 # デフォルトは同階層にある data ディレクトリです。 $image_path="./../image"; /* You must set path to QRcode frame images. */ # 固定領域イメージ群(qrvN.png)へのパスを指定します。 # デフォルトは同階層にある image ディレクトリです。 $version_ul=40; /* upper limit for version */ #バージョンの上限を指定できます。値は1から40の整数です。 /* ------ setting area end ------ */ 4.2、書式 4.2.1、ブラウザからの呼び出し    qr_img.cgi?d=data[&e=(L,M,Q,H)][&s=int size][&v=(1-40)][&t=(J,H)]     [&m=(1-16)&n=(2-16)[&o=original data][&p=(0-255)]]    qr_img.php?d=data[&e=(L,M,Q,H)][&s=int size][&v=(1-40)][&t=J]     [&m=(1-16)&n=(2-16)[&o=original data][&p=(0-255)]]    d:QRコード化するデータです。特殊文字や8bit文字はURLencodeされている     必要があります。(漢字や'%'は%+16進表記、空白は'+'等)     容量を超えるとエラー表示となります。     このパラメータは省略できません。    e:エラー訂正レベル     エラー訂正レベルを指定します。     指定できるのはL,M,Q,Hの4種類で省略した場合 M が選択されます。    s:モジュールサイズ     モジュールサイズを指定します。     指定できるのは1以上の整数でこの値でイメージのサイズが決定されます。     省略した場合 4(png) または 8(jpeg) が選択されます。     htmlモードでは意味を持ちません。    v:バージョン     バージョンを指定します。     このプログラムで指定できるバージョンは1〜40です。     省略した場合はプログラムが自動選択します。    t:画像タイプ     画像タイプを指定します。     省略した場合や下記文字以外はPNGを出力します。     Jを指定するとjpegで出力します。     Hを指定するとhtmlモードで出力します。     なおjpegでの出力はGDがjpeg対応している必要があります。   ※以下は連結モード用のパラメータです。現在試験的に対応しています。    m:連結の何個目のイメージか    n:全部で何個のイメージがあるか    o:元のデータ(URLエンコードされている必要があります。)    p:元データから算出したパリティ値(各文字のアスキー値を排他論理和したもの)    連結を指定するときはmとnは必須です。    またoまたはpのいずれかを必ず指定する必要があります。    例:abcdefgabcdefg0を2つに分割するとき    1つめのイメージ qr_img.cgi?d=abcdefg&n=2&m=1&o=abcdefgabcdefg0    2つめのイメージ qr_img.cgi?d=abcdefg0&n=2&m=2&o=abcdefgabcdefg0     またはあらかじめパリティ値を計算しておいて    1つめのイメージ      qr_img.cgi?d=abcdefg&n=2&m=1&p=48    2つめのイメージ qr_img.cgi?d=abcdefg0&n=2&m=2&p=48 4.2.2、コマンドラインモード   qr_img.cgiはコマンドラインからも実行できます。   引数間は空白で区切ります。   引数dでデータを渡す場合はCGI同様データはURLエンコードされている必要があります。   例1    $ ./qr_img.cgi d=This+is+a+pen e=L s=3 > qrcode.png   標準入力からデータを渡す場合は生データのままでOKです。   例2    $ ./qr_img.cgi e=H < data.txt > qrcode.png 5、注意事項   下記承知の上ご使用ください。   (1)このプログラムのマスク判定ルーチンはおそらく規格と異なります。     (一応JIS X 0510にある図1と付属書8の例の結果とは合うようにし      ています。)     (マスクの選択を誤っても実使用上は問題ないと思いますが。)   (2)連結モードは試験的導入です。   (3)その他実際の規格と異なる動作をする恐れが多分にあります。      使用の際は出力されたシンボルが確実に読めるかのテストを行うことを      お勧めします。特にバージョン29以上のシンボルは作者の手持ちリー      ダの性能の都合上検証ができていませんので使用の際は特にご注意願い      ます。   (4)本プログラムは「のろま」です。大きいバージョンをエンコードする      場合はご注意ください。(タイムアウトするかもしれません。) 6、著作権・配布など   これらのプログラムの著作権は作者であるY.Swetakeにあります。   これらのプログラムはフリーウエアです。もとの著作権表示を変更しなければ  自由に再配布・改造してもかまいません。 7、免責事項   これらのプログラムによって生じるあらゆる損害・不利益について、作者は  一切責任を負いません。   作者はこれらのプログラムに不備があっても、それを訂正する義務を負いま  せん。 8、その他  最新版は下記のページからたどれます。   http://www.swetake.com/  ご意見・不具合などあれば下記まで   e-mail: swe[あっと]venus.dti.ne.jp   [あっと]を適当な記号に書き換えてください。 9、更新履歴 2009/11/10 ver.0.50i ・PHP版においてpreg_match関数中の正規表現記載ミスを修正。 2009/11/8 ver.0.50h ・PHP版において、PHP5.3.0から非推奨となったereg関数をpreg_match関数に         書き換えた。(なお、以前のereg関数で"-"がうまくマッチせず、エンコード         モードの自動判別が誤っていた不具合もpreg_matchに変更することにより解消した。        ・Perl版において念のため正規表現の記述を変更した。[]内の\-を一番最後に書くようにした。         なお特に0.50gで問題が起きていなければバージョンアップをする必要はないと思われます。 2005/7/23 ver.0.50g ・特定のパラメータの組み合わせでサーバー上のリソースを過剰に         消費する不具合を修正。 ・バージョンの上限を指定できる変数を追加。 2005/7/21 ver.0.50f ・perl版における引数vのチェックを修正 ・php版のマスク選択処理を一部変更(thanks for Mr.Bru, Franky) 2004/7/19 ver.0.50e ・php版のalphanumericモードで記号が正しくエンコードできない 不具合を修正 ・rsc36.dat rsc52.datの計算間違いを修正。 (なおこれらのファイルはmodel2では使用しません) 2003/10/5 ver.0.50d ・perl/cgi版htmlモードにて $img_path4html の設定が  反映されていない不具合修正 2003/6/19 ver.0.50c ・マスク選択処理一部変更 ・ドキュメント改定 2003/5/24 ver.0.50b ・ドキュメントの改定 2003/4/13 ver.0.50a ・ファイルオープン処理の修正(バイナリモード明記) ・エラー処理部修正 ・ドキュメントの改定(GD2.0に関する注記追記) 2002/9/21 ver.0.50 ・バージョン1-40対応 ・処理速度向上のため以下のルーチンを大幅見直し          エラー訂正語生成処理          マスク選択処理    等 2002/5/26 ver.0.40 ・連結に試験的に対応(動作・不具合報告歓迎致します。)        ・qr_html.cgi とqr_img.cgiを統合         qr_img.cgi の引数t=Hを指定することによりhtml出力とした。        ・PHP版において外部変数の取り込みをsuperグローバル関数による         ものに変更した。(デフォルトはGET)        ・マスクの選択機能廃止        ・その他、コードのメンテナンス。 2002/2/10 ver.0.31        ・jpeg出力に対応   2001/4/30 ver.0.30        ・マスク選択ルーチン更新。JIS X 0510の図1および         付属書8図2の結果と合うように変更。         (これにともないデータファイルの構成変更。)        ・version 1-9 対応。        ・qr_img.cgiのコマンドライン対応   2001/3/30 ver.0.20a        ・CGI版にてマスク選択パラメータ処理が不正なため        ・マスクが常に0となっていた不具合を修正。        ・CGI版は任意のマスクパターン選択機能廃止。 2001/3/9 ver. 0.20        ・version 1-6 対応         それに伴いデータ処理・ECCルーチン等大幅変更。 2001/2/11 ver. 0.10B        ・処理ルーチン更新。処理速度20〜30%up。        ・PHP版追加。   2000/9/11 ver. 0.10 公開        (version1の数字・英数字・8bitモードのみサポート) [eof]