QrGen / app.py
Kvikontent's picture
Update app.py
67d17e1
raw
history blame
2.9 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
def generate_qr_code_app(url: str, color: str, use_gradient: bool, gradient_color1: str, gradient_color2: str,
border_radius: int, logo: gradio.inputs.Image):
qr_code = generate_qr_code(url, color, use_gradient, gradient_color1, gradient_color2, border_radius,
logo.item.filename if logo is not None else None)
return qr_code
inputs = [
gr.inputs.Textbox(label="URL"),
gr.inputs.ColorPicker(label="Color"),
gr.inputs.Checkbox(label="Use Gradient"),
gr.inputs.ColorPicker(label="Gradient Color 1"),
gr.inputs.ColorPicker(label="Gradient Color 2"),
gr.inputs.Number(label="Border Radius", default=0, min_value=0),
gr.inputs.Image(label="Logo (optional)")
]
output = gr.outputs.Image(label="QR Code")
examples = [
["https://instagram.com", "#E1306C", False, "#E1306C", "#4458A7", 0, None],
["https://twitter.com", "#1DA1F2", False, "#1DA1F2", "#124964", 5, None],
["https://huggingface.co", "#EE5A55", False, "#EE5A55", "#FBB040", 10, None]
]
gr.Interface(fn=generate_qr_code_app, inputs=inputs, outputs=output, examples=examples).launch()