import qrcode from pyzbar.pyzbar import decode from PIL import Image import gradio as gr import tempfile import os # Function to generate a QR code def generate_qr(data): qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) qr.add_data(data) qr.make(fit=True) img = qr.make_image(fill="black", back_color="white") # Save to a temporary file and return the file path temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".png") img.save(temp_file.name, format="PNG") temp_file.close() # Close the file to flush contents to disk return temp_file.name # Function to read a QR code from an uploaded image def read_qr(img): decoded_data = decode(img) if decoded_data: return decoded_data[0].data.decode("utf-8") else: return "No QR code found." # Custom CSS styling as HTML for dark mode custom_css = """ """ # Gradio interface for generating and reading QR codes def create_gradio_interface(): # QR Code Generator Interface generate_interface = gr.Interface( fn=generate_qr, inputs=gr.Textbox(placeholder="Enter text or URL here...", label="Data to Encode"), outputs=gr.Image(label="Generated QR Code"), title="Generate QR Code", description="Quickly create a QR code from any text or URL.", ) # QR Code Reader Interface read_interface = gr.Interface( fn=read_qr, inputs=gr.Image(type="pil", label="Upload QR Code Image"), outputs=gr.Textbox(label="Decoded Data"), title="Read QR Code", description="Upload an image with a QR code to decode the embedded data.", ) # Combine interfaces into a single tabbed layout interface = gr.TabbedInterface( [generate_interface, read_interface], ["Generate QR Code", "Read QR Code"] ) # Launch interface with custom HTML for CSS styling with gr.Blocks() as demo: gr.HTML(custom_css) # Embed the custom CSS interface.render() demo.launch(share=True) # Run the Gradio interface create_gradio_interface()