asp.net - 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更改为. 结果就是上面的截图(右边的二维码)。
Decode
Pixelformats
Gray8
BlackWhite
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
产生噪音呢?为什么不干净?
解决方案
我发现了问题。我忽略了这些行,并没有意识到 .jpeg 被选为格式:
public void FromData(Bitmap bitmap)
{
using (var ms = new MemoryStream())
{
bitmap.Save(ms, ImageFormat.Jpeg);
//...
推荐阅读
- .net - 将类映射到记录时,AutoMapper“需要具有 0 args 或仅可选 args 的构造函数”
- mat-dialog - 如何防止 MatDialog 在外部单击时关闭
- apache - Debian 10 上的 Awstats - 访问次数太少 - 修复它的选项
- jquery - django-ajax-selects - 如何保留选定的选项
- docker - 在 docker 容器中使用 apache 服务器配置 SSL
- svelte - 如何通过 getElementById 获取类型?
- python-3.x - 为什么在训练 YOLOv5 模型时出现运行时错误?
- python - 对 3D pyplot 使用相同的比例
- c# - 带事件的硬币计数器
- swift - 如何在 Swift 中翻译/本地化变量