ASP.NET Core QRCoder 生成二维码

使用QRCoder开源库,github地址: https://github.com/codebude/QRCoder

本文源码:https://github.com/forestGzh/QRCoderDemo

在visual studio中,可以通过NuGet软件包管理器搜索QRCoder去安装QRCoder,也可以在NuGet软件包管理器控制台中运行以下命令:Install-Package QRCoder

生成二维码:

引入:

using QRCoder;

        /// 
        /// 获取二维码
        /// 
        /// 
        [HttpGet("QRCode")]
        public ActionResult QRCode()
        {
            QRCodeGenerator qrGenerator = new QRCodeGenerator();

            string playload = "888";

            QRCodeData qrCodeData = qrGenerator.CreateQrCode(playload, QRCodeGenerator.ECCLevel.H);
            QRCode qrCode = new QRCode(qrCodeData);

            Bitmap qrCodeImage = qrCode.GetGraphic(10, Color.Black, Color.White, null, 15, 6, true);

            var bitmapBytes = BitmapToBytes(qrCodeImage);
            


            return File(bitmapBytes, "image/jpeg");
        }

        private static byte[] BitmapToBytes(Bitmap img)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                img.Save(stream, ImageFormat.Jpeg);
                return stream.GetBuffer();
            }
        }

在linux环境中发布时,生成的二维码会出错,出错提示

fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
System.TypeInitializationException: The type initializer for 'Gdip' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'libgdiplus': The specified module could not be found.

,原因应该是System.Drawing.Common这个组件在linux中的问题,System.Drawing.Common 组件使用图形功能依赖于GDI+,但是在Linux上是没有GDI+的。Mono团队使用libgdiplus实现了GDI+接口,使linux系统可以访问GDI+接口。
在linux系统中找不到libgdiplus,就报错了,
在linux系统中安装(本文是在centos环境中),其他linux发行版可以查一下有没有libgdiplus,没有的话去github找找,用源码编译一个

apt-get update
apt-get install libgdiplus -y
ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll

在docker容器中运行的话在Dockerfile文件中加上

RUN apt-get update -y && apt-get install -y libgdiplus && apt-get clean && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll

你可能感兴趣的:(ASP.NET Core QRCoder 生成二维码)