Oggi parleremo di QR-Code, ciò che sperimenteremo è la creazione e la personalizzazione di crittogrammi attraverso l’utilizzo di software open source.
Cos’è un QR-Code?
QR-Code (quick response code) è un codice costituito da un insieme di elementi grafici a contrasto elevato disposti su una matrice bidimensionale, in genere di forma quadrata.
Mediante un QR-Code formato da un crittogramma singolo è possibile immagazzinare fino 7089 caratteri numerici o 4296 alfanumerici.
La matrice sulla quale sono salvate le informazioni può essere facilmente decodificata con un lettore ottico o mediante l’elaborazione dell’immagine catturata dalla webcam (es. applicazioni per smartphone o software per pc).
La tecnologia alla base del QR-Code è uno standard ISO rilasciato sotto licenza libera dall’azienda Denso Wave che ne conserva i diritti di brevetto.
La codifica QR è stata implementata sfruttando la capacità di rilevazione e correzione d’errore Reed-Solomon, questo come vedremo permette di aggiungere al codice elementi estranei come loghi o
pittogrammi senza perdere informazione utile.
Toolboxes
Il gioco comincia come sempre preparando i ferri del mestiere, elenchiamo quelli che sfrutteremo per il nostro esperimento:
zbar-tools
ZBar è una libreria per eseguire scansioni e decodifiche di codici a barre da varie sorgenti come flussi video, immagini o sensori di intensità grezzi. Gestisce EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 di 5 e QR Code.
#installazione del pacchetto per Debian
sudo apt install zbar-tools
#Come companion possiamo eventualmente aggiungere
sudo apt install zbarcam-qt
qrencode
Software d’utilità che usa libqrencode per codificare una stringa di dati in un QR Code e salvarlo come immagine PNG o EPS.
#installazione del pacchetto per Debian
sudo apt install qrencode
ImageMagick
Suite di programmi per creare, modificare e comporre immagini bitmap. Può leggere, convertire e scrivere immagini in moltissimi formati (oltre 100) tra i quali DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, PostScript, SVG e TIFF. Si può usare ImageMagick per traslare, capovolgere, riflettere, ruotare, scalare, ritagliare e trasformare le immagini, per correggere i colori, per applicare vari effetti speciali oppure per disegnare testi, linee, poligoni, ellissi e curve di Bézier. Tutte le operazioni possono essere eseguite sia da riga di comando che attraverso un’interfaccia grafica X11 (display).
#installazione del pacchetto per Debian
sudo apt install imagemagick
gimp
GNU Image Manipulation Program, Programma GNU per la manipolazione di immagini: è un editor di grafica raster usato per il ritocco e la modifica di immagini, disegno libero, conversione tra formati di immagine diversi e compiti più specializzati.
Utilizzeremo questo software per creare il logo colorato da inserire al centro del QR-Code.
Fase 1: creazione del logo
Il logo da applicare al QR-Code dovrà essere di dimensione limitata, questo per evitare che l’algoritmo di correzione non funzioni adeguatamente.
Da prove eseguite, assumendo che il crittogramma abbia una dimensione di 128 x 128 px, ho potuto verificare che un logo di 40 x 40 px permette all’algoritmo di funzionare adeguatamente.
Al termine della prova useremo la funzione zbarimg del software zbar-tools per verificare che il nostro hackeggio ha avuto il successo desiderato.
Partiamo da questa immagine scaricata dal nostro portale VimeLug:
#Vado nella cartella Immagini e Scarico il file con wget
cd ~/Dcoumenti/Immagini
wget https://vimelug.org/wp-content/uploads/2023/04/LPI-Training.png
Elaboro quindi il file con gimp nel seguente modo:
- Seleziono un’area più o meno quadrata intorno al pinguino e ritaglio l’immagine alla selezione
- Applico la selezione per colore sul nero
- Tasto CANC: generalmente gimp permuta l’area cancellata con il colore di sfondo o primo piano (precedentemente ho impostato l’azzurro).
- Scalo l’immagine a circa 40 x 40 px che è la dimensione idonea per la gestione degli errori durante la decodifica
- Esporto l’immagine salvandola come logo.png
Fase 2: generazione del QR-Code
Codifichiamo il link alla pagina dell’associazione https://vimelug.org/ come QR-Code in formato png utilizzando la funzione qrencode.
qrencode -m 2 -l H https://vimelug.org/ -o qrVimelug.png
Per motivi pratici scaliamo ora l’immagine a 128 x 128 px sfruttando la funzione mogrify della suite ImageMagick da riga di comando:
## Ridimensiona a 128 x128 px
mogrify -resize 128x128 qrVimelug.png
Fase 3: decodifica del QR-Code
Sfruttiamo la funzione zbarimg di zbar-tools per decodificare il crittogramma:
zbarimg "qrVimelug.png"
Si può verificare dall’output che il crittogramma è corretto!!
Fase 4: aggiungiamo il logo al QR-Code
Sfruttiamo la funzione composite della suite ImageMagick per inserire al centro dell’immagine il logo precedentemente creato:
composite -gravity center logo.png qrVimelug.png qrVimelug_w_logo.png
Visualizziamo ora il nuovo QR-Code:
Fase 5: Verifichiamo che il nuovo QR-Code sia decodificato correttamente
zbarimg "qrVimelug_w_logo.png"
L’algoritmo Reed-Solomon, come possiamo vedere, ha svolto il suo lavoro egregiamente.
Altri test che ho eseguito con link diversi hanno dato esito positivo.
Tutto quello che abbiamo fatto lo potremmo rendere più interessante creando magari uno script bash che legge da un file di testo un elenco di url e li traduce in QR-Code con il logo.
Lascio al lettore che si vuole divertire l’onere della prova!!