【Python】pillowライセンス-URLからQRコード作成

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと以下の実行ができます

テキストボックスに任意のURLを入れると、QRコードを生成する。

QRコードは、URLを埋め込むことができるので、
誰かに共有したいときにスマホのカメラから読み込むことができます。

Pythonを使ってQRコードを生成する際に、「pillow」ライブラリを利用するケースが多いです。

本記事では「qrcode」と「Pillow」2つのPythonライブラリを使って、QRコードを生成する方法とQRコードを「Tkinter」を使ってアプリ化する方法を紹介します。
さらに、pillowのライセンスについて解説し、商用利用が可能かどうかを確認します。

本記事は次の人におすすめ
  • (Python)自作のQRコードを作りたい。
  • PythonのライブラリqrcodePillowの導入と使用方法を知りたい。
  • Pillowの商用利用可能など利用規約について知りたい。
スポンサーリンク

Pillow

Pillowは、Pythonで画像処理を行うためのライブラリです。JPEG、PNG、BMPなど様々な画像形式に対応しており、画像のサイズ変更や、回転、合成、クリッピング、フィルタリング、色調補正、テキストや図形の描画などの画像処理を行うことができます。

  • 画像の読み込みと保存

画像ファイルを読み込み、別の形式で保存することができます。

from PIL import Image

# 画像を読み込む
image = Image.open("img.jpg")

# 画像を表示する
image.show()

# 画像をPNG形式で保存する
image.save("img.png")
画像拡張子を一括変換には、os モジュールを使用します。
  • 画像のリサイズ

image.resize()で画像の比率・サイズを変えます。

# 画像のリサイズ
resized_image = image.resize((250, 200))
  • 画像の回転

image.rotate(数値)で数値分だけ回転します。

# 画像を45度回転
rotated_image = image.rotate(45)
  • 画像のフィルタリング

画像に対してフィルターを適用させます。

フィルタの種類
  • BLUR – ぼかし
  • CONTOUR – 輪郭抽出
  • DETAIL – 詳細強調
  • EDGE_ENHANCE – エッジ強調
  • EDGE_ENHANCE_MORE – エッジ強調(強)
  • EMBOSS – エンボス
  • FIND_EDGES – エッジ検出
  • SHARPEN – シャープ化
  • SMOOTH – 平滑化
  • SMOOTH_MORE – 平滑化(強)
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を記載します。

Pillow/LICENSE

許可事項
  • ソフトウェアの使用
  • ソフトウェアの複製
  • ソフトウェアの変更
  • ソフトウェアに関連するドキュメント配布
条件
  • 対象物に著作権表記
  • 許可通知の添付

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
禁止事項

広告および宣伝: Secret Labs ABまたは作成者の名前を、事前に書面での特定の許可を得ずに、ソフトウェアの配布に関連する広告または宣伝に使用してはなりません。

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()

Pythonの学習進め方

Pythonでできることは多岐に渡ります。

Pythonでできること
  • 機械学習・人工知能
  • データ解析・統計分析
  • ファイル操作・システム管理
  • GUIアプリ開発

Pythonは強力で柔軟なプログラミング言語ですが、常に情報がアップデートされるので、
新しいライブラリやフレームワークを独学で学び続けることは困難です。

Udemyは動画で目的に応じた講座を受講できるのでレベルを合わせて学習できます。
購入した講座は再生・停止・スキップなどが可能なオンデマンド形式なので、
専門的な内容を自分のペースで独学できます。

Udemyの特徴
  • プロのエンジニアによる講習が受けられる
  • 自分のペースで学習を進められる
  • オンデマンド形式だから何度でも視聴可能
  • 不満足なコースは視聴していても返金可能返金ポリシー

Pythonでデータサイエンスや人工知能、GUIを学びたい人はUdemy学習を取り入れましょう。
数多くある講座の中から特におすすめな講座を5つ紹介します。

夏のビックセール開催中(9月17日まで)
対象のコースが1500円から(最大95%OFF)

多彩な講座から自分に合った講座を探そう!

最大95%OFF

終了まで

時間

Pythonをインストールから環境設定、基本文法が学習できる。さらに、モジュールの使い方やファイル操作の他に暗号化、並列化、インフラ自動化、キューイングシステム、非同期処理についても学べます。

Pythonの基礎を押さえつつ、人口知能やニューラルネットワーク、機械学習を取り扱う。機械学習ライブラリで文字認識や株価分析などを行う。

データサイエンティストになるために必要なツールについて学ぶことができる。統計分析、NumpyやPandasなどを使ったPythonのプログラミング、機械学習の実装、ディープラーニングの実装を学習できる。

PythonでGUIを作成する方法を取り扱う。Tkinterの発展的な操作まで学習できる。翻訳アプリ、家計簿アプリ、電卓アプリ、音楽再生アプリなど作成して、exeファイル化する。

解説

  • ライブラリ

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コードを作成することができます。

Pythonスクリプトのexe化は以下の記事で紹介しています。

ソースコード

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)に配置します。

Tkinterラベルの使い方を紹介しています。
  • ボタンがクリックされた時に呼び出される関数

ボタンを作成し、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”として保存します。

Buttonの解説をしています。

Pythonスクリプトを実行をすると、冒頭で紹介したように表示されます。

まとめ

QRコードは、現在電子決済や商品管理、SNSのユーザーページ、ウェブサイトのURLなど、
さまざまな場面で使われています。

QRコードを生成するには、PythonのライブラリqrcodeとメソッドPillowを使用します。

Pillowは、画像のサイズ変更や、回転、合成、クリッピング、フィルタリング、色調補正、テキストや図形の描画などの画像処理を行い、JPEG、PNG、BMPなど様々な画像形式に対応しています。

Pillowの商用利用はライセンスの内容によると、”commercial use”ではなく、”distribute this software”であることが、懸念されますが、distribute は販売するという意味も含みますので、商用利用可能と考えてよいでしょう。
ただし、販売をするかしないかは各自でライセンスを確かめた上で自己責任でお願いいたします。

この記事を書いた人

プロフィール

アリッシア

                 

大学4年間で何か胸を張れるスキルを身に着けたくて当サイト運営を始めました。
現在、大学院に進学するか就職するか迷いながら勉強しています。
詳しいプロフィールはこちら

Contact icon

contact

X icon

X

Instagram icon

Instagram

Note icon

Note

スポンサーリンク
Python
フォローする
タイトルとURLをコピーしました