C# ZXing 二维码,条形码生成与识别

C# ZXing 二维码条形码生成识别

安装ZXing

NuGet搜索ZXing安装ZXing.Net包

使用ZXing

using ZXing;

using ZXing.Common;

using ZXing.QrCode;

using ZXing.QrCode.Internal;

生成条形码

csharp 复制代码
/// <summary>
/// 生成条形码
/// </summary>
/// <param name="text"></param>
static void GenerateBarCode(string text)
{ 
    BarcodeWriter writer = new BarcodeWriter();
    writer.Format = BarcodeFormat.CODE_128;
    EncodingOptions options = new EncodingOptions()
    {
        Width = 150,
        Height = 50,
        Margin = 2,
    };

    writer.Options = options;
    Bitmap map = writer.Write(text);
    string filename = @"D:\2.png";
    map.Save(filename, ImageFormat.Png);
    map.Dispose();
}

生成二维码

csharp 复制代码
 /// <summary>
 /// 生成二维码
 /// </summary>
 /// <param name="text"></param>
 static void GenerateQRCode(string text)
 {
     BarcodeWriter writer = new BarcodeWriter();
     writer.Format = BarcodeFormat.QR_CODE;
     QrCodeEncodingOptions options = new QrCodeEncodingOptions();
     options.DisableECI = true;
     // 设置内容字符编码
     options.CharacterSet = "UTF-8";
     // 设置二维码的宽度高度
     options.Width = 200;
     options.Height = 200;
     // 设置二维码的边距,单位不是固定像素
     options.Margin = 1;
     writer.Options = options;

     Bitmap map = writer.Write(text);
     string filename = @"D:\1.png";
     map.Save(filename, ImageFormat.Png);
     map.Dispose();

 }

生成带Logo的二维码

csharp 复制代码
/// <summary>
/// 生成带Logo图片的二维码
/// </summary>
/// <param name="text"></param>
static void GenerateQRCodeWithLoge(string text) 
{
    // Logo 图片
    Bitmap logo = new Bitmap(@"D:\logo.png");
    // 构造二维码写码器
    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, 300, 300, hint);
    BarcodeWriter barcodeWriter = new BarcodeWriter();
    Bitmap map = barcodeWriter.Write(bm);

    // 获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸)
    int[] rectangle = bm.getEnclosingRectangle();

    // 计算插入logo图片的大小位置
    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.Width - middleH) / 2;

    // 将img转换成bmp格式,否则后面无法创建Graphics对象
    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);
    }

    // 将二维码插入图片
    Graphics myGraphics = Graphics.FromImage(bmpimg);
    // 白底
    myGraphics.FillRectangle(Brushes.White, middleL, middleT, middleW, middleH);
    myGraphics.DrawImage(logo, middleL, middleT, middleW, middleH);

    // 保存生成图片
    bmpimg.Save(@"D:\logo_qrcode.png", ImageFormat.Png);

}

识别二维码、条形码

csharp 复制代码
/// <summary>
/// 识别二维码、条形码
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
static string ReadBarCode(string filename)
{ 
    BarcodeReader reader = new BarcodeReader();
    reader.Options.CharacterSet = "UTF-8";
    Bitmap map = new Bitmap(filename);
    Result result = reader.Decode(map);
    map.Dispose();

    return result == null ? "" : result.Text;
}
相关推荐
Autumn_ing5 小时前
Design.md生成UI怎么验收?举例运营后台的颜色、状态和数据核对
前端·ui·ai·设计系统·paico·ai生成ui·design.md
RobinDevNotes6 小时前
一套代码发布到十几个平台:Cocos入门速览
typescript·c#·游戏开发
keyipatience6 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
朱涛的自习室6 小时前
我给 Gemini 4 和 DeepSeek 搞了套「末位淘汰」,AI 干活会更猛吗?(Day 3)
android·前端·后端
阿松爱学习8 小时前
【Unity开发】监听Scene场景事件
unity·c#
java1234_小锋9 小时前
【技术专题】HTML5 网页技术 - HTML5简介 & HTML5 文档结构
前端·html·html5
鶴哥只手遮天9 小时前
Vue 3 核心源码深度剖析系列(v3.5.44)-第 1 章 项目全景:monorepo 架构与工程化体系
前端·vue.js·开源
流星。。方9 小时前
小团队官网SEO落地:前端语义化与静态生成的工程实践
前端·状态模式
用户530429765799 小时前
盘点危化品搬运诊断的6类工具与自处理边界判断
前端
curtain9 小时前
从古法编程到 Agent:我入行这两年,AI 改变了什么
前端·openai