Generare un QrCode tramite il servizio Api google

Articolo che fornisce le basi per la creazione di immagini per i qrcode con tecnologia Microsoft .Net.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo vedremo come utilizzare i servizi messi a disposizione da Google, in particolare il servizio gratuito per la generazione del QrCode.
Un servizio con il quale possiamo ottenere l’immagine passando informazioni come l’altezza, larghezza ed il testo che vogliamo venga utilizzato.
L’articolo riguarderà i due linguaggi di programmazione più utilizzati quali C# e VB.Net.
Mentre l'utilizzo delle funzionalità è per ambiente di tipo “Windows Application”.


Creazione del progetto

Si crea un nuovo progetto di tipo Windows Application, tramite i linguaggi di programmazione di proprio interesse.
Nella form, aggiungiamo un controllo di tipo “textbox” due controlli di tipo “Button” ed un controllo “PictureBox” quest’ultima visulizzerà il qrcode generato.
Il tutto come mostrato in figura 1.

Figura 1 – La form con i vari controlli 

Assegniamo alla proprietà name del controllo pictubebox il valore “pictureQrCode” mentre per il controllo di tipo Textbox il valore “txtTesto” mentre i due pulsanti avranno uno la proprietà Name con il valore “BtnGenera” e la proprietà “Text” con il valore “Genera” e l’altro controllo button il valore della proprietà “Name” con il valore “BtnSalva” e la proprietà “Text” con il valore “Salva”.
A questo punto terminata la creazione della form non ci resta che scrivere il codice.

Stesura del codice


Ora passiamo in visualizzazione codice per aggiungere lo spazio dei nomi per utilizzare alcune classi.
Aggiungiamo lo spazio dei nomi per la gestione del web, quindi internet e quella per la gestione dei file.
Qui di seguito gli spazi dei nomi per entrambi i linguaggi.

VB.Net
Imports System.Net
Imports System.IO
C#
using System.Net;
using System.IO;

Ora non ci resta che scrivere il codice per il pulsante per la creazione dell’immagine.
Nell’evento click del pulsante “BtnGenera” scriviamo il codice, che esegue la query internet per Google, passando come parametro altezza, larghezza ed il testo, e generiamo lo stream dell’immagine da applicare al controllo PictureBox.
Qui di seguito le suddette operazioni.

VB.Net
Private Sub BtnGenera_Click(sender As Object, e As EventArgs) Handles BtnGenera.Click
If txtTesto.Text.Trim() = "" Then
MessageBox.Show("Inserire il testo nella casella")
Return
End If
Dim sitoGoogleQrCode As String = "http://chart.googleapis.com/chart?chs={WIDTH}x{HEIGHT}&cht=qr&chl={TESTO}"
sitoGoogleQrCode = sitoGoogleQrCode.Replace("{WIDTH}", pictureQrCode.Width.ToString()).Replace("{HEIGHT}", pictureQrCode.Height.ToString()).Replace("{TESTO}", WebUtility.UrlEncode(txtTesto.Text))
Dim client As WebClient = New WebClient()
Dim bytes As Byte() = client.DownloadData(sitoGoogleQrCode)
client.Dispose()
Dim memStream As MemoryStream = New MemoryStream(bytes)
Dim bmpQrCode As Bitmap = New Bitmap(memStream)
pictureQrCode.Image = bmpQrCode
End Sub
C#
private void BtnGenera_Click(object sender, EventArgs e)
{
if (txtTesto.Text.Trim() == "")
{
MessageBox.Show("Inserire il testo nella casella");
return;
}
string sitoGoogleQrCode = "http://chart.googleapis.com/chart?chs={WIDTH}x{HEIGHT}&cht=qr&chl={TESTO}";
sitoGoogleQrCode = sitoGoogleQrCode.Replace("{WIDTH}", pictureQrCode.Width.ToString()).Replace("{HEIGHT}", pictureQrCode.Height.ToString()).Replace("{TESTO}", WebUtility.UrlEncode(txtTesto.Text));
WebClient client = new WebClient();
Byte[] bytes = client.DownloadData(sitoGoogleQrCode);
client.Dispose();
MemoryStream memStream = new MemoryStream(bytes);
Bitmap bmpQrCode = new Bitmap(memStream);
pictureQrCode.Image = bmpQrCode;
}

Il codice è molto semplice da capire, e spiega in pochi passaggi come ottenere un immagine da google, di tipo qrcode.
Siamo quasi giunti al termine dell’articolo, non ci resta che scrivere il codice per salvare l’immagine.
Infatti può capitare che oltre alla generazione dell’immagine da inserire nelle nostre applicazioni, dobbiamo anche salvarla.
Nell’evento click del pulsante “BtnSalva” scriveremo il codice che permette di salvare su una parte del nostro computer il qrcode generato.
Qui di seguito il frammento di codice per entrambi i linguaggi.

VB.Net Private Sub BtnSalva_Click(sender As Object, e As EventArgs) Handles BtnSalva.Click
Dim QR_Image As Bitmap = New Bitmap(pictureQrCode.ClientSize.Width, pictureQrCode.ClientSize.Height)
Dim gr As Graphics = Graphics.FromImage(QR_Image)
gr.CopyFromScreen(pictureQrCode.PointToScreen(Point.Empty), Point.Empty, pictureQrCode.ClientSize)
Dim SaveDialogSalvaQrCode As SaveFileDialog = New SaveFileDialog()
SaveDialogSalvaQrCode.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
SaveDialogSalvaQrCode.Filter = "PNG (*.png)|*.png"
SaveDialogSalvaQrCode.FilterIndex = 0
SaveDialogSalvaQrCode.AddExtension = True
If SaveDialogSalvaQrCode.ShowDialog() = DialogResult.OK Then QR_Image.Save(SaveDialogSalvaQrCode.FileName, System.Drawing.Imaging.ImageFormat.Png)
End Sub
C#
private void BtnSalva_Click(object sender, EventArgs e)
{
Bitmap QR_Image = new Bitmap(pictureQrCode.ClientSize.Width, pictureQrCode.ClientSize.Height);
Graphics gr = Graphics.FromImage(QR_Image);
gr.CopyFromScreen(pictureQrCode.PointToScreen(Point.Empty), Point.Empty, pictureQrCode.ClientSize);
SaveFileDialog SaveDialogSalvaQrCode = new SaveFileDialog();
SaveDialogSalvaQrCode.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
SaveDialogSalvaQrCode.Filter = "PNG (*.png)|*.png";
SaveDialogSalvaQrCode.FilterIndex = 0;
SaveDialogSalvaQrCode.AddExtension = true;
if (SaveDialogSalvaQrCode.ShowDialog() == DialogResult.OK)
QR_Image.Save(SaveDialogSalvaQrCode.FileName, System.Drawing.Imaging.ImageFormat.Png);
}

Conclusioni


L’articolo ha fornito al lettore come generare immagini di tipo QrCode utilizzando il sito Google.
Una tecnica che può tornare utile nel caso che si vogliono identificare particolari documenti o prodotti, riconoscendoli con un lettore predisposto per questo tipo di immagini.
Google, offre una serie di API, alcune gratuite ed altre a pagamento.