ZahirJS's picture
Create app.py
5d59e52 verified
raw
history blame
2.17 kB
import gradio as gr
import qrcode
from PIL import Image
import io
import base64
def generate_qr_code(text: str, size: str = "medium", error_correction: str = "M") -> dict:
"""
Generate QR code from text/URL
Args:
text (str): Text or URL to encode
size (str): Size of QR code (small, medium, large)
error_correction (str): Error correction level (L, M, Q, H)
Returns:
dict: QR code information with qr_url field containing displayable image
"""
if not text.strip():
return {"error": "Input cannot be empty."}
size_map = {
"small": 5,
"medium": 10,
"large": 15
}
error_map = {
"L": qrcode.constants.ERROR_CORRECT_L,
"M": qrcode.constants.ERROR_CORRECT_M,
"Q": qrcode.constants.ERROR_CORRECT_Q,
"H": qrcode.constants.ERROR_CORRECT_H
}
try:
qr = qrcode.QRCode(
version=1,
error_correction=error_map[error_correction],
box_size=size_map[size],
border=4,
)
qr.add_data(text)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white").convert('RGB')
buffer = io.BytesIO()
img.save(buffer, format="PNG")
img_base64 = base64.b64encode(buffer.getvalue()).decode()
return {
"qr_code_image": f"data:image/png;base64,{img_base64}",
"info": f"QR code generated for: {text}"
}
except Exception as e:
return {"error": f"Failed to generate QR code: {str(e)}"}
if __name__ == "__main__":
demo = gr.Interface(
fn=generate_qr_code,
inputs=[
gr.Textbox(placeholder="Enter URL or text to encode..."),
gr.Dropdown(["small", "medium", "large"], value="medium", label="Size"),
gr.Dropdown(["L", "M", "Q", "H"], value="M", label="Error Correction")
],
outputs=gr.JSON(),
title="QR Code Generator for Claude",
description="Generate QR codes for Claude MCP integration"
)
demo.launch(mcp_server=True)