QRコード
今回はちょっと前からやりたかったPythonでQRコードを作成する方法を試していきます。
ちなみに特になぜやりたいかという理由はなく、例えばこのブログを人に紹介する時にQRコードがあったらかっこいいかなとか、TwitterでQRコード付きのツイートしたら面白いかなとかそんなレベルです。
さてそのQRコードですが、デンソーウェーブというトヨタのグループ会社デンソーの子会社が開発した技術で、特許も持っているそうです。
ただデンソーウェーブがQRコードを広めるため、規格に合うものに関しては特許権を行使しないと宣言しているので、誰でも自由に使える技術になっています。
気をつけるべきは「QRコード」はデンソーウェーブが商標登録しているので、「QRコード」という「QRコードは(株)デンソーウェーブの登録商標です」という一文がいるそうです。
ということでここでもしっかり書いておきましょう。
QRコードは(株)デンソーウェーブの登録商標です
あとはありがたく使わせていただきましょう。
それでは始めていきましょう。
QRcodeライブラリのインストール
まずはPythonでQRコードを生成するためのライブラリ「QRcode」をインストールしていきます。
pip install qrcode
最後に「Successfully installed qrcode-X.X.X」(X.X.Xはバージョン)と表示されればインストール完了です。
QRコードの生成
色々条件をいじれるらしいのですが、まずはとりあえずQRコードを表示してみましょう。
import qrcode
img = qrcode.make('https://3pysci.com')
img.save('./qrcode1-1.png')
実行結果
これだけでQRコードを作成し、保存することができます。
つまり「qrcode.make(‘QRコードにするテキスト’)」でQRコードにして、「.save(‘保存する場所’)」で保存というわけです。
ちなみに出力はPIL(Python Image Library)形式なので、先ほどの「.save(‘保存する場所’)」はPILのコマンドのようです。
ということでよかったらこちらの記事もどうぞ。
version
それではもう少し細かい設定ができるようにしていきましょう。
先ほどの「qrcode.make」にオプションを追加するのではなく、プログラムが少し複雑になります。
qr = qrcode.QRCode()
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-1.png')
「qrcode.QRCode」でまずQRコードの条件の定義をし、「.add_data」でテキストデータの追加。
「qr.make」でQRコードのデータを作成し、「.make_image」でQRコードの画像を作成するという流れだと思われます。
この中でQRコードの条件をオプションとして追加するのは、「qrcode.QRCode」です。
ということで、まずは「version」というオプションを試してみます。
この「version」というのは、QRコードの白黒のセルの数を制御する値のことです。
単純にいうとセルの数が増えれば、その分入れ込める情報量が増えます。
そしてそのセルの数を1〜40という単純な数値で表しており、実際は縦横のドット数は21〜177まで変化します。
まずは「version=1」を試してみます。
qr = qrcode.QRCode(version=1)
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-2.png')
実行結果
次に「version=10」。
qr = qrcode.QRCode(version=10)
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-3.png')
実行結果
「version=20」。
そして最大値である「version=40」はこんな感じです。
かなり様相が変わってびっくりしました。
Box_size
次に「Box_size」というオプションをいじってみます。
こちらはセルの大きさを制御するためのオプションです。
例えば「box_size=1」とするとこんな感じ。
qr = qrcode.QRCode(box_size=1)
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-6.png')
実行結果
「box_size=10」。
qr = qrcode.QRCode(box_size=10)
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-7.png')
実行結果
そして「box_size=20」だとこんな感じです。
qr = qrcode.QRCode(box_size=20)
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-8.png')
実行結果
QRコードのセルの配置は変わらず、サイズだけが変わったのが分かりますでしょうか。
border
次は「border」で、QRコードの周りの余白のサイズです。
今回は分かりにくいので、画像に枠をつけておきます(実際の出力には枠はありません)。
まずは「border=1」
qr = qrcode.QRCode(border=1)
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-9.png')
実行結果
「border=5」。
qr = qrcode.QRCode(border=5)
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-10.png')
実行結果
そして「border=10」。
qr = qrcode.QRCode(border=10)
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-11.png')
実行結果
確かに外枠が大きくなっているのが分かります。
qrcode.constants.ERROR_CORRECT
次は「qrcode.constants.ERROR_CORRECT_」というオプションで、誤り訂正機能に関してです。
誤り訂正機能とは、例えばQRコードが汚れたり、破損していることでセルの一部が使えない状態になっていても、正しく読み込めるようにするための機能です。
実は先ほどのオプションは最後にもう一文字加えて使います。
その一文字は誤り訂正機能のレベルによって決まり、こちらの4段階あります。
レベル | 誤り訂正能力 |
L | 約7% |
M | 約15% |
Q | 約25% |
H | 約30% |
ただもちろんレベルを上げれば上げるほど、同じデータが何度もセルとして表示されることになるので、セルの数は多くなります。
ということで試してみましょう。
まずは「qrcode.constants.ERROR_CORRECT_L」です。
qr = qrcode.QRCode(qrcode.constants.ERROR_CORRECT_L)
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-12.png')
実行結果
次に「qrcode.constants.ERROR_CORRECT_M」です。
qr = qrcode.QRCode(qrcode.constants.ERROR_CORRECT_M)
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-13.png')
実行結果
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-14-f7d5622331f8> in <module>
1 qr = qrcode.QRCode(qrcode.constants.ERROR_CORRECT_M)
2 qr.add_data('https://3pysci.com')
----> 3 qr.make()
4 img = qr.make_image()
5 img.save('./qrcode1-13.png')
(中略)
ValueError: Invalid version (was 0, expected 1 to 40)
何故か「qrcode.constants.ERROR_CORRECT_M」はエラーになりました。
次に「qrcode.constants.ERROR_CORRECT_Q」。
qr = qrcode.QRCode(qrcode.constants.ERROR_CORRECT_Q)
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-14.png')
実行結果
「qrcode.constants.ERROR_CORRECT_L」と比べると少し複雑になった気がします。
最後に「qrcode.constants.ERROR_CORRECT_H」。
qr = qrcode.QRCode(qrcode.constants.ERROR_CORRECT_H)
qr.add_data('https://3pysci.com')
qr.make()
img = qr.make_image()
img.save('./qrcode1-15.png')
実行結果
こっちは最初に戻ってしまった気がします。
多分ですが、今回は扱っている情報量が少ないため、誤り訂正機能のレベルを上げても影響が少ないか、無かったのではないかと考えられます。
誤り訂正機能に関しては、屋外のような汚れたり、傷ついたりするような環境の時に考えればいいのかなと思います。
ということで今回はQRコードの作成に関して勉強してきました。
色々やった中での自分の結論としては、余程のことがない限りデフォルトで、つまり「qrcode.make(‘QRコードにするテキスト’)」のコマンドでQRコードを生成すればいいのかなと思いました。
ということで今回はQRコードの作成方法に関して解説してみました。
結構簡単で面白い機能なので、これで一つ何か面白いことができたらなぁと考えていますが、なかなか思い浮かばないので、そのうちに思いついたら試して、また記事にしていきたいと思います。
ではでは今回はこんな感じで。
コメント