File size: 2,059 Bytes
3f72bb9
0a595a8
3f72bb9
 
7cf86e5
 
3f72bb9
 
 
 
 
 
 
 
7cf86e5
9d4dce9
 
 
 
 
00617a2
7cf86e5
 
 
 
35429ce
7cf86e5
 
3f72bb9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9d4dce9
 
 
 
 
 
eef51fd
9d4dce9
3f72bb9
9d4dce9
 
7cf86e5
0a595a8
 
9d4dce9
 
7cf86e5
9d4dce9
7cf86e5
 
9d4dce9
 
 
 
 
 
 
 
 
 
 
 
00617a2
9d4dce9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import os
import time
import shutil
import requests
import gradio as gr

EN_US = os.getenv("LANG") != "zh_CN.UTF-8"
API_QR = os.getenv("api_qr")
if not API_QR:
    print("请检查环境变量")
    exit()


TMP_DIR = "./__pycache__"
ZH2EN = {
    "二维码输出尺寸": "Image size",
    "输入文本": "Input text",
    "输出二维码": "QR code",
    "输入文字在线生成二维码": "Enter text to generate a QR code.",
    "状态栏": "Status",
    "二维码生成器": "QR Code Generator",
}


def _L(zh_txt: str):
    return ZH2EN[zh_txt] if EN_US else zh_txt


def clean_dir(dir_path: str):
    if os.path.exists(dir_path):
        shutil.rmtree(dir_path)

    os.makedirs(dir_path)


def download_file(url, local_filename):
    clean_dir(os.path.dirname(local_filename))
    response = requests.get(url, stream=True)
    response.raise_for_status()
    with open(local_filename, "wb") as f:
        for chunk in response.iter_content(chunk_size=8192):
            f.write(chunk)

    return local_filename


def infer(img_size: int, input_txt: str):
    status = "Success"
    img = None
    try:
        if (not input_txt) or input_txt == "0":
            raise ValueError("Please input valid text!")

        img = download_file(
            f"{API_QR}/?size={img_size}x{img_size}&data={input_txt}" if EN_US else f"{API_QR}/?text={input_txt}&size={img_size}",
            f"{TMP_DIR}/qrcode.jpg",
        )

        time.sleep(0.1)

    except Exception as e:
        status = f"{e}"

    return status, img


if __name__ == "__main__":
    gr.Interface(
        fn=infer,
        inputs=[
            gr.Slider(35, 1000, 217, label=_L("二维码输出尺寸")),
            gr.Textbox(label=_L("输入文本"), placeholder=_L("输入文字在线生成二维码")),
        ],
        outputs=[
            gr.Textbox(label=_L("状态栏"), show_copy_button=True),
            gr.Image(label=_L("输出二维码"), show_share_button=False),
        ],
        flagging_mode="never",
        title=_L("二维码生成器")
    ).launch()