QR-Code

import streamlit as st
import qrcode
from PIL import Image

st.set_page_config(page_title="QR Code Generator", page_icon="🔳")

st.title("🔳 QR Code Generator")

data = st.text_input("Text / URL to encode", value="https://example.com")

col1, col2 = st.columns(2)
with col1:
    box_size = st.slider("Box size", min_value=2, max_value=20, value=10)
with col2:
    border = st.slider("Border", min_value=1, max_value=10, value=4)

error_correction_label = st.selectbox(
    "Error correction",
    ["L (7%)", "M (15%)", "Q (25%)", "H (30%)"],
    index=1,
)
ec_map = {
    "L (7%)": qrcode.constants.ERROR_CORRECT_L,
    "M (15%)": qrcode.constants.ERROR_CORRECT_M,
    "Q (25%)": qrcode.constants.ERROR_CORRECT_Q,
    "H (30%)": qrcode.constants.ERROR_CORRECT_H,
}

if not data.strip():
    st.warning("Please enter some text.")
else:
    qr = qrcode.QRCode(
        version=None,  # auto
        error_correction=ec_map[error_correction_label],
        box_size=box_size,
        border=border,
    )
    qr.add_data(data)
    qr.make(fit=True)

    img = qr.make_image(fill_color="black", back_color="white").convert("RGB")

    st.subheader("Preview")
    st.image(img, caption="Generated QR code", use_container_width=False)

    # Offer download
    import io
    buf = io.BytesIO()
    img.save(buf, format="PNG")
    st.download_button(
        "Download PNG",
        data=buf.getvalue(),
        file_name="qrcode.png",
        mime="image/png",
    )

st.caption("Tip: install dependencies with `pip install streamlit qrcode[pil] pillow`")