今回はQRコード生成アプリをStreamlitを使って作成していきたいと思います。
今回作成するアプリのイメージ
トップページ
QRコードにしたい文字列を入力してEnterを押すと生成できます。
スマホなどで読み込むと入力した文字になっていることが確認できます。
コード全体
! pip install qrcode
import streamlit as st
import qrcode
import io
from PIL import Image
# Streamlitアプリのタイトルを設定
st.title("QRコードジェネレーター")
# テキスト入力ボックスを作成
text_input = st.text_input("QRコードに変換するテキストを入力してください:")
if text_input:
# 入力されたテキストからQRコードを生成
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(text_input)
qr.make(fit=True)
qr_img = qr.make_image(fill_color="black", back_color="white")
# Pillowの画像オブジェクトをbytes-likeオブジェクトに変換
img_byte_array = io.BytesIO()
qr_img.save(img_byte_array, format="PNG")
# 生成したQRコードを表示
st.image(img_byte_array, use_column_width=True, caption="QRコード")
# Streamlitアプリを実行
if __name__ == "__main__":
st.write("QRコードを生成するテキストを入力してください。")
コードの詳細
ライブラリのインポート
このセクションでは、アプリケーションを作成するために必要なライブラリをインポートします。
import streamlit as st
import qrcode
import io
from PIL import Image
-
streamlit
: Streamlitライブラリは、ウェブアプリケーションを簡単に構築するためのツールです。テキストボックス、ボタン、グラフ、画像などのウェブ要素を簡単に追加できます。 -
qrcode
:qrcode
ライブラリは、QRコードを生成するためのツールです。テキストデータをQRコードに変換できます。 -
io
:io
ライブラリは、バイトデータの操作をサポートします。ここでは、画像データをバイト形式で処理するために使用されます。 -
PIL
(Python Imaging Library):PIL
ライブラリは、画像の生成と処理に使用されます。QRコードを画像として生成するために必要です。
テキスト入力ボックスを作成
text_input = st.text_input("QRコードに変換するテキストを入力してください:")
この部分では、Streamlitの text_input
関数を使用して、ユーザーがテキストを入力できるテキストボックスを作成しています。このボックスにユーザーがQRコードに変換したいテキストを入力します。
テキストが入力された場合の処理
if text_input:
# QRコードを生成
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(text_input)
qr.make(fit=True)
このセクションでは、ユーザーがテキストボックスにテキストを入力した場合の処理を行います。入力されたテキストからQRコードを生成するための準備を行います。
-
if text_input:
: この条件文は、ユーザーがテキストボックスにテキストを入力したかどうかを確認します。テキストが入力されている場合に処理が実行されます。 -
qr = qrcode.QRCode(...)
:qrcode
ライブラリを使用してQRコードを生成するためのQRCodeオブジェクトを作成します。このオブジェクトにはQRコードの詳細設定が含まれます。 -
qr.add_data(text_input)
:qr
オブジェクトにユーザーが入力したテキストを追加します。QRコードに変換するテキストデータがここで設定されます。 -
qr.make(fit=True)
: QRコードを生成します。fit=True
はQRコードのサイズを自動調整するオプションです。QRコードのデータとデザインが設定され、生成されたQRコードがqr
変数に格納されます。
QRコードの表示
qr_img = qr.make_image(fill_color="black", back_color="white")
# Pillowの画像オブジェクトをbytes-likeオブジェクトに変換
img_byte_array = io.BytesIO()
qr_img.save(img_byte_array, format="PNG")
# 生成したQRコードを表示
st.image(img_byte_array, use_column_width=True, caption="QRコード")
このセクションでは、生成したQRコードを表示するための準備と表示自体を行います。
-
qr_img = qr.make_image(fill_color="black", back_color="white")
:qr
オブジェクトからQRコード画像を生成します。この行ではQRコードのデザインを設定し、qr_img
変数に画像を格納します。例ではQRコードの背景を白く、データを黒く設定しています。 -
img_byte_array = io.BytesIO()
: QRコード画像をバイトデータに変換するための準備をします。io.BytesIO()
を使用して空のバイトストリームを作成します。 -
qr_img.save(img_byte_array, format="PNG")
: Pillowのsave
メソッドを使用してQRコード画像をPNG形式でimg_byte_array
に保存します。これにより、QRコード画像がバイトデータに変換されます。 -
st.image(img_byte_array, use_column_width=True, caption="QRコード")
: Streamlitのst.image
関数を使用して、生成したQRコード画像を表示します。use_column_width=True
は、画像をカラムの幅に合わせて自動調整するオプションです。caption
パラメーターは画像のキャプションを設定します。ここでは「QRコード」としています。
これにより、ユーザーが入力したテキストから生成されたQRコードがアプリに表示されます。