Liunx下通过netcore接口生成前端图片的问题。

用netcore来生成前端微信Native支付的二维码。

1、首先CentOS7.0要安装 libgdiplus ,命令如下:yum install libgdiplus-devel ,然后重启netcore服务。//这个地方要注意,网上有不少例子的下载命令是错的,有的时候安装不上。

2、Vs代码使用QRCoder库,代码如下

 public static MemoryStream GerQrCodeStream(string paystr,int pixels = 0)
 {
   QRCodeGenerator qrGenerator = new QRCoder.QRCodeGenerator();
   QRCodeData qrCodeData = qrGenerator.CreateQrCode(paystr, QRCodeGenerator.ECCLevel.Q);
   QRCoder.QRCode qrcode = new QRCoder.QRCode(qrCodeData);

   // qrcode.GetGraphic 方法可参考最下发“补充说明”
   var qrCodeImage = qrcode.GetGraphic(pixels);    
   MemoryStream ms = new(); 
   qrCodeImage.Save(ms, format: ImageFormat.Png);//这个地方会提示 Imager.Save仅在windows上受支持。可以不用管。不是错误。  
   return new MemoryStream(ms.GetBuffer());

 }

3、核心问题:System.Drawing.Common.dll必须要降到6.0。之前用System.Drawing.Common.dll 8.0版本一直不成功,报 The type initializer for "Gdip" threw an exception.System.PlatformNotSupportedException: System.Drawing.Common is not supported on non-Windows platforms.

在生成的项目中,会有一个x1yun.runtimeconfig.json文件。x1yun是我的项目名称,文件中的位置要加入

{
  "runtimeOptions": {
    "tfm": "net6.0",
    "frameworks": [
      {
        "name": "Microsoft.NETCore.App",
        "version": "6.0.0"
      },
      {
        "name": "Microsoft.AspNetCore.App",
        "version": "6.0.0"
      }
    ],
    "configProperties": {
      "System.GC.Server": true,
      "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
      "System.Reflection.NullabilityInfoContext.IsSupported": true,
      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
      "System.Drawing.EnableUnixSupport": true
    }
  }
}

QRCoder库是1.4.1

项目的目标框架是net6.0 。

估计是需要与目标框架一致才可以用System.Drawing.Common

posted on 2024-05-20 16:40  侗家小蚁哥  阅读(27)  评论(0编辑  收藏  举报