Files
site/WESP_REL/app/kiosk_qr.py
T
2026-07-17 12:57:18 +03:00

32 lines
1.0 KiB
Python

"""Локальная генерация QR для привязки киоска (без внешних HTTP и без Pillow)."""
import base64
from io import BytesIO
import qrcode
import qrcode.image.svg
def _svg_image_factory():
"""SvgPathFillImage — белый фон; в старых версиях qrcode может не быть."""
svg = qrcode.image.svg
return getattr(svg, "SvgPathFillImage", svg.SvgPathImage)
def pair_url_to_qr_data_uri(pair_url: str) -> str:
"""QR-код как data URI (SVG) для подстановки в img src. Работает без Pillow."""
qr = qrcode.QRCode(
version=None,
error_correction=qrcode.constants.ERROR_CORRECT_M,
box_size=10,
border=4,
image_factory=_svg_image_factory(),
)
qr.add_data(pair_url)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
buf = BytesIO()
img.save(buf)
b64 = base64.b64encode(buf.getvalue()).decode("ascii")
return f"data:image/svg+xml;base64,{b64}"