基于ZXing.NET实现的二维码生成和识别客户端

这篇具有很好参考价值的文章主要介绍了基于ZXing.NET实现的二维码生成和识别客户端。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

ZXing.Net的一个可移植软件包,是一个开源的、多格式的1D/2D条形码图像处理库,最初是用Java实现的。已经过大量优化和改进,它已经被手动移植。它与.Net 2.0、.Net 3.5、.Net 4.x、.Net 5.x、.Net 6.x、.Net 7.x、Windows RT类库和组件、UWP、.Net Standard 1.x和2.0x、.Net Core App 3.x、Silverlight 4、Silverlight 5、Windows Phone 7.x和Windows Phone 8.x以及Xamarin.Android兼容。

二、项目环境和搭建

项目框架:.NET Framework 4.6.1

项目依赖:ZXing.Net

基于ZXing.NET实现的二维码生成和识别客户端

项目结构和界面设计

基于ZXing.NET实现的二维码生成和识别客户端

三、实现核心代码

ZXing帮助类

 /// <summary>
 /// ZXing.NET 二维码帮助类
 /// </summary>
 public class ZXingHelper
 {

     /// <summary>
     /// 站点二维码的目录
     /// </summary>
     private static string QRCodeDirectory = "QRCode";
     /// <summary>
     /// 使用zxing动态库生成二维码
     /// </summary>
     /// <param name="conetnt">二维码内容</param>
     /// <param name="errorMessage">异常信息</param>
     /// <param name="logoPath">logo图片路径,默认为空。为空时生成的二维码不带logo</param>
     /// <param name="height">二维码图片高度,默认240 单位 pixels</param>
     /// <param name="width">二维码图片宽度,默认240 单位 pixels</param>
     /// <param name="margin">二维码图片边距,默认为0</param>
     /// <returns></returns>
     public static Bitmap GenerateQRCode(string conetnt, out string errorMessage, string logoPath = "", int height = 240, int width = 240, int margin = 0)
     {
         errorMessage = string.Empty;
         try
         {
             BarcodeWriter barCodeWriter = new BarcodeWriter();
             barCodeWriter.Format = BarcodeFormat.QR_CODE;
             barCodeWriter.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
             barCodeWriter.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H);
             barCodeWriter.Options.Height = height;
             barCodeWriter.Options.Width = width;
             barCodeWriter.Options.Margin = margin;
             BitMatrix bm = barCodeWriter.Encode(conetnt);
             Bitmap qrCodeImage = barCodeWriter.Write(bm);

             if (!string.IsNullOrEmpty(logoPath))
             {
                 // 添加Logo
                 Bitmap logo = new Bitmap(logoPath);
                 int logoSize = (int)(qrCodeImage.Width * 0.2); // Logo大小为二维码大小的1/5
                 int logoX = (qrCodeImage.Width - logoSize) / 2;
                 int logoY = (qrCodeImage.Height - logoSize) / 2;

                 Graphics qrGraphics = Graphics.FromImage(qrCodeImage);
                 qrGraphics.DrawImage(logo, new Rectangle(logoX, logoY, logoSize, logoSize));
             }

             return qrCodeImage;
         }
         catch (Exception ex)
         {
             errorMessage = $"Exception raised when generating QRCode,, Exception;{ex}";
             return null;
         }
     }

     /// <summary>
     /// 使用zxing动态库解析:二维码,条形码......
     /// </summary>
     /// <param name="image">二维码图像</param>
     /// <returns></returns>
     public static string ParseBarCode(Bitmap image)
     {
         BarcodeReader reader = new BarcodeReader();
         Result result = reader.Decode(image);
         return result.Text;
     }

     /// <summary>
     /// 使用zxing动态库生成二维码
     /// </summary>
     /// <param name="conetnt">二维码内容</param>
     /// <param name="logoPath">logo图片路径,默认为空。为空时生成的二维码不带logo</param>
     /// <param name="height">二维码图片高度,默认240 单位 pixels</param>
     /// <param name="width">二维码图片宽度,默认240 单位 pixels</param>
     /// <param name="margin">二维码图片边距,默认为0</param>
     /// <returns></returns>
     public static void GenerateQRCode(string conetnt, string logoPath = "", int height = 240, int width = 240, int margin = 0)
     {
         try
         {
             BarcodeWriter barCodeWriter = new BarcodeWriter();
             barCodeWriter.Format = BarcodeFormat.QR_CODE;
             barCodeWriter.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
             barCodeWriter.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H);
             barCodeWriter.Options.Height = height;
             barCodeWriter.Options.Width = width;
             barCodeWriter.Options.Margin = margin;
             BitMatrix bm = barCodeWriter.Encode(conetnt);
             Bitmap qrCodeImage = barCodeWriter.Write(bm);

             if (!string.IsNullOrEmpty(logoPath))
             {
                 // 添加Logo
                 Bitmap logo = new Bitmap(logoPath);
                 int logoSize = (int)(qrCodeImage.Width * 0.2); // Logo大小为二维码大小的1/5
                 int logoX = (qrCodeImage.Width - logoSize) / 2;
                 int logoY = (qrCodeImage.Height - logoSize) / 2;

                 Graphics qrGraphics = Graphics.FromImage(qrCodeImage);
                 qrGraphics.DrawImage(logo, new Rectangle(logoX, logoY, logoSize, logoSize));
             }
             string qrCodeFile = AppDomain.CurrentDomain.BaseDirectory + QRCodeDirectory + "/" + "qrcode.jpg";
             if (File.Exists(qrCodeFile))
             {
                 File.Delete(qrCodeFile);
             }
             qrCodeImage.Save(qrCodeFile, System.Drawing.Imaging.ImageFormat.Jpeg);//保存二维码图片
         }
         catch (Exception ex)
         {

         }
     }
 }

选择logo

    /// <summary>
    /// 选择logo
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btn_selectlogo_Click(object sender, EventArgs e)
    {
        try
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);//初始路径为桌面
            openFileDialog.Filter = "Logo图片|*.png;*.jpg;*.jpeg;*.ico";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                picLogo.Image = Image.FromFile(openFileDialog.FileName);
                logPath = openFileDialog.FileName;//logo文件路径
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }

生成二维码

  /// <summary>
  /// 生成二维码
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void bt_generate_Click(object sender, EventArgs e)
  {
      try
      {
          string errorMsg = "";
          string content = rtbQRCodeContent.Text;
          if (string.IsNullOrWhiteSpace(content))
          {
              MessageBox.Show("二维码内容不能为空!");
              return;
          }

          picQRCode.Image = ZXingHelper.GenerateQRCode(content, out errorMsg, logPath);
          if (!string.IsNullOrWhiteSpace(errorMsg))
          {
              MessageBox.Show(errorMsg);
          }
      }
      catch (Exception ex)
      {
          MessageBox.Show(ex.Message);
      }
  }

识别二维码

  /// <summary>
  /// 识别二维码
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btn_identityQrCode_Click(object sender, EventArgs e)
  {
      try
      {
          if (picQRCode.Image == null)
          {
              MessageBox.Show("请先生成二维码!");
              return;
          }
          Bitmap Imagemap = new Bitmap(picQRCode.Image);
          string QRCodeResult = ZXingHelper.ParseBarCode(Imagemap);
          rtbQRCodeResult.Text = QRCodeResult;
      }
      catch (Exception ex)
      {
          MessageBox.Show(ex.Message);
      }
  }

保存二维码

  /// <summary>
  /// 保存二维码
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btn_save_Click(object sender, EventArgs e)
  {
      try
      {
          if (picQRCode.Image == null)
          {
              MessageBox.Show("请先生成二维码!");
              return;
          }
          SaveFileDialog saveFileDialog = new SaveFileDialog();
          saveFileDialog.Filter = "保存图片|*.png;*.jpg;*.jpeg";
          if (saveFileDialog.ShowDialog() == DialogResult.OK)
          {
              picQRCode.Image.Save(saveFileDialog.FileName, ImageFormat.Png);
              MessageBox.Show("保存成功!");
          }
      }
      catch (Exception ex)
      {
          MessageBox.Show(ex.Message);
      }
  }

四、实现演示

基于ZXing.NET实现的二维码生成和识别客户端

五、源码工具获取

关注公众号,后台回复关键字:二维码工具文章来源地址https://www.toymoban.com/news/detail-711608.html

到了这里,关于基于ZXing.NET实现的二维码生成和识别客户端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring boot 通过zxing生成二维码

    Spring Boot是一个基于Spring框架的快速开发、便捷部署的微服务框架。而ZXing是一个功能强大的开源库,用于生成和解析二维码。在Spring Boot应用中,您可以整合ZXing库来方便地生成二维码。 接下来,创建一个Spring Boot服务,并编写一个控制器类来生成二维码。以下是一个简单的

    2024年01月21日
    浏览(34)
  • opencv案例03 -基于OpenCV实现二维码生成,发现,定位,识别

    废话不多说,直接上代码 运行效果: 会在当前目前生成一张图片 对生成的二维码识别 opencv从4代之后推出了二维码识别接口.调用方法是这样的.代码如下: 运行结果: 返回值有三个, 第一个result就是解码后的内容,例如我这个二维码的结果是\\\"B0018\\\",当然也可以是个纯数字. 第二

    2024年02月11日
    浏览(29)
  • 在Spring Boot中使用ZXing开源库生成带有Logo的二维码

    在上一篇文章的基础上,我们将进一步扩展功能,实现在生成的二维码中嵌入Logo图片。这样的二维码更具个性化和识别度。让我们逐步完成这个功能。 首先,准备一张用作Logo的图片,并确保它的大小适中。将Logo图片放置在项目的资源文件夹中,例如 src/main/resources 。 在 Q

    2024年01月24日
    浏览(33)
  • 基于Qt的二维码生成与识别

    1.通过封装的QZxing开源库生成和识别二维码,下载地址: GitCode - 开发者的代码家园 https://gitcode.com/mirrors/ftylitak/qzxing/tree/master。 2.下载解压后,使用Qt Creator xx(qt编程软件)打开src目录下的QZXing.pro文件并运行代码,在编译的debug路径下获取QZXing3.dll和libQZXing3.a库文件。 1.在.

    2024年04月27日
    浏览(21)
  • Android之 Zxing二维码详解

    一 简介 1.1 ZXing 目前Android扫描二维码,条形码主要用google官方的工具Zxing,支持扫码,相册解码,生成带logo的二维码等功能  Zxing github 示例地址:https://github.com/zxing/zxing 1.2 ZBar 由于zxing是基于java编写的,扫码速度和解析上可能没那么快,但大部分场合足够用。也有基于c/

    2024年02月08日
    浏览(27)
  • .NET/C# 生成二维码

    大家好,在本章是如何通过.net/C#来生成二维码 首先大家还是需要仔细阅读这篇文档有小细节就需要注意 大家需要生成一些类,把我的方法复制进去,如果不想添加类的话,大家需要再主代码上更改引用信息找到我们所添加的方法 不适用于零基础的朋友,适用于有点经验的懂

    2024年02月06日
    浏览(35)
  • zxing二维码位矩阵转换成Bitmap位图

    ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。 该项目可实现的条形码编码和解码。我们支持以下格式: UPC-A,UPC-E EAN-8,EAN-13 39码 93码 代码128 创新及科

    2023年04月11日
    浏览(35)
  • AI生成二维码Stable diffusion生成可识别二维码【附完整教程】&【附完整案例】

    最近的炫酷QR比较火,所以今天给大家分享一下如何实现。首先我们知道QR二维码已经改变了信息的共享和获取方式。但是,QR码的视觉外观可能并不总是符合设计或艺术品的美学要求。为了解决这个问题,ControlNet for Stable Diffusion的工具在Stable Diffusion上可以将QR二维码信息隐藏

    2024年02月16日
    浏览(33)
  • .NET生成微信小程序推广二维码

    对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了。今天接到一个需求就是生成小程序码,并且与运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种二维码就可以进入小程序。为了节省服务器内存资源,我

    2024年04月23日
    浏览(38)
  • java生成、识别条形码和二维码

    使用 zxing 开源库 Zxing主要是Google出品的,用于识别一维码和二维码的第三方库 主要类: BitMatrix 位图矩阵 MultiFormatWriter 位图编写器 MatrixToImageWriter 写入图片 可以生成、识别条形码和二维码 内置三种尺寸: enum Size {SMALL, MIDDLE, BIG} 依赖 将宽度不等的多个黑条和白条,按照一定

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包