【问题标题】:ZXing QrCode renderer exception with .Net Core 2.1ZXing QrCode 渲染器异常与 .Net Core 2.1
【发布时间】:2019-03-08 07:34:22
【问题描述】:

我想用 ZXing(0.16.4) 创建一个二维码,但是我遇到了以下异常,

System.InvalidOperationException: '你必须设置一个渲染器 实例。'

几乎相同的代码适用于 .Net Framework 4.6.1

这是我的代码

static void Main(string[] args)
{
    var qrCode = CreateQrCode("test");
    Console.ReadKey();
}

public static byte[] CreateQrCode(string content)
{
    BarcodeWriter<Bitmap> writer = new BarcodeWriter<Bitmap>
    {
        Format = BarcodeFormat.QR_CODE,
        Options = new QrCodeEncodingOptions
        {
            Width = 100,
            Height = 100,
        }
    };

    var qrCodeImage = writer.Write(content); // BOOM!!

    using (var stream = new MemoryStream())
    {
        qrCodeImage.Save(stream, ImageFormat.Png);
        return stream.ToArray();
    }
}

【问题讨论】:

    标签: c# .net-core qr-code zxing zxing.net


    【解决方案1】:

    我解决了这个问题,基本上我用https://www.nuget.org/packages/ZXing.Net.Bindings.CoreCompat.System.Drawing

    我创建从以下命名空间生成的 BarcodeWriter

    ZXing.CoreCompat.System.Drawing

    这是我的 CreateQrCode 方法

    public static byte[] CreateQrCode(string content)
    {
        BarcodeWriter writer = new BarcodeWriter
        {
            Format = BarcodeFormat.QR_CODE,
            Options = new QrCodeEncodingOptions
            {
                Width = 100,
                Height = 100,
            }
        };
    
        var qrCodeImage = writer.Write(content); // BOOM!!
    
        using (var stream = new MemoryStream())
        {
            qrCodeImage.Save(stream, ImageFormat.Png);
            return stream.ToArray();
        }
    }
    

    这里是读取二维码的方法,也许有人也需要。 BarcodeReader 也从与 create 相同的命名空间生成。

    方法如下

    public static string ReadQrCode(byte[] qrCode)
    {
        BarcodeReader coreCompatReader = new BarcodeReader();
    
        using (Stream stream = new MemoryStream(qrCode))
        {
            using (var coreCompatImage = (Bitmap)Image.FromStream(stream))
            {
                return coreCompatReader.Decode(coreCompatImage).Text;
            }
        }
    }
    

    希望这个答案能保护某人的头发不被拉扯。

    【讨论】:

      【解决方案2】:

      有一个更新版本的包可用,它适用于 .NET Core 3.1。

      https://www.nuget.org/packages/ZXing.Net.Bindings.Windows.Compatibility/

      【讨论】:

      • 与 .NET Core 完美配合
      【解决方案3】:

      使用ZXing.Net v0.16.6时需要添加“Renderer = new ZXing.Rendering.BitmapRenderer()”

      public static byte[] CreateQrCode(string content)
      {
          byte[] imageData;
      
          var qrWriter = new ZXing.BarcodeWriter<System.Drawing.Bitmap>
          {
              Format = BarcodeFormat.QR_CODE,
              Options = new ZXing.Common.EncodingOptions { Height = 100, Width = 100, Margin = 0 },
              Renderer = new ZXing.Rendering.BitmapRenderer()
          };
      
          using (var ms = new System.IO.MemoryStream())
          using (System.Drawing.Bitmap pixelData = qrWriter.Write(content))
          {
              pixelData.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
              imageData = ms.ToArray();
          }
      
          return imageData;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-24
        • 2018-11-30
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 2010-11-15
        • 2014-06-22
        相关资源
        最近更新 更多