File size: 2,266 Bytes
af74360
bcb8d08
e1f3ebd
af74360
 
3d156ef
 
 
 
 
b8adac9
3d156ef
 
 
 
af74360
 
9c6f546
 
 
af74360
b8adac9
af74360
9c6f546
3d156ef
9c6f546
bcb8d08
af74360
 
3d156ef
9c6f546
3d156ef
 
9c6f546
3d156ef
 
9c6f546
 
bcb8d08
af74360
 
9c6f546
 
3d156ef
 
9c6f546
 
 
 
 
 
e1f3ebd
3d156ef
cac2d9a
bcb8d08
 
3d156ef
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
import qrcode
from PIL import Image
import base64
import gradio as gr

def encode_file_to_base64(file_path):
    """Reads any file and encodes it to base64."""
    with open(file_path, "rb") as f:
        encoded_data = base64.b64encode(f.read()).decode("utf-8")
    return encoded_data

def generate_qr(data: str, error_correction: int = qrcode.constants.ERROR_CORRECT_L, box_size: int = 10, border: int = 4, fill_color: str = "black", back_color: str = "white"):
    """Generates a QR code from given data."""
    final_url = f"https://flowly-ai.vercel.app/tools/qr/qr-code/read/{data}"
    
    qr = qrcode.QRCode(
        version=1,
        error_correction=error_correction,
        box_size=box_size,
        border=border,
    )
    qr.add_data(final_url)
    qr.make(fit=True)
    img_qr = qr.make_image(fill_color=fill_color, back_color=back_color)
    
    output_path = "qr_code.png"
    img_qr.save(output_path)
    return output_path

def qr_code_interface(input_type, text, file, error_correction, box_size, border, fill_color, back_color):
    if input_type == "Text" and text:
        encoded_text = base64.b64encode(text.encode('utf-8')).decode('utf-8')
        return generate_qr(encoded_text, error_correction, box_size, border, fill_color, back_color)
    elif input_type == "File" and file:
        encoded_file = encode_file_to_base64(file.name)
        return generate_qr(encoded_file, error_correction, box_size, border, fill_color, back_color)
    else:
        return None

interface = gr.Interface(
    fn=qr_code_interface,
    inputs=[
        gr.Radio(["Text", "File"], label="Input Type", value="Text"),
        gr.Textbox(label="Enter Text"),
        gr.File(label="Upload File"),
        gr.Slider(0, 3, 1, label="Error Correction", value=0),
        gr.Slider(1, 20, 1, label="Box Size", value=10),
        gr.Slider(1, 10, 1, label="Border Size", value=4),
        gr.ColorPicker(label="QR Fill Color", value="#000000"),
        gr.ColorPicker(label="QR Background Color", value="#FFFFFF"),
    ],
    outputs=gr.Image(type="filepath", label="Generated QR Code"),
    description="Generate a QR Code from either text or any file with custom styles and colors.",
    css="footer {visibility: hidden}"
)

interface.launch(share=True)