微信公众号中看到一篇介绍C#跨平台生成二维码的文章《使用C#快速生成二维码 | 真正跨平台方案》(微信公众号中没有带链接,在网上找了一篇内容一模一样的)。文章中使用SkiaSharp.QrCode跨平台生成二维码。
SkiaSharp是基于GoogleSkia图形库(skia.org)的,NET跨平台二维图形库,其中的API支持跨移动端、服务器和桌面渲染图形。关于SkiaSharp的详细介绍及类型说明详见参考文献1和4。本文主要根据参考文献2中的代码进行学习,并在windows平台上验证SkiaSharp.QrCode的使用方式。
创建Winform项目,并添加skiasharp.qrcode的包引用(具体添加方式见《VS2019中通过NuGet添加包依赖项》)。
首先照着参考文献2中的代码将二维码输入到文件中,代码逻辑比较简单,主要用到的类包括QRCodeGenerator、SKImageInfo、SKCanvas 、SKImage ,具体的类型介绍请见参考文献4.
QRCodeGenerator generator = new QRCodeGenerator();
QRCodeData qr = generator.CreateQrCode(txtRawValue.Text, ECCLevel.H);
// 创建一个Canvas
SKImageInfo info = new SKImageInfo(512, 512);
using (SKSurface surface = SKSurface.Create(info))
{
SKCanvas canvas = surface.Canvas;
// 渲染二维码到Canvas
canvas.Render(qr, info.Width, info.Height);
// 输出到文件
using (SKImage image = surface.Snapshot())
{
using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
{
using (var stream = File.OpenWrite(@"QRCode.png"))
{
data.SaveTo(stream);
}
}
}
}
除了输出到本地文件,还可以将二维码图形显示在控件中,主要使用的类型包括QRCodeGenerator、SKImageInfo、SKCanvas和SKImage ,详细代码及效果图如下:
using (SKSurface surface = SKSurface.Create(info))
{
SKCanvas canvas = surface.Canvas;
// 渲染二维码到Canvas
canvas.Render(qr, info.Width, info.Height);
// 输出到图形控件
using (SKImage image = surface.Snapshot())
{
picQrCode.Image = Image.FromStream(image.Encode(SKEncodedImageFormat.Png, 100).AsStream());
}
}
用微信的扫一扫功能扫描上述二维码,显示的结果如下。
SkiaSharp支持跨平台,功能强大,本文主要学习参考文献中的代码示例并进行技术验证,后续还会继续学习SkiaSharp相关类型的使用方式。
参考文献:
[1]https://github.com/mono/SkiaSharp
[2]https://blog.csdn.net/zls365365/article/details/122315085
[3]https://www.nuget.org/packages/SkiaSharp.QrCode/
[4]https://docs.microsoft.com/en-us/dotnet/api/skiasharp?view=skiasharp-2.80.2