Spaces:
Running
Running
File size: 2,749 Bytes
af74360 bcb8d08 e1f3ebd af74360 9c6f546 b8adac9 af74360 9c6f546 af74360 b8adac9 af74360 9c6f546 af74360 9c6f546 bcb8d08 9c6f546 bcb8d08 af74360 9c6f546 bcb8d08 9c6f546 bcb8d08 9c6f546 af74360 9c6f546 e1f3ebd 9c6f546 bcb8d08 9c6f546 bcb8d08 |
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 |
import qrcode
from PIL import Image
import base64
import gradio as gr
# Function to encode text or file content in base64 and generate a QR code
def generate_qr(data: str, error_correction: int = qrcode.constants.ERROR_CORRECT_L, box_size: int = 10, border: int = 4, fill_color: str = "black", back_color: str = "white", logo_path: str = None):
encoded_data = base64.b64encode(data.encode('utf-8')).decode('utf-8')
final_url = f"https://flowly-ai.vercel.app/tools/qr/qr-code/read/{encoded_data}"
qr = qrcode.QRCode(
version=1,
error_correction=error_correction,
box_size=box_size,
border=border,
)
qr.add_data(final_url)
qr.make(fit=True)
img_qr = qr.make_image(fill_color=fill_color, back_color=back_color)
if logo_path:
try:
logo = Image.open(logo_path).convert("RGBA")
qr_width, qr_height = img_qr.size
logo = logo.resize((qr_width // 5, qr_height // 5))
logo_position = ((qr_width - logo.size[0]) // 2, (qr_height - logo.size[1]) // 2)
img_qr.paste(logo, logo_position, logo)
except Exception as e:
print(f"Error loading logo: {e}")
output_path = "qr_code.png"
img_qr.save(output_path)
return output_path
# Function to handle text or file input
def qr_code_interface(input_type, text, file, error_correction, box_size, border, fill_color, back_color, logo):
logo_path = logo.name if logo else None
if input_type == "Text" and text:
return generate_qr(text, error_correction, box_size, border, fill_color, back_color, logo_path)
elif input_type == "File" and file:
with open(file.name, 'r') as f:
file_data = f.read()
return generate_qr(file_data, error_correction, box_size, border, fill_color, back_color, logo_path)
else:
return None
# Gradio Interface
interface = gr.Interface(
fn=qr_code_interface,
inputs=[
gr.Radio(["Text", "File"], label="Input Type", value="Text"),
gr.Textbox(label="Enter Text", visible=True),
gr.File(label="Upload Text File", type="file", visible=False),
gr.Slider(0, 3, 1, label="Error Correction", value=0),
gr.Slider(1, 20, 1, label="Box Size", value=10),
gr.Slider(1, 10, 1, label="Border Size", value=4),
gr.ColorPicker(label="QR Fill Color", value="#000000"),
gr.ColorPicker(label="QR Background Color", value="#FFFFFF"),
gr.File(label="Upload Logo (Optional)")
],
outputs=gr.Image(type="filepath", label="Generated QR Code"),
description="Generate a QR Code from either text or file with custom styles, colors, and an optional logo."
)
# Launch the app
interface.launch(share=True)
|