C#轻松实现条形码二维码生成及识别
1.零基础学习Modbus通信协议2.RS485与ModbusRTU3.C#上位机与PLC通信心跳的实现方法4.ModbusRTU通信协议报文剖析5.ModbusTCP通信协议分析6.C#轻松实现Modbus通信7.不用PLC和板卡,一台电脑就可以控制伺服8.西门子PLC与上位机通信方案梳理9.C#委托的前世今生10.上位机与MES数据交互的常用方案11.上位机能不能替代PLC呢?12.【开源】C#上位机必备高效数据转换助手
13.C#轻松实现条形码二维码生成及识别
14.揭秘10种主流PLC在ModbusTCP通信中的速度表现!15.C#轻松实现ModbusTCP服务器接口16.基于C#实现多线程启动停止暂停继续一、前言
大家好!我是付工。
今天给大家分享一下,如何基于C#来生成并识别条形码或者二维码。
二、http://ZXing.Net
实现二维码生成的库有很多,我们这里采用的是http://ZXing.Net。
ZXing是一个开放源码的,用Java实现的多种格式的一维二维条码图像处理库,而http://ZXing.Net是ZXing在.Net平台下的实现。
我们通过Nuget搜索http://zxing.net即可搜索安装。

三、BarCodeHelper
安装好http://ZXing.Net后,我们创建一个BarCodeHelper,对于进行封装,封装了以下几个方法:
方法一:生成条形码
public static Bitmap GenerateBarCode(string text, int width, int height) { BarcodeWriter writer = new BarcodeWriter(); writer.Format = BarcodeFormat.CODE_39; EncodingOptions options = new EncodingOptions() { Width = width, Height = height, Margin = 2, PureBarcode = true }; writer.Options = options; Bitmap map = writer.Write(text); return map; }
方法二:生成二维码
public static Bitmap GenerateQRCode(string text, int width, int height) { BarcodeWriter writer = new BarcodeWriter(); writer.Format = BarcodeFormat.QR_CODE; QrCodeEncodingOptions options = new QrCodeEncodingOptions() { DisableECI = true,//设置内容编码 CharacterSet = "UTF-8", //设置二维码的宽度和高度 Width = width, Height = height, Margin = 1//设置二维码的边距,单位不是固定像素 }; writer.Options = options; Bitmap map = writer.Write(text); return map; }
方法三:生成带Logo二维码:
public static Bitmap GenerateQRCodeWithLogo(string text, int width, int height, Bitmap logo) { //构造二维码写码器 MultiFormatWriter writer = new MultiFormatWriter(); Dictionary<EncodeHintType, object> hint = new Dictionary<EncodeHintType, object>(); hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8"); hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); //生成二维码 BitMatrix bm = writer.encode(text, BarcodeFormat.QR_CODE, width, height, hint); BarcodeWriter barcodeWriter = new BarcodeWriter(); Bitmap map = barcodeWriter.Write(bm); //获取二维码实际尺寸 int[] rectangle = bm.getEnclosingRectangle(); //计算插入图片的大小和位置 int middleW = Math.Min((int)(rectangle[2] / 3.5), logo.Width); int middleH = Math.Min((int)(rectangle[3] / 3.5), logo.Height); int middleL = (map.Width - middleW) / 2; int middleT = (map.Height - middleH) / 2; Bitmap bmpimg = new Bitmap(map.Width, map.Height, PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(bmpimg)) { g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; g.DrawImage(map, 0, 0, width, height); } //将二维码插入图片 Graphics myGraphic = Graphics.FromImage(bmpimg); //白底 myGraphic.FillRectangle(Brushes.Transparent, middleL, middleT, middleW, middleH); myGraphic.DrawImage(logo, middleL, middleT, middleW, middleH); return bmpimg; }
方法四:识别条码二维码:
public static string ReadCode(Bitmap bitmap) { BarcodeReader barcodeReader = new BarcodeReader(); barcodeReader.Options.CharacterSet = "UTF-8"; Result result = barcodeReader.Decode(bitmap); return result.Text; }
四、案例应用
有了以上方法后,编写一个案例来进行功能测试。

按钮事件代码很简单,就是调用BarCodeHelper中的对应方法即可:
private void btn_BarCode_Click(object sender, EventArgs e) { this.pic_BarCode.Image = BarCodeHelper.GenerateBarCode(this.txt_BarCode.Text, this.pic_BarCode.Width, this.pic_BarCode.Height); } private void btn_QRCode_Click(object sender, EventArgs e) { if (chk_Logo.Checked) { this.pic_QRCode.Image = BarCodeHelper.GenerateQRCodeWithLogo(this.txt_QRCode.Text, this.pic_QRCode.Width, this.pic_QRCode.Height, new Bitmap(this.pic_Logo.Image)); } else { this.pic_QRCode.Image = BarCodeHelper.GenerateQRCode(this.txt_QRCode.Text, this.pic_QRCode.Width, this.pic_QRCode.Height); } } private void btn_ReadQRCode_Click(object sender, EventArgs e) { MessageBox.Show(BarCodeHelper.ReadCode(new Bitmap(this.pic_QRCode.Image))); } private void btn_ReadBarCode_Click(object sender, EventArgs e) { MessageBox.Show(BarCodeHelper.ReadCode(new Bitmap(this.pic_BarCode.Image))); }
最终实现效果如下所示:

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器