我想将二维码保存为图片

问题描述 投票:0回答:1

这是代码

[HttpGet("GenerateQrCode")]
public ActionResult<string> GenerateQrCode(string sellername, string vatregistration, string timestamp, string invoiceamount,
    string vatamoun)
{
    string ltr = ((char)0x200E).ToString();
    var seller = ConvertTLV("1", sellername);
    var vatno = ConvertTLV("2", vatregistration);
    var time = ConvertTLV("3", timestamp);
    var invamt = ConvertTLV("4", invoiceamount);
    var vatamt = ConvertTLV("5", vatamoun);
    var result = seller.Concat(vatno).Concat(time).Concat(invamt).Concat(vatamt).ToArray();
   
    return Ok(new
    {
        QrCode = Convert.ToBase64String(result)
    }) ;
}

我试着做这个

[HttpGet("GenerateQrCode")]
public ActionResult<string> GenerateQrCode(string sellername, string vatregistration, string timestamp, string invoiceamount,
    string vatamoun)
{
    string ltr = ((char)0x200E).ToString();
    var seller = ConvertTLV("1", sellername);
    var vatno = ConvertTLV("2", vatregistration);
    var time = ConvertTLV("3", timestamp);
    var invamt = ConvertTLV("4", invoiceamount);
    var vatamt = ConvertTLV("5", vatamoun);
    var result = seller.Concat(vatno).Concat(time).Concat(invamt).Concat(vatamt).ToArray();

    string QrCode = Convert.ToBase64String(result);
    byte[] qrCodeBytes = Convert.FromBase64String(QrCode);
    string filePath = "E:/qrcode.png";
    using (var stream = new MemoryStream(qrCodeBytes))
    {
        stream.Position = 0; // Set the position to the beginning of the stream

        try
        {
            Image qrCodeImage = Image.FromStream(stream);

           
            qrCodeImage.Save(filePath, ImageFormat.Png);
        }
        catch (ArgumentException ex)
        {
            // Handle the "Parameter is not valid" error
            Console.WriteLine("Error: " + ex.Message);
        }
    }

    return Ok(new
    {
        qrcode   = filePath
    }) ;
}
c# .net angular entity-framework asp.net-web-api
1个回答
0
投票

首先,字节数组

qrCodeBytes
包含QR码的原始二进制数据,而不是实际的QR图像。因此,尝试直接从它创建
Image
不会给你想要的结果。首先,您必须自行生成二维码。

要将二进制数据转换为图像,您需要使用二维码库从数据生成图像。例如:

using QRCoder; 

QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(QrCode, QRCodeGenerator.ECCLevel.Q);
QRCode qrCode = new QRCode(qrCodeData);

using (Bitmap bitMap = qrCode.GetGraphic(20))
{
  bitMap.Save(filePath, ImageFormat.Png); 
}

文件路径需要是完全限定的路径,而不仅仅是文件名。

© www.soinside.com 2019 - 2024. All rights reserved.