Giter VIP home page Giter VIP logo

qrcodegenerator's Introduction

QR Code Generator for .NET

Open-source library for generating QR codes from text strings and byte arrays.

The library is built for .NET Standard 2.0 and therefore runs on most modern .NET platforms (.NET Core, .NET Framework, Mono etc.) including .NET 6 on all platforms.

It is mostly a translation of project Nayuki's Java version of the QR code generator. The project provides implementations for many more programming languages, and the Project Nayuki web site has additional information about the implementation.

Features

Core features:

  • Supports encoding all 40 versions (sizes) and all 4 error correction levels, as per the QR Code Model 2 standard
  • Output formats: Raw modules/pixels of the QR symbol, SVG and XAML path, BMP bitmap. For raster bitmap output, additional code is provided. See below.
  • Encodes numeric and special-alphanumeric text in less space than general text
  • Open source code under the permissive MIT License
  • Available as a NuGet package (named Net.Codecrete.QrCodeGenerator)
  • Example code for WinForms, WPF, ASP.NET, ImageSharp, SkiaSharp etc.

Manual parameters:

  • You can specify the minimum and maximum version number allowed, and the library will automatically choose the smallest version in the range that fits the data.
  • You can specify the mask pattern manually, otherwise library will automatically evaluate all 8 masks and select the optimal one.
  • You can specify an error correction level, or optionally allow the library to boost it if it doesn't increase the size (version).
  • You can create a list of data segments manually and add ECI segments.

Optional advanced features:

  • Encodes Japanese Unicode text in Kanji mode to save space compared to UTF-8 bytes
  • Computes optimal segment mode switching for text with mixed numeric/alphanumeric/general/kanji parts

Getting started

  1. Create a new Visual Studio project for .NET Core 3.1 (or higher) (File > New > Project... / Visual C# > .NET Core > Console App (.NET Core))

  2. Add the library via NuGet:

    Either via Project > Manage NuGet Packages... / Browse / search for qrcodegenerator / Install

    Or by running a command in the Package Manager Console

Install-Package Net.Codecrete.QrCodeGenerator -Version 2.0.5
  1. Add the code from the example below

  2. Run it

API Documention

See API Documentation

Examples

Simple operation

using Net.Codecrete.QrCodeGenerator;

namespace Examples
{
    class SimpleOperation
    {
        static void Main()
        {
            var qr = QrCode.EncodeText("Hello, world!", QrCode.Ecc.Medium);
            string svg = qr.ToSvgString(4);
            File.WriteAllText("hello-world-qr.svg", svg, Encoding.UTF8);
        }
    }
}

Manual operation

using Net.Codecrete.QrCodeGenerator;

namespace Examples
{
    class ManualOperation
    {
        static void Main()
        {
            var segments = QrSegment.MakeSegments("3141592653589793238462643383");
            var qr = QrCode.EncodeSegments(segments, QrCode.Ecc.High, 5, 5, 2, false);
            for (int y = 0; y < qr.Size; y++)
            {
                for (int x = 0; x < qr.Size; x++)
                {
                    ... paint qr.GetModule(x,y) ...
                }
            }
        }
    }
}

Requirements

QR Code Generator for .NET requires a .NET implementation compatible with .NET Standard 2.0 or higher, i.e. any of:

  • .NET Core 2.0 or higher
  • .NET Framework 4.6.1 or higher
  • Mono 5.4 or higher
  • Universal Windows Platform 10.0.16299 or higher
  • Xamarin

Raster Images / Bitmaps

Starting with .NET 6, System.Drawing is only supported on Windows operating system and thus cannot be used for multi-platform libraries like this one. Therefore, ToBitmap() has been removed and three options are now offered in the form of method extensions.

To use it:

  • Select one of the imaging libraries below
  • Add the NuGet dependencies to your project
  • Copy the appropriate QrCodeBitmapExtensions.cs file to your project
Imaging library Recommendation NuGet dependencies Extension file
System.Drawing For Windows only projects System.Drawing.Common QrCodeBitmapExtensions.cs
SkiaSharp For macOS, Linux, iOS, Android and multi-platform projects SkiaSharp and SkiaSharp.NativeAssets.Linux (for Linux only) QrCodeBitmapExtensions.cs
ImageSharp Currently in beta state SixLabors.ImageSharp.Drawing QrCodeBitmapExtensions.cs

Using these extension methods, generating PNG images is straight-forward:

using Net.Codecrete.QrCodeGenerator;

namespace Examples
{
    class PngImage
    {
        static void Main()
        {
            var qr = QrCode.EncodeText("Hello, world!", QrCode.Ecc.Medium);
            qr.SaveAsPng("hello-world-qr.png", 10, 3);
        }
    }
}

Examples

Several example projects are provided:

  • Demo-QRCode-Variety: Demonstrates how QR codes with different encodings, error correction and masks can be generated. All QR codes are saved as SVG files.

  • Demo-WinUI: Demonstrates how QR codes can be used in WinUI 3 applications and/or using Win2D (incl. copying to the clipboard).

  • Demo-WindowsPresentationFoundation: Demonstrates how QR codes can be used in WPF applications (incl. copying to the clipboard).

  • Demo-WinForms: Demonstrates how QR codes can be used in Windows Forms applications (incl. copying to the clipboard).

  • Demo-ASP.NET-Core: Demonstrates how to create QR codes in a web application implemented using ASP.NET Core.

  • Demo-VCard: Demonstrates how contact data (similar to business cards) can be saved in a QR Code using the VCard standard.

  • Demo-System-Drawing: Demonstrates how a QR code can be saved a PNG file, using the System.Drawing classes, which have become a Windows only technology starting with .NET 6.

  • Demo-SkiaSharp: Demonstrates how a QR code can be saved a PNG file, using the SkiaSharp multi-platform raster image library.

  • Demo-ImageSharp: Demonstrates how a QR code can be saved a PNG file, using the ImageSharp raster image library. Additionally, a QR code with an image in the center is created.

  • Demo-ImageMagick: Demonstrates how a QR code can be saved a PNG file, using the Magick.NET image manipulation library (based on ImageMagick).

qrcodegenerator's People

Contributors

dependabot[bot] avatar flynt56 avatar inforithmics avatar jongalloway avatar lakerfield avatar manuelbl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qrcodegenerator's Issues

Is it possible to embed an image?

Hi, first of all thanks for this great project! ๐Ÿ’ช๐Ÿป

Is it possible to embed an image (probably a logo) in the center of the QR code image? Like QRCode Monkey's ADD LOGO IMAGE feature. Or as discussed in this other project: codebude/QRCoder#232

I'm using the Demo-ImageSharp sample.

Thanks!

Byte Encoding version.

Hi.

Is it possible to generate encoding in Byte format and specify the version?
The Byte generator only allows to specify the message in Byte array and the ecc correction level but not the version.

IImageProcessingContext does not contain a definition for Fill

When I add the extension functions for SixLabors.Imagesharp, I get the error on fill:

IImageProcessingContext does not contain a definition for fill.

The extension method code is below. I can't use System.Drawing() because my target is iOS and Skia had signing issues so I wanted to test SixLabors.


//
// QR code generator library (.NET)
// https://github.com/manuelbl/QrCodeGenerator
//
// Copyright (c) 2021 Manuel Bleichenbacher
// Licensed under MIT License
// https://opensource.org/licenses/MIT
//

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing.Extensions;
using System;
using System.IO;
using Image = SixLabors.ImageSharp.Image;

namespace Net.Codecrete.QrCodeGenerator
{
    public static class QrCodeBitmapExtensions
    {
        /// <inheritdoc cref="ToBitmap(QrCode, int, int)"/>
        /// <param name="background">The background color.</param>
        /// <param name="foreground">The foreground color.</param>
        public static Image ToBitmap(this QrCode qrCode, int scale, int border, SixLabors.ImageSharp.Color foreground, SixLabors.ImageSharp.Color background)
        {
            // check arguments
            if (scale <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(scale), "Value out of range");
            }
            if (border < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(border), "Value out of range");
            }

            int size = qrCode.Size;
            int dim = (size + border * 2) * scale;

            if (dim > short.MaxValue)
            {
                throw new ArgumentOutOfRangeException(nameof(scale), "Scale or border too large");
            }

            // create bitmap
            Image<Rgb24> image = new Image<Rgb24>(dim, dim);

            image.Mutate(img =>
            {
                // draw background
                img.Fill(background);
                

                // draw modules
                for (int y = 0; y < size; y++)
                {
                    for (int x = 0; x < size; x++)
                    {
                        if (qrCode.GetModule(x, y))
                        {
                            img.Fill(foreground, new Rectangle((x + border) * scale, (y + border) * scale, scale, scale));
                        }
                    }
                }
            });

            return image;
        }

        /// <summary>
        /// Creates a bitmap (raster image) of this QR code.
        /// <para>
        /// The <paramref name="scale"/> parameter specifies the scale of the image, which is
        /// equivalent to the width and height of each QR code module. Additionally, the number
        /// of modules to add as a border to all four sides can be specified.
        /// </para>
        /// <para>
        /// For example, <c>ToBitmap(scale: 10, border: 4)</c> means to pad the QR code with 4 white
        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.
        /// </para>
        /// <para>
        /// The resulting bitmap uses the pixel format <see cref="PixelFormat.Format24bppRgb"/>.
        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).
        /// </para>
        /// </summary>
        /// <param name="scale">The width and height, in pixels, of each module.</param>
        /// <param name="border">The number of border modules to add to each of the four sides.</param>
        /// <returns>The created bitmap representing this QR code.</returns>
        /// <exception cref="ArgumentOutOfRangeException"><paramref name="scale"/> is 0 or negative, <paramref name="border"/> is negative
        /// or the resulting image is wider than 32,768 pixels.</exception>
        public static Image ToBitmap(this QrCode qrCode, int scale, int border)
        {
            return qrCode.ToBitmap(scale, border, SixLabors.ImageSharp.Color.Black, SixLabors.ImageSharp.Color.White);
        }

        /// <inheritdoc cref="ToPng(QrCode, int, int)"/>
        /// <param name="background">The background color.</param>
        /// <param name="foreground">The foreground color.</param>
        public static byte[] ToPng(this QrCode qrCode, int scale, int border, SixLabors.ImageSharp.Color foreground, SixLabors.ImageSharp.Color background)
        {
            using Image image = qrCode.ToBitmap(scale, border, foreground, background);
            using MemoryStream ms = new MemoryStream();
            image.SaveAsPng(ms);
            return ms.ToArray();
        }

        /// <summary>
        /// Creates a PNG image of this QR code and returns it as a byte array.
        /// <para>
        /// The <paramref name="scale"/> parameter specifies the scale of the image, which is
        /// equivalent to the width and height of each QR code module. Additionally, the number
        /// of modules to add as a border to all four sides can be specified.
        /// </para>
        /// <para>
        /// For example, <c>ToPng(scale: 10, border: 4)</c> means to pad the QR code with 4 white
        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.
        /// </para>
        /// <para>
        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).
        /// </para>
        /// </summary>
        /// <param name="scale">The width and height, in pixels, of each module.</param>
        /// <param name="border">The number of border modules to add to each of the four sides.</param>
        /// <returns>The created bitmap representing this QR code.</returns>
        /// <exception cref="ArgumentOutOfRangeException"><paramref name="scale"/> is 0 or negative, <paramref name="border"/> is negative
        /// or the resulting image is wider than 32,768 pixels.</exception>
        public static byte[] ToPng(this QrCode qrCode, int scale, int border)
        {
            return qrCode.ToPng(scale, border, SixLabors.ImageSharp.Color.Black, SixLabors.ImageSharp.Color.White);
        }

        /// <inheritdoc cref="SaveAsPng(QrCode, string, int, int)"/>
        /// <param name="background">The background color.</param>
        /// <param name="foreground">The foreground color.</param>
        public static void SaveAsPng(this QrCode qrCode, string filename, int scale, int border, SixLabors.ImageSharp.Color foreground, SixLabors.ImageSharp.Color background)
        {
            using Image image = qrCode.ToBitmap(scale, border, foreground, background);
            image.SaveAsPng(filename);
        }

        /// <summary>
        /// Saves this QR code as a PNG file.
        /// <para>
        /// The <paramref name="scale"/> parameter specifies the scale of the image, which is
        /// equivalent to the width and height of each QR code module. Additionally, the number
        /// of modules to add as a border to all four sides can be specified.
        /// </para>
        /// <para>
        /// For example, <c>SaveAsPng("qrcode.png", scale: 10, border: 4)</c> means to pad the QR code with 4 white
        /// border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.
        /// </para>
        /// <para>
        /// If not specified, the foreground color is black (0x000000) und the background color always white (0xFFFFFF).
        /// </para>
        /// </summary>
        /// <param name="scale">The width and height, in pixels, of each module.</param>
        /// <param name="border">The number of border modules to add to each of the four sides.</param>
        /// <exception cref="ArgumentOutOfRangeException"><paramref name="scale"/> is 0 or negative, <paramref name="border"/> is negative
        /// or the resulting image is wider than 32,768 pixels.</exception>
        public static void SaveAsPng(this QrCode qrCode, string filename, int scale, int border)
        {
            qrCode.SaveAsPng(filename, scale, border, SixLabors.ImageSharp.Color.Black, SixLabors.ImageSharp.Color.White);
        }
    }
}```

Changeable Content

Hi, How can we update the information we added to the qr code without changing the qr code. The program will generate a qr code. The content will be changed without changing the qr code. How can i do ?

How to generate correct size of QR Code image?

https://github.com/manuelbl/QrCodeGenerator/blob/master/Demo-ImageSharp/Program.cs

        internal static void HelloWorld()
        {
            var text = "Hello, world!";
            var filename = "hello-world-QR.png";

            var qr = QrCode.EncodeText(text, QrCode.Ecc.High); // Create the QR code symbol
            int border = 4;
            int scale = (int)(128 * 1.0 / (qr.Size + border * 2));
            qr.SaveAsPng(filename, scale, border);

            Console.WriteLine($"The QR code has been saved as {Path.GetFullPath(filename)}");
        }

I expect output size of the QR Code image is 128px.
But the generated size of QR Code image is 99px.
hello-world-QR

QR Code as svg path not rendered on some mobile phone models

QR code that is generated as an SVG path (through invocation to QrCode.ToGraphicsPath()) is not getting rendered on the screen for some mobile phone models. Particularly when testing on my OnePlus Nord 2 this was indeed the case. It runs latest version of OxyOS (android 13). The QR code is however rendered successfully in the emulator (Pixel 5, Android 11). After debugging the code and fetching the path string that is generated when running on the phone and comparing it to the one taken from the emulator, it turned out that the issue is caused by a rather subtle circumstance. The path contains instructions in the form of Mx,yhAvBh-Az, where x, y are coordinates of the starting point of a rectangle, while A and B are respectively horizontal and vertical line lengths. The "-" sign before the last horizontal length says that the line will be drawn in the opposite direction. This character was generated on my phone as "โˆ’". I literally felt like my eyeballs would pop out of orbit when i was examining what the heck is the difference between the 2 path strings. I guess anybody would feel the same way, as there was literally no visible difference. Until VS Code compare come to rescue! Now when putting the 2 chars one next to each other it is much more obvious - "โˆ’" vs "-"! I guess this is due to locale settings. My phone is in Norwegian local, so this might be an issue with many other locales as well.
In order to fix this issue in needs to be assured that the "-" sign is char 0x2d, and not 0xe2 0x88 0x92 ("โˆ’").

Eyes with rounded corners

Is it possible for the QR code eyes (the three positioning squares) to have rounded corners?

If not currently possible, could this capability please be added as an option?

Skia Extensions don't allow Transparent Images to be rendered

In the
Extensions file for Skia

The creation of the Bitmap doesn't allow for a transparent colour to be used for the background.

If it is replaced with the following you can use a colour that includes transparency for the background.

SKBitmap bitmap = new SKBitmap(dim, dim, SKColorType.Rgba8888, SKAlphaType.Premul);

I haven't tested for all cases, but seems to be the minimum required to get transparency.

I did also test using canvas.Clear(background) instead of canvas.DrawRect(0, 0, dim, dim, paint);which also seemed to work

Blazor Component

Hey, not a problem or anything, but just wanted to mention that I released a small blazor component recently, which uses this library. Its for a QR code component (obviously). Plenty already exist, but all (at least all that I found) render the QR code using js, which is fine with Blazor, but not if rendering non-interactively (static SSR for example) - which was my exact scenario. I wanted to render a QR code in static SSR.

I've given options for most things I could see a benefit in, including adding a logo in the centre of the QR code (non destructively to the actual QR code itself). Repo is here if interested.

Feel free to close, just wanted to leave a note about usage, and thank you. :)

.ToXamlString() ? How to return WPF Xaml Geometry Path as string

There is now a .ToSvgString() method to return the SVG text string, but WPF needs the QR Code in a Geometry Path format to be consumed by an <Image> or <Viewbox> control. How can I get the text string of the QR Code as a Xaml Geometry Path with this library? If it cannot be extracted currently, could you add a .ToXamlString() method? Thank you, example and link to Geometry below.

Example:

string 2DBarcodePath = qrCode.ToXamlString(3);

<Viewbox
       Width="100"
       Height="100"
       Stretch="Uniform">
       <Path x:Name="2DBarcodePath" Fill="Black" />
</Viewbox>

Geometry Overview

Could not load file or assembly QrCodeGenerator

Hi,

Thank you for publishing this library.

When I try to run it on a simple console app, I am getting an exception System.IO.FileLoadException: Could not load file or assembly 'QrCodeGenerator, Version=1.6.0.0, Culture=neutral, PublicKeyToken=6aa6bd7a159d47c2'. The located assembly's manifest definition does not match the assembly reference.

Steps to reproduce

I am using .net 6.0.401 SDK on Windows 10

mkdir QrCodeGenerator && cd QrCodeGenerator
dotnet new console

Output:

The template "Console App" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on C:\_poc\QRCodes\New folder\QrCodeGenerator\QrCodeGenerator.csproj...
  Determining projects to restore...
  Restored C:\_poc\QRCodes\New folder\QrCodeGenerator\QrCodeGenerator.csproj (in 74 ms).
Restore succeeded.
dotnet add package Net.Codecrete.QrCodeGenerator

Output:

 Determining projects to restore...
  Writing C:\Users\yanal\AppData\Local\Temp\tmpBB98.tmp
info : X.509 certificate chain validation will use the default trust store selected by .NET.
info : Adding PackageReference for package 'Net.Codecrete.QrCodeGenerator' into project 'C:\_poc\QRCodes\New folder\QrCodeGenerator\QrCodeGenerator.csproj'.
info :   CACHE https://api.nuget.org/v3/registration5-gz-semver2/net.codecrete.qrcodegenerator/index.json
info : Restoring packages for C:\_poc\QRCodes\New folder\QrCodeGenerator\QrCodeGenerator.csproj...
info : Package 'Net.Codecrete.QrCodeGenerator' is compatible with all the specified frameworks in project 'C:\_poc\QRCodes\New folder\QrCodeGenerator\QrCodeGenerator.csproj'.
info : PackageReference for package 'Net.Codecrete.QrCodeGenerator' version '2.0.3' added to file 'C:\_poc\QRCodes\New folder\QrCodeGenerator\QrCodeGenerator.csproj'.
info : Writing assets file to disk. Path: C:\_poc\QRCodes\New folder\QrCodeGenerator\obj\project.assets.json
log  : Restored C:\_poc\QRCodes\New folder\QrCodeGenerator\QrCodeGenerator.csproj (in 75 ms).

Update Program.cs

using System.Text;
using Net.Codecrete.QrCodeGenerator;

var qr = QrCode.EncodeText("Hello, world!", QrCode.Ecc.Medium);
string svg = qr.ToSvgString(4);
File.WriteAllText("hello-world-qr.svg", svg, Encoding.UTF8);
dotnet restore

Output:

 Determining projects to restore...
 All projects are up-to-date for restore.
dotnet run

Output:

Unhandled exception. System.IO.FileLoadException: Could not load file or assembly 'QrCodeGenerator, Version=1.6.0.0, Culture=neutral, PublicKeyToken=6aa6bd7a159d47c2'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
File name: 'QrCodeGenerator, Version=1.6.0.0, Culture=neutral, PublicKeyToken=6aa6bd7a159d47c2'
   at Program.<Main>$(String[] args)

What am I missing ?

Linux

'QrCodeGenerator, Version=1.6.0.0, Culture=neutral, PublicKeyToken=6aa6bd7a159d47c2, processorArchitecture=MSIL'
at System.Reflection.RuntimeAssembly.InternalLoad(ObjectHandleOnStack assemblyName, ObjectHandleOnStack requestingAssembly, StackCrawlMarkHandle stackMark, Boolean throwOnFileNotFound, ObjectHandleOnStack assemblyLoadContext, ObjectHandleOnStack retAssembly)
at System.Reflection.RuntimeAssembly.InternalLoad(AssemblyName assemblyName, RuntimeAssembly requestingAssembly, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, AssemblyLoadContext assemblyLoadContext)
at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
at System.AppDomain.Load(AssemblyName assemblyRef)
at Nop.Core.Infrastructure.AppDomainTypeFinder.LoadMatchingAssemblies(String directoryPath)
at Nop.Core.Infrastructure.WebAppTypeFinder.GetAssemblies()
at Nop.Web.Framework.Infrastructure.Extensions.ServiceCollectionExtensions.ConfigureApplicationServices(IServiceCollection services, WebApplicationBuilder builder)
at Program.

$(String[] args)
Aborted (core dumped)

Bug with converting to base64

Hi!

I need to show result qr-code in img html tag using base64 encoding.
e.g.

When I use options Ecc.High and Ecc.Quartile all is ok.

But when I use options Ecc.Low and Ecc.Medium image is not shown.

I explored the result base64 string and saw that it had incorrect format. At the end of the string there is only one symbol "=" (but must be "=="). And If I take away several last symbols (about 600) of the string and add "=" symbol, everything is getting ok.

Also when I save bitmap to file (.png), everything is good. Problem is only with base64 string.

May be some unnesassary bytes get to bitmap when using options Low and Medium ?

My code:

public string ToBase64(string data)
{
            var qrCode = QrCode.EncodeText(data, QrCode.Ecc.Low);
            using (var ms = new MemoryStream())
            using (var bitmap = qrCode.ToBitmap(6, 10);)
            {
                bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                return Convert.ToBase64String(ms.GetBuffer());
            }
}

Suggestion

Wouldn't it make sense to create 3 sub packages, something like
Net.Codecrete.QrCodeGenerator.WindowsDrawing
Net.Codecrete.QrCodeGenerator.SkiaSharp
Net.Codecrete.QrCodeGenerator.ImageSharp

they could already have references to the relevant nuget packages they require.

Or is this more of a temporary solution until ImageSharp is out of beta

Error in the readme.md Manual operation Section

In the main readme.md of this repo, in section Manual operation there is Line 91:
"var segments = QrCode.MakeSegments("3141592653589793238462643383");"

I tried the example but QrCode for me has no member "MakeSegments". However if i change QrCode to QrSegment it works like a charm. Maybe a typo?

Regards Tobi

NumericRegex.IsMatch performance

I see some points to improve performance, for example replacing NumericRegex.IsMatch(text) to text.All(char.IsDigit) and similar cases. Do you plan to implement that or this just a strict port from Java version?

Support for other project types.

Not an issue per se, but trying to create a Maui Blazor Desktop app. Looking to have an SVG export option. Is this something that can be done?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.