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;
}
相关推荐
专注VB编程开发20年4 小时前
AI 生成C# WinForm 窗体 = 目前就是垃圾
开发语言·人工智能·c#
z落落5 小时前
C# 泛型接口和泛型类+泛型约束
开发语言·c#
阿正的梦工坊5 小时前
【Rust】08-集合类型、字符串与迭代器入门
开发语言·rust·c#
FuckPatience5 小时前
C# 使用泛型协变将派生类类型替换为基类类型
开发语言·c#
guygg886 小时前
C# 生成中间带 Logo 头像的二维码
开发语言·c#
原则猫6 小时前
HOOKS 背后机制
前端
码语智行6 小时前
首页导航跳转功能深度解析-系统内和系统外
前端
Java面试题总结6 小时前
C#12 中的 Using Alias
开发语言·windows·c#
加号36 小时前
【C#】 ASCII 码转字符串技术解析
开发语言·c#
阿猫的故乡6 小时前
Vue过渡动画从入门到装X:淡入淡出、滑动、列表动画、第三方库全搞定
前端·javascript·vue.js