Create QRCodes with .NET and ZXing

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.

 1public SKBitmap GenerateUrlQrCode(string url, int width, int height)
 2{
 3    // settings
 4    QrCodeEncodingOptions s_options = new()
 5    {
 6        DisableECI = true,
 7        CharacterSet = "UTF-8",
 8        Width = width,
 9        Height = height
10    };
11
12    // create writer
13    BarcodeWriter<SKBitmap> writer = new()
14    {
15        Format = BarcodeFormat.QR_CODE,
16        Options = s_options
17    };
18
19    // write data
20    SKBitmap bitmap = writer.Write(url);
21
22    return bitmap;
23}

The method can now be used, for example, to pack the image into a MemoryStream.

1SKBitmap bitmap = GenerateUrlQrCode("https://schwabencode.com", 500, 500);
2
3// bitmap as png stream
4MemoryStream stream = new();
5stream.Write(bitmap.Bytes, 0, bitmap.Bytes.Length);
6
7..
8
9return 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…


Comments

Twitter Facebook LinkedIn WhatsApp