• 一个.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
    
    • 1

    Package Manager方式

    PM> Install-Package SkiaSharp.QrCode
    
    • 1

    简单生成二维码图片:

    //要生成二维码的内容
    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    <div>
        <img src="/qrcode.png" width="250" height="250" />
    div>
    
    • 1
    • 2
    • 3

    也可以手动创建二维码,并使用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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    运行程序,在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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    前端代码:

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

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

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

    本文完整DEMO下载:

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

  • 相关阅读:
    【数据结构】图的存储结构及实现(邻接表和十字链表)
    joomscan工具使用(针对joomla扫描)
    IIS部署.Net 7项目
    Linux 安装 jdk8
    LeetCode 43. 字符串相乘
    Java学习笔记:异常处理
    书生浦语大模型实战营---Linux 基础知识
    java+python+vue乡村医生学习培训医疗服务系统
    19 04-读取DTC快照信息
    全都会!预测蛋白质标注!创建讲义!解释数学公式!最懂科学的智能NLP模型Galactica尝鲜 ⛵
  • 原文地址:https://blog.csdn.net/sd2208464/article/details/133608689