Kvikontent commited on
Commit
e992434
·
1 Parent(s): b823125

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -54
app.py CHANGED
@@ -1,72 +1,58 @@
1
-
2
  import gradio as gr
3
  import qrcode
4
 
5
- def generate_qrcode(url, color, gradient, gradient_colors, border_radius, logo):
 
6
  qr = qrcode.QRCode(
7
  version=1,
8
- error_correction=qrcode.constants.ERROR_CORRECT_H,
9
  box_size=10,
10
  border=4,
11
  )
12
-
 
13
  qr.add_data(url)
14
  qr.make(fit=True)
15
 
16
- qr_image = qr.make_image(fill_color=color, back_color="white")
17
-
18
- if gradient:
 
 
19
  qr_image = qr_image.convert("RGB")
20
- width, height = qr_image.size
21
- gradient_color1, gradient_color2 = gradient_colors
22
- for i in range(height):
23
- shift = int((i / height) * 255)
24
- fill_color = tuple(int(gradient_color1[c] + shift * (gradient_color2[c] - gradient_color1[c]) / 255) for c in range(3))
25
- for j in range(width):
26
- pixel = qr_image.getpixel((j, i))
27
- if pixel == (0, 0, 0):
28
- qr_image.putpixel((j, i), fill_color)
 
29
 
30
- if border_radius > 0:
31
- qr_image = qr_image.resize((qr_image.size[0] + border_radius*2, qr_image.size[1] + border_radius*2))
32
- qr_image = qr_image.convert("RGBA")
33
- width, height = qr_image.size
34
- border_radius = max(1, min(border_radius, int(width/2), int(height/2)))
35
- mask = Image.new('L', (width, height), 0)
36
- draw = ImageDraw.Draw(mask)
37
- draw.ellipse((0, 0, 2*border_radius, 2*border_radius), fill=255)
38
- draw.ellipse((width-2*border_radius, 0, width, 2*border_radius), fill=255)
39
- draw.ellipse((0, height-2*border_radius, 2*border_radius, height), fill=255)
40
- draw.ellipse((width-2*border_radius, height-2*border_radius, width, height), fill=255)
41
- alpha = Image.new('L', (width, height), int(255 * 0.5))
42
- qr_image.paste(alpha, (0, 0), mask)
43
 
44
- if logo is not None:
45
- logo_image = Image.open(logo).convert("RGBA")
46
- 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)
47
 
48
- qr_image.save("qr_code.png")
 
 
 
 
 
 
49
 
50
- return "qr_code.png"
51
 
52
- iface = gr.Interface(
53
- fn=generate_qrcode,
54
- inputs=[
55
- gr.inputs.Textbox(label="URL", default="example.com"),
56
- gr.ColorPicker(label="Color", default="#000000"),
57
- gr.Checkbox(label="Gradient", default=False),
58
- gr.ColorPicker(label="Gradient Colors", default=["#FFFFFF", "#000000"], nargs=2),
59
- gr.Number(label="Border Radius", default=0),
60
- gr.inputs.File(label="Logo")
61
- ],
62
- outputs="image",
63
  title="QR Code Generator",
64
- description="Enter a URL and customize the QR code appearance",
65
- examples=[
66
- ["instagram.com", "#FF0000", True, ["#FF00FF", "#00FFFF"], 10, None],
67
- ["twitter.com", "#00FF00", False, ["#FFFFFF", "#000000"], 0, "logo.png"],
68
- ["huggingface.co", "#0000FF", True, ["#FF00FF", "#00FFFF"], 15, "logo.png"]
69
- ]
70
- )
71
-
72
- iface.launch()
 
 
1
  import gradio as gr
2
  import qrcode
3
 
4
+ def generate_qr_code(url, gradient_color1, gradient_color2, logo, qr_color):
5
+ # Create QR code instance
6
  qr = qrcode.QRCode(
7
  version=1,
8
+ error_correction=qrcode.constants.ERROR_CORRECT_L,
9
  box_size=10,
10
  border=4,
11
  )
12
+
13
+ # Add URL to the QR code
14
  qr.add_data(url)
15
  qr.make(fit=True)
16
 
17
+ # Create the QR code image
18
+ qr_image = qr.make_image(fill_color=qr_color, back_color="#ffffff") # Set QR code color here
19
+
20
+ # Add gradient if colors are provided
21
+ if gradient_color1 and gradient_color2:
22
  qr_image = qr_image.convert("RGB")
23
+ qr_image = qr_image.resize((500, 500))
24
+
25
+ gradient = Image.new("RGB", qr_image.size)
26
+ grad = ImageDraw.Gradient(grad.size, "LR", gradient_color1, gradient_color2)
27
+ qr_image = Image.blend(qr_image, gradient, 0.5)
28
+
29
+ # Add logo if provided
30
+ if logo:
31
+ logo_image = Image.open(logo).convert("RGBA")
32
+ qr_image.paste(logo_image, (125, 125), logo_image)
33
 
34
+ # Save the QR code to a byte stream
35
+ qr_byte_stream = io.BytesIO()
36
+ qr_image.save(qr_byte_stream, format="PNG")
37
+ qr_byte_stream.seek(0)
 
 
 
 
 
 
 
 
 
38
 
39
+ return qr_byte_stream.read()
 
 
40
 
41
+ inputs = [
42
+ gr.inputs.Textbox(label="URL to Site"),
43
+ gr.inputs.ColorPicker(label="Gradient Color 1 (Optional)"),
44
+ gr.inputs.ColorPicker(label="Gradient Color 2 (Optional)"),
45
+ gr.inputs.Image(label="Logo (Optional)"),
46
+ gr.inputs.ColorPicker(label="QR Code Color"),
47
+ ]
48
 
49
+ outputs = gr.outputs.Image(type="bytes")
50
 
51
+ gr.Interface(
52
+ fn=generate_qr_code,
53
+ inputs=inputs,
54
+ outputs=outputs,
 
 
 
 
 
 
 
55
  title="QR Code Generator",
56
+ description="Generate QR codes with customizable options",
57
+ theme="huggingface",
58
+ ).launch()