QrGen / app.py
Kvikontent's picture
Create app.py
7324c34
raw
history blame
2.46 kB
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()