|
import qrcode |
|
from PIL import Image |
|
import gradio as gr |
|
import io |
|
import base64 |
|
import numpy as np |
|
import cv2 |
|
import tempfile |
|
|
|
|
|
|
|
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") |
|
|
|
|
|
buffered = io.BytesIO() |
|
img.save(buffered, format="PNG") |
|
img_base64 = base64.b64encode(buffered.getvalue()).decode("utf-8") |
|
|
|
|
|
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".png") |
|
img.save(temp_file.name, format="PNG") |
|
temp_file.close() |
|
|
|
return f"data:image/png;base64,{img_base64}", temp_file.name, img_base64 |
|
|
|
|
|
|
|
|
|
|
|
def create_gradio_interface(): |
|
with gr.Blocks() as demo: |
|
gr.Markdown("## QR Code Generator ") |
|
|
|
|
|
with gr.Tab("Generate QR Code"): |
|
data_input = gr.Textbox(placeholder="Linki girin", label="Link") |
|
generate_button = gr.Button("Generate QR Code") |
|
qr_code_html = gr.HTML(label="Generated QR Code (Base64 Embedded)") |
|
qr_png_file = gr.File(label="Download QR Code (PNG)") |
|
qr_base64_file = gr.File(label="Download Base64 (TXT)") |
|
|
|
def generate_qr_interface(data): |
|
if not data.strip(): |
|
raise ValueError("Input text cannot be empty!") |
|
img_base64, png_path, base64_str = generate_qr(data) |
|
|
|
base64_txt_path = tempfile.NamedTemporaryFile(delete=False, suffix=".txt") |
|
with open(base64_txt_path.name, "w") as f: |
|
f.write(base64_str) |
|
|
|
html_content = f'<img src="{img_base64}" alt="QR Code" style="max-width:300px;">' |
|
return html_content, png_path, base64_txt_path.name |
|
|
|
generate_button.click( |
|
generate_qr_interface, |
|
inputs=data_input, |
|
outputs=[qr_code_html, qr_png_file, qr_base64_file], |
|
) |
|
|
|
|
|
demo.launch(share=True) |
|
|
|
|
|
|
|
create_gradio_interface() |
|
|