.NET使用ZXing.NET生成中间带图片的二维码

很久之前就有写这样的代码了,只是一直没记录下来,偶然想写成博客。

把之前的代码封装成函数,以方便理解以及调用。

基于开源的 ZXing.NET 组件,代码如下:

先添加对ZXing.NET的引用,然后添加相应的命名空间:

using System;
using System.Collections.Generic;
using System.Drawing; using ZXing; using ZXing.Common; using ZXing.QrCode; using ZXing.QrCode.Internal;

 方法一是生成二维码图片:

/// <summary>
/// 生成二维码图片
/// </summary> /// <param name="contents">要生成二维码包含的信息</param> /// <param name="width">生成的二维码宽度(默认300像素)</param> /// <param name="height">生成的二维码高度(默认300像素)</param> /// <returns>二维码图片</returns> public static Bitmap GeneratorQrImage(string contents, int width = 300, int height = 300) { if (string.IsNullOrEmpty(contents)) { return null; } //本文地址:http://www.cnblogs.com/Interkey/p/qrcode.html EncodingOptions options = null; BarcodeWriter writer = null; options = new QrCodeEncodingOptions { DisableECI = true, CharacterSet = "UTF-8", Width = width, Height = height, ErrorCorrection = ErrorCorrectionLevel.H, }; writer = new BarcodeWriter(); writer.Format = BarcodeFormat.QR_CODE; writer.Options = options; Bitmap bitmap = writer.Write(contents); return bitmap; }

方法二是生成中间带图片的二维码图片:

/// <summary>
/// 生成中间带有图片的二维码图片
/// </summary> /// <param name="contents">要生成二维码包含的信息</param> /// <param name="middleImg">要生成到二维码中间的图片</param> /// <param name="width">生成的二维码宽度(默认300像素)</param> /// <param name="height">生成的二维码高度(默认300像素)</param> /// <returns>中间带有图片的二维码</returns> public static Bitmap GeneratorQrImage(string contents, Image middleImg, int width = 300, int height = 300) { if (string.IsNullOrEmpty(contents)) { return null; } if (middleImg == null) { //return null; return GeneratorQrImage(contents); } ////本文地址:http://www.cnblogs.com/Interkey/p/qrcode.html //构造二维码写码器 MultiFormatWriter mutiWriter = 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 = mutiWriter.encode(contents, BarcodeFormat.QR_CODE, width, height, hint); BarcodeWriter barcodeWriter = new BarcodeWriter(); Bitmap bitmap = barcodeWriter.Write(bm); //获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸) int[] rectangle = bm.getEnclosingRectangle(); //计算插入图片的大小和位置 int middleImgW = Math.Min((int)(rectangle[2] / 3.5), middleImg.Width); int middleImgH = Math.Min((int)(rectangle[3] / 3.5), middleImg.Height); int middleImgL = (bitmap.Width - middleImgW) / 2; int middleImgT = (bitmap.Height - middleImgH) / 2; //将img转换成bmp格式,否则后面无法创建 Graphics对象 Bitmap bmpimg = new Bitmap(bitmap.Width, bitmap.Height, System.Drawing.Imaging.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(bitmap, 0, 0); } //在二维码中插入图片 Graphics myGraphic = Graphics.FromImage(bmpimg); //白底  myGraphic.FillRectangle(Brushes.White, middleImgL, middleImgT, middleImgW, middleImgH); myGraphic.DrawImage(middleImg, middleImgL, middleImgT, middleImgW, middleImgH); return bmpimg; }

效果如下:

bubuko.com,布布扣

中间有图片与没有图片的生成的不一样,原因不清楚,初步以为中间有图片的是因为容错率的原故。

对应的解析代码也很简单:

// create a barcode reader instance
IBarcodeReader reader = new BarcodeReader();
// load a bitmap Bitmap barcodeBitmap = (Bitmap)Image.FromFile("C:\\sample-barcode-image.png"); // detect and decode the barcode inside the bitmap Result result = reader.Decode(barcodeBitmap); // do something with the result if (result != null) { this.txtDecoderType.Text = result.BarcodeFormat.ToString(); this.txtDecoderContent.Text = result.Text; }

以上是生成和解析二维码的代码,至于生成一维码和对应的解析也很简单。

 

其他常用可生成二维码的组件有:QrCode.Net(开源)、ZXing(开源)、ThoughtWorks.QRCode等。

了解了二维码的数据存储后,可以基于这些技术生成富有创意的二维码。


 

参考:

  1. QR二维码生成器源码(中间可插入小图片)
  2. 用C#实现的条形码和二维码编码解码器
  3. 如何在ASP.NET和WPF中显示二维码
  4. C#利用QrCode.Net生成二维码(Qr码)
  5. 二维码的生成细节和原理
  6. 带你探索条形码世界的奥秘
  7. Android二维码识别 开源项目ZXing的编译

转载于:https://www.cnblogs.com/hnsongbiao/p/9145706.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,ZXing.NET 是一个功能强大的库,可以用于生成各种类型的条形码和二维码,包括 QRCode、Data Matrix、Aztec 等。要使用 ZXing.NET 生成二维码,您可以按照以下步骤进行操作: 1. 导入命名空间:在您的 C# 代码文件中,添加对 ZXing.NET 的命名空间引用: ```csharp using ZXing; using ZXing.Common; ``` 2. 创建一个 BarcodeWriter 对象:使用 BarcodeWriter 类来生成二维码。 ```csharp BarcodeWriter writer = new BarcodeWriter(); ``` 3. 配置生成器参数:您可以通过设置 Writer 的属性来配置生成器的参数,例如设置二维码尺寸、编码类型、边距等。 ```csharp writer.Format = BarcodeFormat.QR_CODE; // 设置生成的条形码类型为二维码 writer.Options = new EncodingOptions { Width = 200, // 设置二维码宽度 Height = 200, // 设置二维码高度 Margin = 10 // 设置二维码边距 }; ``` 4. 生成并保存二维码图像:使用 writer 对象的 `Write` 方法,传入要生成的文本作为参数,并将返回的 Bitmap 对象保存为图像文件或进行其他操作。 ```csharp Bitmap qrcodeImage = writer.Write("Hello, ZXing.NET!"); qrcodeImage.Save("qrcode.png"); // 保存为图像文件 ``` 在上述示例中,我们将字符串 "Hello, ZXing.NET!" 生成为一个名为 "qrcode.png" 的二维码图像文件。 这样,您就可以使用 ZXing.NET 生成自定义设置的二维码图像了。请记得根据您的需要,修改生成器的参数以及保存图像的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值