C#使用ZXing实现二维码和条形码的生成

 更新时间:2023年11月14日 09:17:55   作者:SongYuLong的博客  
这篇文章主要为大家详细介绍了C#如何使用ZXing实现二维码和条形码的生成与识别,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

安装ZXing

NuGet搜索ZXing安装ZXing.Net包

使用ZXing

using ZXing;
using ZXing.Common;
using ZXing.QrCode;
using ZXing.QrCode.Internal;

生成条形码

/// <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();
}

生成二维码

 /// <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的二维码

/// <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);

}

识别二维码、条形码

/// <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;
}

到此这篇关于C#使用ZXing实现二维码和条形码的生成的文章就介绍到这了,更多相关C# ZXing生成二维码条形码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#实现对文件进行加密解密的方法

    C#实现对文件进行加密解密的方法

    这篇文章主要介绍了C#实现对文件进行加密解密的方法,涉及C#加密与解密的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • 实例解析C#设计模式编程中简单工厂模式的使用

    实例解析C#设计模式编程中简单工厂模式的使用

    这篇文章主要介绍了C#设计模式编程中简单工厂模式的使用,文中也举了在.NET框架下简单工厂模式的实现例子,需要的朋友可以参考下
    2016-02-02
  • C#中泛型类和扩展方法如何使用

    C#中泛型类和扩展方法如何使用

    这篇文章介绍了C#中泛型类和扩展方法的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • 判断图片-判断位图是否是黑白图片的方法

    判断图片-判断位图是否是黑白图片的方法

    近来工作需要判断图片否是是彩色的,由于是十万张以上的大批量理处,所以通过序程来动自判断。
    2013-05-05
  • C#实现将程序运行信息写入日志的方法

    C#实现将程序运行信息写入日志的方法

    这篇文章主要介绍了C#实现将程序运行信息写入日志的方法,可实现将程序运行信息写入日志并存储在Debug目录下的"/Log/PRG"下的功能,涉及C#针对日志的相关写入技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#判断字符串是否是int/double(实例)

    C#判断字符串是否是int/double(实例)

    本文主要分享了C#判断字符串是否是int/double的具体实例,具有一定的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • C#实现访问Web API Url提交数据并获取处理结果

    C#实现访问Web API Url提交数据并获取处理结果

    Web API  是 Web 服务器和 Web 浏览器之间的应用程序处理接口,我们常见的模式是访问 Web API Url 地址,并获取 Json 、XML或其它指定格式的处理结果, 本文我们介绍了使用C#实现访问Web API Url提交数据并获取处理结果,需要的朋友可以参考下
    2024-05-05
  • C#图形区域剪切的实现方法

    C#图形区域剪切的实现方法

    这篇文章主要介绍了C#图形区域剪切的实现方法,涉及C#图形操作的相关技巧,需要的朋友可以参考下
    2015-06-06
  • C#设置与获取环境变量的方法详解

    C#设置与获取环境变量的方法详解

    这篇文章主要给大家介绍了关于C#设置与获取环境变量的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • C#重载运算符详解

    C#重载运算符详解

    这篇文章主要介绍了C#重载运算符,是进行C#程序设计中非常重要的一个技巧,需要的朋友可以参考下
    2014-08-08

最新评论