QR Code Generator in Python: Guida Completa e Semplice
Introduzione
In questa guida imparerai a creare un QR Code Generator in Python, capace di generare QR code compatibili con vari formati standard come URL, vCard, Testo, E-mail, SMS, WiFi, Bitcoin, e molti altri. La soluzione proposta utilizza un approccio modulare e scalabile, implementando classi dedicate per ciascun tipo di QR code. Alla fine di questa guida sarai in grado di creare QR code personalizzati e facili da mantenere.
Prerequisiti e Setup dell’Ambiente di Sviluppo
Prima di iniziare, assicurati di avere Python installato sul tuo sistema. Puoi scaricare l’ultima versione da python.org.
Tool necessari:
Utilizzeremo i pacchetti qrcode
e Pillow
per generare e gestire i QR code e le immagini. Per installarli, esegui il seguente comando nel terminale:
pip install qrcode[pil]
Creare il QR Code Generator in Python
La struttura del progetto si basa su una classe principale QRCodeGenerator
che riceve un oggetto payload. Ogni tipo di QR code ha una propria classe dedicata che eredita da QRCodePayload
e definisce il metodo build_payload()
per costruire il contenuto del QR code.
Ecco il codice completo:
import qrcode
from qrcode.constants import ERROR_CORRECT_L
from PIL import Image
from typing import Optional
# Classe base per i payload dei QR code
class QRCodePayload:
def build_payload(self) -> str:
raise NotImplementedError("Devi implementare il metodo build_payload!")
# Classi specifiche per ogni tipo di payload
class TextPayload(QRCodePayload):
def __init__(self, text: str):
self.text = text
def build_payload(self) -> str:
return self.text
class URLPayload(QRCodePayload):
def __init__(self, url: str):
self.url = url
def build_payload(self) -> str:
return self.url
class VCardPayload(QRCodePayload):
def __init__(self, name: str, org: str, phone: str, email: str):
self.name = name
self.org = org
self.phone = phone
self.email = email
def build_payload(self) -> str:
return f"BEGIN:VCARD\nVERSION:3.0\nFN:{self.name}\nORG:{self.org}\nTEL:{self.phone}\nEMAIL:{self.email}\nEND:VCARD"
class EmailPayload(QRCodePayload):
def __init__(self, email: str):
self.email = email
def build_payload(self) -> str:
return f"mailto:{self.email}"
class SMSPayload(QRCodePayload):
def __init__(self, phone_number: str, message: str):
self.phone_number = phone_number
self.message = message
def build_payload(self) -> str:
return f"sms:{self.phone_number}?body={self.message}"
class WiFiPayload(QRCodePayload):
def __init__(self, ssid: str, password: str, encryption: Optional[str] = "WPA"):
self.ssid = ssid
self.password = password
self.encryption = encryption
def build_payload(self) -> str:
return f"WIFI:S:{self.ssid};T:{self.encryption};P:{self.password};;"
class BitcoinPayload(QRCodePayload):
def __init__(self, address: str):
self.address = address
def build_payload(self) -> str:
return f"bitcoin:{self.address}"
# Classe principale per generare il QR code
class QRCodeGenerator:
def __init__(self, payload: QRCodePayload):
self.payload = payload
def generate_qr_code(self) -> Image:
"""Genera l'immagine del QR code utilizzando il payload specificato."""
qr = qrcode.QRCode(
version=1,
error_correction=ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(self.payload.build_payload())
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
return img
Esempi di Utilizzo
1. QR code con testo semplice
payload = TextPayload("Benvenuto in DevAccelerate!")
generator = QRCodeGenerator(payload)
img = generator.generate_qr_code()
img.show() # Mostra il QR code a schermo
# Oppure, se vuoi salvarlo come immagine:
img.save("text.png") # Salva il QR code come immagine
2. QR code per un URL
payload = URLPayload("https://www.devaccelerate.com")
generator = QRCodeGenerator(payload)
img = generator.generate_qr_code()
img.show() # Mostra il QR code a schermo
# Oppure, se vuoi salvarlo come immagine:
img.save("url.png") # Salva il QR code come immagine
3. QR code per un vCard
payload = VCardPayload("Mario Rossi", "Azienda SRL", "+39123456789", "mario.rossi@email.com")
generator = QRCodeGenerator(payload)
img = generator.generate_qr_code()
img.show() # Mostra il QR code a schermo
# Oppure, se vuoi salvarlo come immagine:
img.save("vcard.png") # Salva il QR code come immagine
4. QR code per Email
payload = EmailPayload("info@devaccelerate.com")
generator = QRCodeGenerator(payload)
img = generator.generate_qr_code()
img.show() # Mostra il QR code a schermo
# Oppure, se vuoi salvarlo come immagine:
img.save("email.png") # Salva il QR code come immagine
5. QR code per SMS
payload = SMSPayload("1234567890", "Messaggio di prova")
generator = QRCodeGenerator(payload)
img = generator.generate_qr_code()
img.show() # Mostra il QR code a schermo
# Oppure, se vuoi salvarlo come immagine:
img.save("sms.png") # Salva il QR code come immagine
6. QR code per WiFi
payload = WiFiPayload("MyWiFi", "password1234", "WPA")
generator = QRCodeGenerator(payload)
img = generator.generate_qr_code()
img.show() # Mostra il QR code a schermo
# Oppure, se vuoi salvarlo come immagine:
img.save("wifi.png") # Salva il QR code come immagine
7. QR code per Bitcoin
payload = BitcoinPayload("1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa")
generator = QRCodeGenerator(payload)
img = generator.generate_qr_code()
img.show() # Mostra il QR code a schermo
# Oppure, se vuoi salvarlo come immagine:
img.save("bitcoin.png") # Salva il QR code come immagine
Conclusione
In questa guida abbiamo creato un QR Code Generator in Python utilizzando una struttura modulare e scalabile. Ogni formato di QR code è gestito da una classe dedicata, rendendo il codice facile da estendere e mantenere. Aggiungere nuovi formati è semplice: basta creare una nuova classe che eredita da QRCodePayload
e implementa il metodo build_payload()
.
Oltre a generare e visualizzare il QR code, puoi anche salvarlo come immagine utilizzando il metodo save()
.
Se vuoi aggiungere ulteriori funzionalità o personalizzare ulteriormente il progetto, sei sulla strada giusta!