テキストボックスに任意のURLを入れると、QRコードを生成する。
QRコードは、URLを埋め込むことができるので、
誰かに共有したいときにスマホのカメラから読み込むことができます。
Pythonを使ってQRコードを生成する際に、「pillow」(Pil)ライブラリを利用するケースが多いです。
本記事では「qrcode」と「Pillow」2つのPythonライブラリを使って、
QRコードを生成する方法とQRコードを「Tkinter」を使ってアプリ化する方法を紹介します。
さらに、pillowのライセンスについて解説し、商用利用が可能かどうかを確認します。
- (Python)自作のQRコードを作りたい。
- PythonのライブラリqrcodeとPillowの導入と使用方法を知りたい。
- Pillowの商用利用可能など利用規約について知りたい。
Pillow
Pillowは、Pythonで画像処理を行うためのライブラリです。
JPEG、PNG、BMPなど様々な画像形式に対応しており、
画像のサイズ変更や、回転、合成、クリッピング、フィルタリング、色調補正、テキストや図形の描画などの画像処理を行うことができます。
- 画像の読み込みと保存
画像ファイルを読み込み、別の形式で保存することができます。
from PIL import Image
# 画像を読み込む
image = Image.open("img.jpg")
# 画像を表示する
image.show()
# 画像をPNG形式で保存する
image.save("img.png")
- 画像のリサイズ
image.resize()で画像の比率・サイズを変えます。
# 画像のリサイズ
resized_image = image.resize((250, 200))
- 画像の回転
image.rotate(数値)で数値分だけ回転します。
# 画像を45度回転
rotated_image = image.rotate(45)
- 画像のフィルタリング
画像に対してフィルターを適用させます。
from PIL import ImageFilter
# 各フィルタの適用例
image_blur = image.filter(ImageFilter.BLUR)
image_contour = image.filter(ImageFilter.CONTOUR)
image_detail = image.filter(ImageFilter.DETAIL)
image_edge_enhance = image.filter(ImageFilter.EDGE_ENHANCE)
image_edge_enhance_more = image.filter(ImageFilter.EDGE_ENHANCE_MORE)
image_emboss = image.filter(ImageFilter.EMBOSS)
image_find_edges = image.filter(ImageFilter.FIND_EDGES)
image_sharpen = image.filter(ImageFilter.SHARPEN)
image_smooth = image.filter(ImageFilter.SMOOTH)
image_smooth_more = image.filter(ImageFilter.SMOOTH_MORE)
公式サイト:「Pillow」
Pillowライブラリのインストール
Pillowのインストールには以下の手順にしたがってください。
初めにコマンドプロンプト・ターミナルを開きます。
コマンドプロンプトの呼び出しは、Windowsキーを押す。
あるいは、ツールバーのWindowsマークを押します。
検索バーにて、「コマンドプロンプト」と入力します。
次に、pipを最新バージョンに更新します。省略しても構いません。
コマンドラインに以下のコードを入力して実行(Enterキー)します。
python -m pip install --upgrade pip
更新が完了したら、Pillowをインストールします。
先ほどと同様に以下のコードを実行させてください。
pip install Pillow
Pillowは商用利用可能?
Pillowはオープンソースの画像処理ライブラリであり、商用利用が可能です。
Pillowのライセンスは、オープンソースのHISTORIC PIL SOFTWARE LICENSEの下で提供されています。
以下に、Pillowのライセンスに関する情報とURLを記載します。
Permission to use, copy, modify, and distribute this software and its associated documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appears in all copies, and that both that copyright notice and this permission notice appear in supporting documentation,
github
and that the name of Secret Labs AB or the author not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission.
github
ランセンスの文を抜粋してまとめると、
Pillowライブラリは商用利用を含む使用が可能ですが、
配布する際には著作権表記と許可通知を適切に添付する必要があります。
また、広告や宣伝に使用する場合は、
Secret Labs ABや作成者の名前を使用する前に事前に書面での許可を得る必要があります。
ライセンス条項は変更していることがあるので、常に最新の規約に対応してください。
QRコード
QR(Quick Response)コードは、2次元バーコードの一つで、
日本のデンソーウェーブが1994年に開発し、
現在では世界中で広く利用されている情報を表現するための規格の一つです。
QRコードは、白黒のマス(セル)で構成されて、
数字・英字・漢字・カナ・記号などのデータを扱うことができます。
QRコードの特徴は、大容量の情報を小さなコードに表現できることや、どの角度からでもスキャナやスマートフォンなどのカメラで高速で読み取れること、破損や汚れに強いことが挙げられます。
この特徴を生かして、電子決済や商品管理、SNSのユーザーページ、ウェブサイトのURLなど、さまざまな場面に使われています。
参考ページ:「「QRコード」ってどういう仕組み?種類や歴史、使用時の注意点などを解説」
qrcodeライブラリのインスト―ル
qrcodeライブラリのインストールをします。
先ほどのpillowをインストールしたように、
コマンドプロンプトのコマンドラインに以下のコードを入力してください。
pip install qrcode
また、利用規約については、以下のURLが参考になるので、利用する際は一読してください。
※参考ページ
・「qrcode」
・「lincolnloop/python-qrcode」
ソースコード
2つのライブラリをインストールしたので、QRコードを作成していきます。
URLからQRコードはたったの3行で生成できます。
import qrcode
img = qrcode.make("https://alicia-ing.com/")
img.save("sample.png")
しかし、この3行では、QRコードがデフォルトで出力されてしまいます。
詳細にQRコード作成するには以下のソースコードを実行してください。
from PIL import Image
import qrcode
# QRコードを生成するデータを指定
data = 'https://alicia-ing.com/'
# QRコードを生成
qr = qrcode.QRCode(version=1, box_size=10, border=4)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
# 生成したQRコードをファイルに保存
img.save('qrcode.png')
# 生成したQRコードを表示
img.show()
UdemyでPythonを学習
Udemyは、オンデマンド式の学習講座です。
趣味から実務まで使えるおすすめの講座を紹介します。
- 現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
Pythonをインストールから環境設定、基本文法が学習
さらに暗号化、インフラ自動化、非同期処理についても学べます。
Pythonを基礎から応用まで学びたい人におすすめ
- みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2024年最新版】
機械学習ライブラリで文字認識や株価分析などを行う。
人口知能やニューラルネットワーク、機械学習を学びたい人におすすめ。
- 【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜
統計分析、機械学習の実装、ディープラーニングの実装を学習。
データサイエンティストになりたい人におすすめ。
- 0から始めるTkinterの使い方完全マスター講座〜Python×GUIの基礎・応用〜
TkinterのGUIを作成から発展的な操作までアプリ実例を示して学習。
アプリ開発したい人におすすめ。
解説
- ライブラリ
Pillow: 画像処理をします。Imageクラスをインポートしていますが、今回は直接使用していません。
qrcode: QRコードを生成します。
次に、QRコードを生成するためのデータを指定しています。
今回は本サイトのURLを指定しています。
- QRCodeオブジェクトを作成
version: QRコードのバージョンを指定します。バージョンが大きいほど、QRコードに含められるデータ量が増え、コードのサイズも大きくなります。version=1は最小の21×21のQRコードです。
box_size: QRコード内の各ボックス(セル)のピクセルサイズを指定します。
各ボックスのサイズを10ピクセルとしています。
border: QRコードの周りの空白のボーダーの幅を指定します。標準は4です。
QRコードを”qrcode.png”で画像として保存しています。
最後に生成されたQRコードの画像を表示しています。
実装
デバックすると、QRコードがpng形式で保存されます。
保存先は、本ソースコードであれば、スクリプトを配置させている場所、
要するに、Pythonのスクリプトがデスクトップにあれば、QRコードの画像もデスクトップに保存されます。
ユーザーが入力したURLをQRコード化
先ほどまでのスクリプトでは、特定のURL1つしか生成できず、
別のURLをQRコード化したいときはスクリプトから直接修正しなければいけません。
さらに、このQRコード作成はPythonの環境が整っているPCのみ有効です。
この不便さを解消するため、TkinterライブラリでPythonのアプリを作成して、さらにexe化します。
exe化で、PythonをインストールしていないパソコンでもQRコードを作成することができます。
ソースコード
import tkinter
import qrcode
# Tkinterウィンドウの設定
root = tkinter.Tk()
root.geometry("300x200")
root.title("Making QRcode")
# ラベル作成
lbl = tkinter.Label(text ="URL")
lbl.place(x=30,y=70)
# テキストボックス作成
txt = tkinter.Entry(width=20)
txt.place(x=90,y=70)
# ボタンがクリックされた時に呼び出される関数
def btn_click():
URL = txt.get() # 入力されたURLを取得
txt.delete(0, tkinter.END) # テキストボックスをクリア
# QRコードを生成
qr = qrcode.QRCode()
qr.add_data(URL)
img = qr.make_image(fill_color="black", back_color="white")
# 生成したQRコードを表示
img.show()
# QRコードを画像ファイルとして保存
img.save("qrcode.png")
# ボタン作成
btn = tkinter.Button(root,text="変換",command=btn_click)
btn.pack()
btn.place(x=140,y=170)
# ウィンドウを表示
root.mainloop()
解説
- Tkinterウィンドウ
geometry(“300×200”): ウィンドウサイズを300×200ピクセルに設定します。
title(“Making QRcode”): ウィンドウのタイトルを設定します。
ラベルを作成し、ウィンドウ内の指定された位置(x=30, y=70)に配置します。
テキストボックスを作成し、ウィンドウ内の指定された位置(x=90, y=70)に配置します。
- ボタンがクリックされた時に呼び出される関数
ボタンを作成し、btn_click関数をクリックイベントとして設定します。
また、ウィンドウ内の指定された位置(x=140, y=170)に配置します。
btn_click関数は、ボタンがクリックされたときに実行されます。
URL = txt.get(): テキストボックスから入力されたURLを取得します。
txt.delete(0, tkinter.END): テキストボックスをクリアします。
qr = qrcode.QRCode(): QRコードオブジェクトを作成します。
qr.add_data(URL): 入力されたURLをQRコードに追加します。
img = qr.make_image(fill_color=”black”, back_color=”white”): QRコードの画像を生成します。
img.show(): 生成したQRコードの画像を表示します。
img.save(“qrcode.png”): QRコードを”qrcode.png”として保存します。
Pythonスクリプトを実行をすると、冒頭で紹介したように表示されます。
まとめ
QRコードは、現在電子決済や商品管理、SNSのユーザーページ、ウェブサイトのURLなど、
さまざまな場面で使われています。
QRコードを生成するには、PythonのライブラリqrcodeとメソッドPillowを使用します。
Pillowは、画像のサイズ変更や、回転、合成、クリッピング、フィルタリング、色調補正、テキストや図形の描画などの画像処理を行い、JPEG、PNG、BMPなど様々な画像形式に対応しています。
Pillowの商用利用はライセンスの内容によると、”commercial use”ではなく、”distribute this software”であることが、懸念されますが、distribute は販売するという意味も含みますので、商用利用可能と考えてよいでしょう。
ただし、販売をするかしないかは各自でライセンスを確かめた上で自己責任でお願いいたします。