Spaces:
Sleeping
Sleeping
| 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() | |