一个.NET开发的开源跨平台二维码生成库

虽然已经有很多生成二维码的解决方案,但是它们大多依赖System.Drawing,而.NET 6开始,使用System.Drawing操作图片,在生成解决方案或打包时,会收到一条警告,大致意思是System.Drawing仅在 ‘windows’ 上受支持。如果想避免使用 System.Drawing 来解决 GDI+ 的兼容性问题(需要安装libgdiplus)。可以使用真正的跨平台二维码生成方案SkiaSharp.QrCode,因为它完全不依赖GDI和System.Drawing。

下面使用SkiaSharp.QrCode来生成二维码:
创建一个.NET 项目,并给他起个名字,叫QrCodeDemo吧。

首先安装SkiaSharp.QrCode包:

.NET CLI方式

$ dotnet add package SkiaSharp.QrCode

Package Manager方式

PM> Install-Package SkiaSharp.QrCode

简单生成二维码图片:

//要生成二维码的内容
var qrcode_content = "这是一个二维码";
//输出的图片
using var output = new FileStream(@"wwwroot/qrcode.png", FileMode.OpenOrCreate);
//创建二维码
var qrCode = new QrCode(qrcode_content, new Vector2Slim(256, 256), SKEncodedImageFormat.Png);
//输出图片
qrCode.GenerateImage(output);

运行程序,在wwwroot目录下,会生成一个qrcode.png的二维码图片。
这是可以在xxxx.cshtml中加载二维码图片。

<div>
    <img src="/qrcode.png" width="250" height="250" />
</div>

也可以手动创建二维码,并使用SkiaSharp输出。

var qrcode_content = "这是一个二维码";
using var generator = new QRCodeGenerator();

// 生成二维码
var qr = generator.CreateQrCode(content, ECCLevel.L);

// 将二维码渲染到Canvas
var info = new SKImageInfo(512, 512);
using var surface = SKSurface.Create(info);
var canvas = surface.Canvas;
canvas.Render(qr, info.Width, info.Height);

// 输出文件
using var image = surface.Snapshot();
using var data = image.Encode(SKEncodedImageFormat.Png, 100);
using var stream = System.IO.File.OpenWrite(@"wwwroot/qrcode.png");
data.SaveTo(stream);

运行程序,在wwwroot目录下,会生成一个qrcode.png的二维码图片。

这时就有一个问题,不能每次生成二维码都生成一张图片吧。在实际应用中,虽然不排除每次都要生成一张二维码图片的需求,在大多数情况下,动态生成一张二维码,用就可以了。动态生成图片方面,base64格式是比较常见的一个办法。把上面的代码改造一下。输出一个base64字符串格式的图片,前端加载base64字符串格式的图片就OK了!

改造后的代码:

var qrcode_content = "这是一个二维码";
using var generator = new QRCodeGenerator();

// 生成二维码
var qr = generator.CreateQrCode(qrcode_content, ECCLevel.L);

// 将二维码渲染到Canvas
var info = new SKImageInfo(512, 512);
using var surface = SKSurface.Create(info);
var canvas = surface.Canvas;
canvas.Render(qr, info.Width, info.Height);

// 输出文件
//using var image = surface.Snapshot();
//using var data = image.Encode(SKEncodedImageFormat.Png, 100);
//using var stream = System.IO.File.OpenWrite(@"wwwroot/qrcode.png");
//data.SaveTo(stream);

using var image = surface.Snapshot();
//转为SKData
using SKData data = image.Encode(SKEncodedImageFormat.Png, 100);
var array = data.ToArray();
string  Base64String = $"data:{SKEncodedImageFormat.Png.ToString().ToLower()};base64,{Convert.ToBase64String(array,0,array.Length)}";
ViewBag.Base64String = Base64String;

前端代码:

<div>
    <img src="@(ViewBag.Base64String)" width="250" height="250" />
</div>

在这里插入图片描述
看起来还不错。

SkiaSharp.QrCode代码地址:
https://github.com/guitarrapc/SkiaSharp.QrCode

本文完整DEMO下载:

点击下方公众号卡片,关注我,回复1011 下载!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾斜的水瓶座

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值