C#中二维码生成 使用Gma.QrCodeNet.Encoding类库却无法使用Renderer类?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中二维码生成 使用Gma.QrCodeNet.Encoding类库却无法使用Renderer类?相关的知识,希望对你有一定的参考价值。

using Gma.QrCodeNet.Encoding;
代码:
QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);
QrCode qrCode = new QrCode();
qrEncoder.TryEncode("helloWorld", out qrCode);
Renderer renderer = new Renderer(5, Brushes.Black, Brushes.White);

renderer.CreateImageFile(qrCode.Matrix, @"c:\temp\HelloWorld.png", ImageFormat.Png);

参考技术A QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
Image image;
String data = "123456";
image = qrCodeEncoder.Encode(data);
filename = DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";
filepath = context.Server.MapPath(@"~\File") + "\\" + filename;
System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);

C# 代码生成二维码方法及代码示例(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(); } }}

喜欢就来个三连,让更多人因你而受益


以上是关于C#中二维码生成 使用Gma.QrCodeNet.Encoding类库却无法使用Renderer类?的主要内容,如果未能解决你的问题,请参考以下文章

生成二维码的开源工具对比(附源码了呀!)

b站房管助手的教程

C# 代码生成二维码方法及代码示例(QRCoder)

C#运用QRCode生成二维码

C# 代码生成二维码方法及代码示例(QRCoder)

C#运用GmaQrCode生成二维码