demo_gradio / app.py
cormort's picture
Update app.py
2ad1a13 verified
import gradio as gr
import qrcode
from PIL import Image
import io # 新增:用來處理圖片轉換的工具
def generate_qr(text):
# 如果輸入為空,回傳 None
if not text:
return None
# 設定 QR Code 參數
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(text)
qr.make(fit=True)
# 產生原始 QR Code 圖片 (這是特殊格式)
qr_img = qr.make_image(fill_color="black", back_color="white")
# --- 關鍵修正開始 ---
# 將特殊格式轉換為 Gradio 看得懂的標準 PIL 圖片
# 1. 建立一個在記憶體中的暫存區
img_buffer = io.BytesIO()
# 2. 把 QR Code 存進去
qr_img.save(img_buffer)
# 3. 把指標指回開頭
img_buffer.seek(0)
# 4. 重新開啟為標準圖片
final_img = Image.open(img_buffer)
# --- 關鍵修正結束 ---
return final_img
# 建立 Gradio 介面
with gr.Blocks(title="QR Code 產生器") as demo:
gr.Markdown("# 🔗 超簡單 QR Code 產生器")
gr.Markdown("輸入任何文字或網址,立刻產生 QR Code!")
with gr.Row():
with gr.Column():
text_input = gr.Textbox(label="請輸入網址或文字", placeholder="[https://www.google.com](https://www.google.com)")
submit_btn = gr.Button("產生 QR Code", variant="primary")
with gr.Column():
output_img = gr.Image(label="QR Code 結果", type="pil")
# 設定按鈕點擊事件
submit_btn.click(fn=generate_qr, inputs=text_input, outputs=output_img)
# 啟動應用
if __name__ == "__main__":
demo.launch()