Create QRCodes with .NET and ZXing
QR Codes are a very popular way to pass on information - for example an URL. The QR code can be placed on all kinds of places, for example in parking lots for buying parking tickets.
.NET does not offer the possibility to create such images out of the box; you need libraries like ZXing. I chose ZXing because it is Apache 2.0 licensed. If you use ZXing commercially, then it would be appropriate if you leave a corresponding Donation.
ZXing
The main library ZXing.Net is structured in such a way that the basic behavior is implemented. The actual BarcodeWriter implementations are not included. Bitmap is not multi-platform capable; other implementations require extra licenses (e.g. ImageSharp for commercial use) - so I use ZXing.Net.Bindings.SkiaSharp for this example.
The implementation of SkiaSharp is very simple here: I only need the settings and then the actual writer.
public SKBitmap GenerateUrlQrCode(string url, int width, int height)
{
// settings
QrCodeEncodingOptions s_options = new()
{
DisableECI = true,
CharacterSet = "UTF-8",
Width = width,
Height = height
};
// create writer
BarcodeWriter<SKBitmap> writer = new()
{
Format = BarcodeFormat.QR_CODE,
Options = s_options
};
// write data
SKBitmap bitmap = writer.Write(url);
return bitmap;
}
The method can now be used, for example, to pack the image into a MemoryStream.
SKBitmap bitmap = GenerateUrlQrCode("https://schwabencode.com", 500, 500);
// bitmap as png stream
MemoryStream stream = new();
stream.Write(bitmap.Bytes, 0, bitmap.Bytes.Length);
..
return stream;
The use of the generated MemoryStream is now very versatile; uploading to an Azure Blob, returning to an HTTP client, sending to a cell phone...