Amaanali01 commited on
Commit
ce7a55a
·
verified ·
1 Parent(s): 6b1a3c6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -27
app.py CHANGED
@@ -1,6 +1,6 @@
1
  import gradio as gr
2
  import qrcode
3
- from PIL import Image, ImageDraw
4
  import uuid
5
  import re
6
 
@@ -16,54 +16,63 @@ def generate_qr(data, fg_color, bg_color, logo):
16
  if not data:
17
  raise gr.Error("Please enter text or URL!")
18
 
 
19
  fg_color = rgba_to_hex(fg_color)
20
  bg_color = rgba_to_hex(bg_color)
21
 
 
 
 
 
 
 
22
  qr = qrcode.QRCode(
23
- version=4, # more blocks = better scan reliability
24
  box_size=10,
25
  border=4,
26
  error_correction=qrcode.constants.ERROR_CORRECT_H
27
  )
 
28
  qr.add_data(data)
29
  qr.make(fit=True)
30
 
31
  img = qr.make_image(fill_color=fg_color, back_color=bg_color).convert("RGB")
32
 
33
- # Add logo
34
  if logo:
35
  logo_img = Image.open(logo).convert("RGBA")
36
 
37
  qr_w, qr_h = img.size
38
- logo_size = int(qr_w * 0.15) # 🔥 15% = SAFE FOR SCANNING
39
- logo_img = logo_img.resize((logo_size, logo_size))
40
 
41
- # Add white background box behind logo
42
- white_box = Image.new("RGB", (logo_size + 12, logo_size + 12), "white")
 
43
 
44
- pos = ((qr_w - white_box.width) // 2, (qr_h - white_box.height) // 2)
 
 
 
 
45
 
46
- # Paste white padding box
 
47
  img.paste(white_box, pos)
48
 
49
- # Paste logo centered on top of the white box
50
- logo_pos = (pos[0] + 6, pos[1] + 6)
51
- img.paste(logo_img, logo_pos, mask=logo_img)
52
 
53
  return img
54
 
55
 
56
  def save_qr(data, fg_color, bg_color, logo):
57
  img = generate_qr(data, fg_color, bg_color, logo)
58
-
59
- filename = f"qr_{uuid.uuid4().hex}.png"
60
- path = f"/tmp/{filename}"
61
- img.save(path)
62
- return path
63
 
64
 
65
- with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", neutral_hue="slate")) as demo:
66
- gr.Markdown("## 🌙 QR Code Generator (Scannable + Logo + Colors)")
67
 
68
  text = gr.Textbox(label="Enter Text / URL")
69
 
@@ -79,14 +88,6 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", neutral_hue="slate")) as
79
 
80
  output = gr.Image(label="QR Code Preview")
81
 
82
- with gr.Accordion("Guideline", open=False):
83
- gr.Markdown("""
84
- **Tips for Best Results**
85
- - Use small logo (max 15% of QR size)
86
- - Keep error correction high
87
- - Use strong contrast between FG/BG
88
- """)
89
-
90
  generate.click(generate_qr, [text, fg_color, bg_color, logo], output)
91
  download.click(save_qr, [text, fg_color, bg_color, logo], gr.File())
92
 
 
1
  import gradio as gr
2
  import qrcode
3
+ from PIL import Image
4
  import uuid
5
  import re
6
 
 
16
  if not data:
17
  raise gr.Error("Please enter text or URL!")
18
 
19
+ # Convert colors
20
  fg_color = rgba_to_hex(fg_color)
21
  bg_color = rgba_to_hex(bg_color)
22
 
23
+ # Ensure contrast (optional safety)
24
+ if fg_color.lower() == bg_color.lower():
25
+ fg_color = "#000000"
26
+ bg_color = "#FFFFFF"
27
+
28
+ # Larger QR for safe scanning
29
  qr = qrcode.QRCode(
30
+ version=8, # BIG QR more modules → reliable
31
  box_size=10,
32
  border=4,
33
  error_correction=qrcode.constants.ERROR_CORRECT_H
34
  )
35
+
36
  qr.add_data(data)
37
  qr.make(fit=True)
38
 
39
  img = qr.make_image(fill_color=fg_color, back_color=bg_color).convert("RGB")
40
 
41
+ # Add logo safely
42
  if logo:
43
  logo_img = Image.open(logo).convert("RGBA")
44
 
45
  qr_w, qr_h = img.size
 
 
46
 
47
+ # Safe logo size (12%)
48
+ logo_size = int(qr_w * 0.12)
49
+ logo_img = logo_img.resize((logo_size, logo_size))
50
 
51
+ # Thick white outline box (safety border)
52
+ border = 20
53
+ box_w = logo_size + border
54
+ box_h = logo_size + border
55
+ white_box = Image.new("RGB", (box_w, box_h), "white")
56
 
57
+ # Center positions
58
+ pos = ((qr_w - box_w)//2, (qr_h - box_h)//2)
59
  img.paste(white_box, pos)
60
 
61
+ # Paste logo on top
62
+ img.paste(logo_img, (pos[0] + border//2, pos[1] + border//2), mask=logo_img)
 
63
 
64
  return img
65
 
66
 
67
  def save_qr(data, fg_color, bg_color, logo):
68
  img = generate_qr(data, fg_color, bg_color, logo)
69
+ filepath = f"/tmp/qr_{uuid.uuid4().hex}.png"
70
+ img.save(filepath)
71
+ return filepath
 
 
72
 
73
 
74
+ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue")) as demo:
75
+ gr.Markdown("## SCANNABLE QR Code Generator (Safe Logo + Colors)")
76
 
77
  text = gr.Textbox(label="Enter Text / URL")
78
 
 
88
 
89
  output = gr.Image(label="QR Code Preview")
90
 
 
 
 
 
 
 
 
 
91
  generate.click(generate_qr, [text, fg_color, bg_color, logo], output)
92
  download.click(save_qr, [text, fg_color, bg_color, logo], gr.File())
93