
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…
Related articles

- 16 min read
Production Rate Limiting in ASP.NET Core
Most ASP.NET Core rate-limiting examples stop after registering a fixed window. That is enough to demonstrate the middleware, but it is not …

- 11 min read
The Big Decimal Bugfix with .NET 11
For more than two decades, (decimal)1.23 returned 1.23m. It looked correct, it passed every test and it was a polite lie.

- 10 min read
Distroless, Chiseled or Alpine: Choosing a .NET Base Image
Distroless, Chiseled and Alpine are often compared as three equivalent Linux distributions. They are not. Alpine is a distribution built …
Let's Work Together
Looking for an experienced Platform Architect or Engineer for your next project? Whether it's cloud migration, platform modernization or building new solutions from scratch - I'm here to help you succeed.
