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!


Risorse Aggiuntive

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Torna in alto