前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二维码识别(C#)

二维码识别(C#)

作者头像
码客说
发布2022-09-21 10:21:59
2.1K0
发布2022-09-21 10:21:59
举报
文章被收录于专栏:码客码客

添加依赖

Nuget下载依赖

image-20220809155234941
image-20220809155234941

注意

在做答题卡识别的时候不用用二值化的图片进行二维码的识别,识别率会大大下降。

生成二维码

代码语言:javascript
复制
public static Bitmap createQRImage(string str)
{
  QrCodeEncodingOptions options = new QrCodeEncodingOptions();
  options.CharacterSet = "UTF-8";
  options.DisableECI = true; // Extended Channel Interpretation (ECI) 主要用于特殊的字符集。并不是所有的扫描器都支持这种编码。
  options.ErrorCorrection = ZXing.QrCode.Internal.ErrorCorrectionLevel.H; // 纠错级别
  options.Width = 300;
  options.Height = 300;
  options.Margin = 1;
  BarcodeWriter writer = new BarcodeWriter();
  writer.Format = BarcodeFormat.QR_CODE;
  writer.Options = options;

  Bitmap bmp = writer.Write(str);
  return bmp;
}

纠错级别:

L - 约 7% 纠错能力。 M - 约 15% 纠错能力。 Q - 约 25% 纠错能力。 H - 约 30% 纠错能力。

生成条形码

代码语言:javascript
复制
public static Bitmap create128Image(string str)
{
  QrCodeEncodingOptions options = new QrCodeEncodingOptions();
  options.CharacterSet = "UTF-8";
  options.Width = 300;
  options.Height = 50;
  options.Margin = 1;
  options.PureBarcode = false; // 是否是纯码,如果为 false,则会在图片下方显示数字

  BarcodeWriter writer = new BarcodeWriter();
  writer.Format = BarcodeFormat.CODE_128;
  writer.Options = options;

  Bitmap bmp = writer.Write(str);
  return bmp;
}

识别二维码、条形码

代码语言:javascript
复制
using System.Drawing;

using ZXing;

namespace z.Common
{
  public class ZQrcodeUtil
  {
    public static string readCode(string imagePath)
    {
      string str = "";
      BarcodeReader reader = new BarcodeReader();
      reader.Options.CharacterSet = "UTF-8";
      using (Bitmap bmp = new Bitmap(imagePath))
      {
        Result result = reader.Decode(bmp);
        str = result.Text;
      }

      return str;
    }
  }
}

工具类

代码语言:javascript
复制
using System;
using System.Drawing;

using ZXing;
using ZXing.QrCode;

namespace Z.Common
{
  public class ZQrcodeUtil
  {
    /// <summary>
    /// 创建二维码
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static Bitmap createQRImage(string str)
    {
      QrCodeEncodingOptions options = new QrCodeEncodingOptions();
      options.CharacterSet = "UTF-8";
      options.DisableECI = true; // Extended Channel Interpretation (ECI) 主要用于特殊的字符集。并不是所有的扫描器都支持这种编码。
      options.ErrorCorrection = ZXing.QrCode.Internal.ErrorCorrectionLevel.H; // 纠错级别
      options.Width = 300;
      options.Height = 300;
      options.Margin = 1;
      BarcodeWriter writer = new BarcodeWriter();
      writer.Format = BarcodeFormat.QR_CODE;
      writer.Options = options;

      Bitmap bmp = writer.Write(str);
      return bmp;
    }

    /// <summary>
    /// 识别二维码
    /// </summary>
    /// <param name="bmp"></param>
    /// <returns></returns>
    public static string readCode(Bitmap bmp)
    {
      string str = "";
      BarcodeReader reader = new BarcodeReader();
      reader.Options.CharacterSet = "UTF-8";
      try
      {
        Result result = reader.Decode(bmp);
        if (result != null)
        {
          str = result.Text;
        }
      }
      catch (Exception)
      {
        return str;
      }

      return str;
    }

    /// <summary>
    /// 识别二维码
    /// </summary>
    /// <param name="imagePath"></param>
    /// <returns></returns>
    public static string readCode(string imagePath)
    {
      string str = "";
      BarcodeReader reader = new BarcodeReader();
      reader.Options.CharacterSet = "UTF-8";
      using (Bitmap bmp = new Bitmap(imagePath))
      {
        try
        {
          Result result = reader.Decode(bmp);
          if (result != null)
          {
            str = result.Text;
          }
        }
        catch (Exception)
        {
          return str;
        }
      }

      return str;
    }
  }
}

WEB二维码生成

方式1

https://www.npmjs.com/package/qrcode#usage

引用

代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/npm/qrcode/build/qrcode.min.js"></script>

或者

代码语言:javascript
复制
npm install --save qrcode

import QRCode from 'qrcode'

调用

代码语言:javascript
复制
let that = this;
var opts = {
  errorCorrectionLevel: 'H',
  type: 'image/jpeg',
  quality: 0.9,
  margin: 0,
  color: {
    dark: "#000000",
    light: "#ffffff"
  }
};
QRCode.toDataURL(
  "https://www.psvmc.cn",
  opts,
  function (err, url) {
    that.qrcode_url = url;
  });

注意

要转换的内容必须是字符串,不能是数字,否则会报错。

方式2

https://www.npmjs.com/package/qrcodejs2

代码语言:javascript
复制
let qrcodes = this.$refs["qrcode"];
for (const qrcode of qrcodes) {
  new QRCode(qrcode, {
    text: "https://www.psvmc.cn",
    width: 128,
    height: 128,
    colorDark: "#000000",
    colorLight: "#ffffff",
    correctLevel: QRCode.CorrectLevel.M
  });
}

更新二维码

代码语言:javascript
复制
qrcode.clear();
qrcode.makeCode("https://www.psvmc.cn");
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 添加依赖
  • 生成二维码
  • 生成条形码
  • 识别二维码、条形码
    • 工具类
    • WEB二维码生成
      • 方式1
        • 方式2
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档