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;
}
相关推荐
子兮曰13 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰13 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
小羊没烦恼!13 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
前端小万13 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝13 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
神仙别闹13 小时前
基于C#+MySQL实现(WinForm)个人聊天室软件
c#
三十而立洋14 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁14 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
kybs199116 小时前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
汉堡大王952716 小时前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端