文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

.NET Core使用SkiaSharp快速生成二维码( 真正跨平台方案)

2024-11-30 07:30

关注
System.TypeInitializationException : The type initializer for 'Gdip' threw an exception.
      ---- System.PlatformNotSupportedException : System.Drawing.Common is not supported on non-Windows platforms. See https://aka.ms/systemdrawingnonwindows for more information.
      Stack Trace:
           at System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String filename, IntPtr& bitmap)
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): at System.Drawing.Bitmap..ctor(String filename, Boolean useIcm)
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): at System.Drawing.Bitmap..ctor(String filename)
        /_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): at System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+MoveNext()
        /_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()
        ----- Inner Stack Trace -----
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): at System.Drawing.LibraryResolver.EnsureRegistered()
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): at System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize()
        /_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): at System.Drawing.SafeNativeMethods.Gdip..cctor()

报错原因

由于 System.Drawing.Common 被设计为 Windows 技术的精简包装器,因此其跨平台实现欠佳。

libgdiplus 是本机端 System.Drawing.Common 跨平台实现的主要提供程序。libgdiplus 实际上是对 System.Drawing.Common 所依赖的 Windows 部分的重新实现。该实现使 libgdiplus 成为一个重要的组件。它大约有 30,000 行 C 代码,大部分未经测试,而且缺少很多功能。libgdiplus 还具有许多用于图像处理和文本呈现的外部依赖项,例如 cairo、pango 和其他本机库。这些依赖项使得维护和交付组件更具挑战性。自从包含 Mono 跨平台实现以来,我们已将许多从未得到修复的问题重定向到 libgdiplus。相比之下,我们采用的其他外部依赖项,例如 icu 或 openssl,都是高质量的库。使 libgdiplus 的功能集和质量与 .NET 堆栈的其余部分相媲美是不可行的。

官方建议

在非 Windows 环境中,推荐使用 SkiaSharp 和 ImageSharp 等库来完成跨平台的图像处理操作。这些库提供了更全面和稳定的功能支持,适用于大多数图形操作需求。而 System.Drawing.Common 将主要继续在 Windows 窗体和 GDI+ 的上下文中进行演化。

SkiaSharp介绍

SkiaSharp是由Mono团队维护的开源项目,它是基于Google的Skia图形库的.NET跨平台绑定,提供了强大的2D图形绘制和处理功能,适用于多个平台,包括Windows、macOS、Linux、iOS和Android,可用于创建高性能的、可移植的2D图形应用程序。

SkiaSharp 提供了跨平台绑定,适用于以下平台:

这些平台可以使用 SkiaSharp 来进行跨平台的图形渲染和绘制操作。

使用SkiaSharp快速生成二维码

1、安装SkiaSharp.QrCode库

使用SkiaSharp生成二维码的QR码生成器(无需使用System.Drawing)。

图片

2、生成二维码图片

/// 
        /// 生成二维码图片
        /// 
        public static void GenerateQRCode()
        {
            var qrCodeContent = "追逐时光者";
            using (var generator = new QRCodeGenerator())
            {
                // 创建二维码(并设置纠错能力最高级)
                var createQrCode = generator.CreateQrCode(qrCodeContent, ECCLevel.H);

                var skImageInfo = new SKImageInfo(300, 300);

                // 创建SkiaSharp画布
                using (var surface = SKSurface.Create(skImageInfo))
                {
                    var canvas = surface.Canvas;

                    // 渲染二维码到画布
                    canvas.Render(createQrCode, skImageInfo.Width, skImageInfo.Height);

                    using (var image = surface.Snapshot())// 获取画布快照
                    using (var data = image.Encode(SKEncodedImageFormat.Png, 100))// 编码画布快照为PNG格式的数据
                    using (var stream = File.OpenWrite(@"MyQRCode.png"))
                    {
                        data.SaveTo(stream);// 将数据保存到文件流中,生成二维码图片
                    }
                }
            }
        }

二维码的纠错能力通常分为四个级别

namespace SkiaSharp.QrCode
{
    public enum ECCLevel
    {
        L,
        M,
        Q,
        H
    }
}

3、查看生成效果

图片

参考文章

来源:追逐时光者内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯