首页 > 解决方案 > QrCoder Asp.Net - 如何去除噪音?

问题描述

现在我正在使用来自 Asp.Net 的 QrCoder 创建我的二维码。你可以在下面看到我的代码:
SvgQrCode:

    public void UpdateText(string value)
    {
        using (var qrGenerator = new QRCodeGenerator())
        {
            using (var qrCodeData = qrGenerator.CreateQrCode(value, QRCodeGenerator.ECCLevel.Q))
            {
                using (var qrCode = new QRCode(qrCodeData))
                {
                    using (var bitmap = qrCode.GetGraphic(1, Color.Black, Color.White, false))
                    {
                        Image.FromData(bitmap);
                    }
                    Text = value;
    }   }   }   }

xml:

   <Image Source="{Binding Element.ImageSource}"
          RenderOptions.BitmapScalingMode="NearestNeighbor"
          RenderOptions.EdgeMode="Aliased"
          Width="{Binding Element.Width}"
          Height="{Binding Element.Height}"
          Stretch="Uniform">

发生了什么: 生成的 QR 码有一些轻微的噪音,您可以在左侧的屏幕截图中看到(左侧 Gray8,右侧 BlackWhite):我尝试了什么: 我将方法从from更改为. 结果就是上面的截图(右边的二维码)。

在此处输入图像描述
DecodePixelformatsGray8BlackWhite

 internal static BitmapSource Decode(string value, int? pixelWidth, BitmapCacheOption cacheOption = BitmapCacheOption.OnLoad)
 {
        // ..some code..
        var grey = new FormatConvertedBitmap(bitmap, PixelFormats.Gray8, BitmapPalettes.Gray256, 1.0);
        return grey;
 }

我尝试的另一件事是更改qrCode.GetGraphic(1)为更高的qrCode.GetGraphic(10)内容,这会增加pixels per module. 但这不是解决问题的干净方法,因为噪声变得非常小(所以你几乎看不到它了)并且每个模块的像素正在增加。

我的问题:我正在对二维码、条形码和图像使用解码方法。因此,如果我要添加图像,它将是黑白的。当然,我可以使用 if 语句并检查它是否是图像或二维码/条形码。但是为什么会PixelFormats.Gray8产生噪音呢?为什么不干净?

标签: asp.netwpfbitmapasp.net-core-mvcqr-code

解决方案


我发现了问题。我忽略了这些行,并没有意识到 .jpeg 被选为格式:

public void FromData(Bitmap bitmap)
{
   using (var ms = new MemoryStream())
   {
     bitmap.Save(ms, ImageFormat.Jpeg);
     //...

推荐阅读