c# 生成二维码的示例

作者:UP技术控 时间:2021-09-17 14:03:26 

二维码是越来越流行了,很多地方都有可能是使用到。如果是静态的二维码还是比较好处理的,通过在线工具就可以直接生成一张二维码图片,比如:草料二维码。但有的时候是需要动态生成的(根据动态数据生成),这个使用在线就工具就无法实现了。最好是能在代码中直接生成一个二维码图片,这里我就介绍下使用QRCoder类库在代码中生成二维码。

网上生成二维码的组件还是挺多的,但是真正好用且快速的却不多。QRCoder就是我在众多中找到的,它的生成速度快、而且使用也相当方便。

开始编码

1、安装 QRCoder组件。在项目上通过NuGet包管理器来安装,搜索名称:QRCoder

2、在代码中添加引用:using QRCoder;

3、编码生成


private void RenderQrCode()
   {
     string level = comboBoxECC.SelectedItem.ToString();
     QRCodeGenerator.ECCLevel eccLevel = (QRCodeGenerator.ECCLevel)(level == "L" ? 0 : level == "M" ? 1 : level == "Q" ? 2 : 3);
     using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
     {
       using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(textBoxQRCode.Text, eccLevel))
       {
         using (QRCode qrCode = new QRCode(qrCodeData))
         {

pictureBoxQRCode.BackgroundImage = qrCode.GetGraphic(20, Color.Black, Color.White,
             GetIconBitmap(), (int) iconSize.Value);

this.pictureBoxQRCode.Size = new System.Drawing.Size(pictureBoxQRCode.Width, pictureBoxQRCode.Height);
           //Set the SizeMode to center the image.
           this.pictureBoxQRCode.SizeMode = PictureBoxSizeMode.CenterImage;

pictureBoxQRCode.SizeMode = PictureBoxSizeMode.StretchImage;
         }
       }
     }
   }

上面代码运行的结果

c# 生成二维码的示例

还可以加上logo


private Bitmap GetIconBitmap()
   {
     Bitmap img = null;
     if (iconPath.Text.Length > 0)
     {
       try
       {
         img = new Bitmap(iconPath.Text);
       }
       catch (Exception)
       {
       }
     }
     return img;
   }

c# 生成二维码的示例

完整代码


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QRCoder;
using System.Drawing.Imaging;
using System.IO;

namespace QRCoderDemo
{
 public partial class Form1 : Form
 {
   public Form1()
   {
     InitializeComponent();
   }

private void Form1_Load(object sender, EventArgs e)
   {
     comboBoxECC.SelectedIndex = 0; //Pre-select ECC level "L"
     RenderQrCode();
   }

private void buttonGenerate_Click(object sender, EventArgs e)
   {
     RenderQrCode();
   }

private void RenderQrCode()
   {
     string level = comboBoxECC.SelectedItem.ToString();
     QRCodeGenerator.ECCLevel eccLevel = (QRCodeGenerator.ECCLevel)(level == "L" ? 0 : level == "M" ? 1 : level == "Q" ? 2 : 3);
     using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
     {
       using (QRCodeData qrCodeData = qrGenerator.CreateQrCode(textBoxQRCode.Text, eccLevel))
       {
         using (QRCode qrCode = new QRCode(qrCodeData))
         {

pictureBoxQRCode.BackgroundImage = qrCode.GetGraphic(20, Color.Black, Color.White,
             GetIconBitmap(), (int) iconSize.Value);

this.pictureBoxQRCode.Size = new System.Drawing.Size(pictureBoxQRCode.Width, pictureBoxQRCode.Height);
           //Set the SizeMode to center the image.
           this.pictureBoxQRCode.SizeMode = PictureBoxSizeMode.CenterImage;

pictureBoxQRCode.SizeMode = PictureBoxSizeMode.StretchImage;
         }
       }
     }
   }

private Bitmap GetIconBitmap()
   {
     Bitmap img = null;
     if (iconPath.Text.Length > 0)
     {
       try
       {
         img = new Bitmap(iconPath.Text);
       }
       catch (Exception)
       {
       }
     }
     return img;
   }

private void selectIconBtn_Click(object sender, EventArgs e)
   {
     OpenFileDialog openFileDlg = new OpenFileDialog();
     openFileDlg.Title = "Select icon";
     openFileDlg.Multiselect = false;
     openFileDlg.CheckFileExists = true;
     if (openFileDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
     {
       iconPath.Text = openFileDlg.FileName;
       if (iconSize.Value == 0)
       {
         iconSize.Value = 15;
       }
     }
     else
     {
       iconPath.Text = "";
     }
   }

private void btn_save_Click(object sender, EventArgs e)
   {

// Displays a SaveFileDialog so the user can save the Image
     SaveFileDialog saveFileDialog1 = new SaveFileDialog();
     saveFileDialog1.Filter = "Bitmap Image|*.bmp|PNG Image|*.png|JPeg Image|*.jpg|Gif Image|*.gif";
     saveFileDialog1.Title = "Save an Image File";
     saveFileDialog1.ShowDialog();

// If the file name is not an empty string open it for saving.
     if (saveFileDialog1.FileName != "")
     {
       // Saves the Image via a FileStream created by the OpenFile method.
       using (FileStream fs = (System.IO.FileStream) saveFileDialog1.OpenFile())
       {
         // Saves the Image in the appropriate ImageFormat based upon the
         // File type selected in the dialog box.
         // NOTE that the FilterIndex property is one-based.

ImageFormat imageFormat = null;
         switch (saveFileDialog1.FilterIndex)
         {
           case 1:
             imageFormat = ImageFormat.Bmp;
             break;
           case 2:
             imageFormat = ImageFormat.Png;
             break;
           case 3:
             imageFormat = ImageFormat.Jpeg;
             break;
           case 4:
             imageFormat = ImageFormat.Gif;
             break;
           default:
             throw new NotSupportedException("File extension is not supported");
         }

pictureBoxQRCode.BackgroundImage.Save(fs, imageFormat);
         fs.Close();
       }
     }

}

public void ExportToBmp(string path)
   {

}

private void textBoxQRCode_TextChanged(object sender, EventArgs e)
   {
     RenderQrCode();
   }

private void comboBoxECC_SelectedIndexChanged(object sender, EventArgs e)
   {
     RenderQrCode();
   }
 }
}

来源:https://www.tuicool.com/articles/JFVZJ3A

标签:c#,二维码
0
投稿

猜你喜欢

  • 关于idea中SpringBoot启动失败的坑

    2022-07-18 13:02:24
  • java 实现截取字符串并按字节分别输出实例代码

    2021-08-28 08:10:44
  • java网络爬虫连接超时解决实例代码

    2022-02-02 06:57:28
  • eclipse 中的javac命令与java命令

    2023-08-19 14:16:57
  • Android动画之补间动画(Tween Animation)实例详解

    2023-10-18 09:40:53
  • Java并发编程中的生产者与消费者模型简述

    2023-02-16 20:33:18
  • WinForm中KeyDown,KeyPress和KeyUp的顺序与区别解析

    2023-06-30 22:34:36
  • Java 三种进制的数值常量操作

    2021-11-14 21:39:41
  • Android中RecyclerView上拉下拉,分割线,多条目的实例代码

    2022-10-14 06:05:07
  • 浅析Java设计模式编程中的单例模式和简单工厂模式

    2021-10-13 15:27:54
  • 面试官:Java中new Object()到底占用几个字节

    2022-02-09 19:04:00
  • 解决idea spring boot 修改html等不重启即时生效的问题

    2023-11-13 18:37:47
  • 基于Java Springboot + Vue + MyBatis实现音乐播放系统

    2023-07-09 16:01:41
  • C#控制台程序如何发布到服务器Linux上运行

    2022-07-17 05:57:52
  • Java聊天室之实现获取Socket功能

    2023-09-19 03:57:10
  • c#基于Win32Api实现返回Windows桌面功能

    2022-11-21 15:29:51
  • Android自定义View绘制的方法及过程(二)

    2023-05-02 14:42:17
  • Java中的字节流文件读取教程(一)

    2023-08-14 08:14:47
  • 配合Swagger使用绝佳的两款直观易用JSON可视化工具

    2021-10-14 23:50:23
  • SpringBoot中dubbo+zookeeper实现分布式开发的应用详解

    2023-09-13 19:04:45
  • asp之家 软件编程 m.aspxhome.com