• QRCoder生成二维码


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

    上面代码运行的结果

     还可以加上logo

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

     完整代码

    复制代码
    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();
            }
        }
    }
    复制代码
  • 相关阅读:
    Codeforces Round 718C Sasha and Array (矩阵线段树)
    Ural Timus 1009 K-based Numbers (dp+矩阵快速幂+快速乘)
    CPE常用指令
    Error opening terminal:xterm解决方法
    编译MT7620n NFS文件系统
    ubuntu中把dash链接变成bash
    USB相关
    HI3515海思开发板移植3G模块笔记
    openwrt的一些琐事
    snprintf拷贝字符串
  • 原文地址:https://www.cnblogs.com/IT-Evan/p/14363846.html
Copyright © 2020-2023  润新知