Backend FastAPI complet : camera gphoto2, filtres/overlays Pillow, chroma key OpenCV, multi-shot/collage, GIF, impression CUPS, email SMTP, QR code. Frontend web vanilla (HTML/CSS/JS) pour Chromium kiosk. Menu admin cache (appui long coin ecran). Toutes les fonctionnalites activables/desactivables. Scripts install + systemd pour RPi4. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
import logging
|
|
from io import BytesIO
|
|
from pathlib import Path
|
|
|
|
from backend.config import DOSSIER_EXPORTS, charger_config
|
|
|
|
log = logging.getLogger("photobooth.qrcode")
|
|
|
|
try:
|
|
import qrcode
|
|
QRCODE_DISPONIBLE = True
|
|
except ImportError:
|
|
QRCODE_DISPONIBLE = False
|
|
log.warning("qrcode non installe")
|
|
|
|
|
|
def generer_qr(contenu: str, nom: str = "qr.png") -> Path | None:
|
|
"""Genere un QR code PNG."""
|
|
if not QRCODE_DISPONIBLE:
|
|
log.error("Module qrcode non disponible")
|
|
return None
|
|
|
|
qr = qrcode.QRCode(version=1, box_size=10, border=4)
|
|
qr.add_data(contenu)
|
|
qr.make(fit=True)
|
|
img = qr.make_image(fill_color="black", back_color="white")
|
|
|
|
chemin = DOSSIER_EXPORTS / nom
|
|
img.save(chemin)
|
|
log.info(f"QR code genere : {chemin}")
|
|
return chemin
|
|
|
|
|
|
def qr_galerie() -> Path | None:
|
|
"""Genere le QR code pointant vers la galerie en ligne."""
|
|
config = charger_config()
|
|
url = config.get("qr_code", {}).get("url_galerie", "")
|
|
if not url:
|
|
log.warning("URL galerie non configuree")
|
|
return None
|
|
return generer_qr(url, "qr_galerie.png")
|