QR-CODE PERSONALIZZATI CON QRENCODE E UN PIZZICO DI FANTASIA

GNU/LINUXGUIDEWEB & CODING
Vimelug QR-Code
Un saluto a tutti i lettori di OpenLinux, dopo lunga pausa rieccoci finalmente!

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.

https://commons.wikimedia.org/wiki/user:Zephyris
https://commons.wikimedia.org/wiki/user:Zephyris

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-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

qrencodeqrencode

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 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 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:

LPI Training Partner

#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

vimelug icona

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

QR Vimelug

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"

zbarimg

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:

QR Modificato

Fase 5: Verifichiamo che il nuovo QR-Code sia decodificato correttamente

zbarimg "qrVimelug_w_logo.png"

validazione QR-Code

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!!