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`")