File size: 2,457 Bytes
7324c34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import qrcode
import gradio as gr

def generate_qr_code(url, color, use_gradient, gradient_color1, gradient_color2, border_radius, logo):
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4
    )
    
    qr.add_data(url)
    qr.make(fit=True)

    qr_img = qr.make_image(fill_color=color)

    if use_gradient:
        qr_img = qr_img.convert("RGB")
        qr_pixels = qr_img.load()
        width, height = qr_img.size

        for y in range(height):
            for x in range(width):
                pixel = qr_pixels[x, y]
                gradient_ratio = x / width
                new_r = int((gradient_color2[0] - gradient_color1[0]) * gradient_ratio + gradient_color1[0])
                new_g = int((gradient_color2[1] - gradient_color1[1]) * gradient_ratio + gradient_color1[1])
                new_b = int((gradient_color2[2] - gradient_color1[2]) * gradient_ratio + gradient_color1[2])
                qr_pixels[x, y] = (new_r, new_g, new_b)

    if border_radius > 0:
        qr_img = qr_img.resize((qr_img.size[0] + (border_radius * 2), qr_img.size[1] + (border_radius * 2)))
        qr_img = qr_img.convert("RGBA")
        border_img = qrcode.image.svg.SvgPathImage(qr_img.size)
        border_img.path = border_img.rounded_rect((0, 0, *qr_img.size), border_radius)
        border_img.fill = qr_img
        qr_img = border_img

    if logo:
        qr_with_logo = qr_img.copy()
        logo_img = qrcode.image.open(logo)
        logo_width, logo_height = logo_img.size
        pos = ((qr_img.size[0] - logo_width) // 2, (qr_img.size[1] - logo_height) // 2)
        qr_with_logo.paste(logo_img, pos)
        qr_img = qr_with_logo

    return qr_img

inputs = [
    gr.inputs.Textbox(label="URL"),
    gr.inputs.Color(label="Color"),
    gr.inputs.Checkbox(label="Use Gradient"),
    gr.inputs.Color(label="Gradient Color 1"),
    gr.inputs.Color(label="Gradient Color 2"),
    gr.inputs.Number(label="Border Radius", min_value=0, max_value=50),
    gr.inputs.Image(label="Logo (optional)"),
]

output = gr.outputs.Image(label="QR Code")

def generate_qr_code_app(url, color, use_gradient, gradient_color1, gradient_color2, border_radius, logo):
    qr_code = generate_qr_code(url, color, use_gradient, gradient_color1, gradient_color2, border_radius, logo)
    return qr_code

gr.Interface(fn=generate_qr_code_app, inputs=inputs, outputs=output).launch()