.Net Core 2.1的ZXing QrCode渲染器异常

时间:2018-10-03 06:17:46

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

我想使用ZXing(0.16.4)创建QR码,但遇到以下异常,

  

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();
    }
}

2 个答案:

答案 0 :(得分:2)

我解决了这个问题,基本上我使用了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();
    }
}

这里是读取QR码的方法,也许有人也会需要。 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;
        }
    }
}

希望这个答案可以保护别人的头发免受拉扯。

答案 1 :(得分:1)

有可用的较新版本的软件包,可与.NET Core 3.1一起使用。

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