Spaces:
Runtime error
Runtime error
File size: 2,762 Bytes
7324c34 cee8667 fb19d78 cee8667 7324c34 cee8667 7324c34 cee8667 7324c34 fb19d78 7324c34 cee8667 7324c34 cee8667 64f3bc6 cee8667 64f3bc6 cee8667 64f3bc6 |
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 |
import gradio as gr
import qrcode
def generate_qrcode(url, color, gradient, gradient_colors, border_radius, logo):
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data(url)
qr.make(fit=True)
qr_image = qr.make_image(fill_color=color, back_color="white")
if gradient:
qr_image = qr_image.convert("RGB")
width, height = qr_image.size
gradient_color1, gradient_color2 = gradient_colors
for i in range(height):
shift = int((i / height) * 255)
fill_color = tuple(int(gradient_color1[c] + shift * (gradient_color2[c] - gradient_color1[c]) / 255) for c in range(3))
for j in range(width):
pixel = qr_image.getpixel((j, i))
if pixel == (0, 0, 0):
qr_image.putpixel((j, i), fill_color)
if border_radius > 0:
qr_image = qr_image.resize((qr_image.size[0] + border_radius*2, qr_image.size[1] + border_radius*2))
qr_image = qr_image.convert("RGBA")
width, height = qr_image.size
border_radius = max(1, min(border_radius, int(width/2), int(height/2)))
mask = Image.new('L', (width, height), 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0, 2*border_radius, 2*border_radius), fill=255)
draw.ellipse((width-2*border_radius, 0, width, 2*border_radius), fill=255)
draw.ellipse((0, height-2*border_radius, 2*border_radius, height), fill=255)
draw.ellipse((width-2*border_radius, height-2*border_radius, width, height), fill=255)
alpha = Image.new('L', (width, height), int(255 * 0.5))
qr_image.paste(alpha, (0, 0), mask)
if logo is not None:
logo_image = Image.open(logo).convert("RGBA")
qr_image.paste(logo_image, (int((qr_image.size[0] - logo_image.size[0]) / 2), int((qr_image.size[1] - logo_image.size[1]) / 2)), logo_image)
qr_image.save("qr_code.png")
return "qr_code.png"
iface = gr.Interface(
fn=generate_qrcode,
inputs=[
gr.inputs.Textbox(label="URL"),
gr.ColorPicker(label="Color"),
gr.inputs.Checkbox(label="Gradient"),
gr.ColorPicker(label="Gradient Colors", n_colors=2),
gr.inputs.Number(label="Border Radius"),
gr.inputs.File(label="Logo")
],
outputs="image",
title="QR Code Generator",
description="Enter a URL and customize the QR code appearance",
examples=[
["instagram.com", "#FF0000", True, ["#FF0000", "#0000FF"], 10, None],
["twitter.com", "#00FF00", False, [], 0, "logo.png"],
["huggingface.co", "#0000FF", True, ["#FF0000", "#00FF00"], 15, "logo.png"]
]
)
iface.launch()
|