前言
前面已经分享给很多创建二维码,条形码。。。等一系列的方式 各有优缺点,暂时不做评价。今天推荐ZXing.Net
。也是比较全面的一种方式,还支持解码
? .NET 二维码生成库-QrCodeGenerator
? 商业库--Spire.Barcode
? ThoughtWorks.QRCode
? QRCoder
? SkiaSharp-跨平台方案
编码
想要条形码,参考文章:.NET 使用 ZXing.Net 生成带有识别符的 EAN-13 条码
var qr = new QRCodeWriter() { }; // 创建一个QRCodeWriter实例用于生成QR Code
var render = new AlternateBitmapRenderer(); // 创建一个AlternateBitmapRenderer实例用于渲染条形码图像
var contents = "http://weixin.qq.com/r/qzj377TEKulVrfCM9225"; // 条形码的内容,需要根据实际情况进行设置
// 使用QRCodeWriter对象的encode方法生成QR Code的位矩阵,指定条形码格式为QR_CODE,大小为400x400
var qrbitmatrix = qr.encode(contents, ZXing.BarcodeFormat.QR_CODE, 400, 400);
// 使用AlternateBitmapRenderer对象的Render方法渲染条形码图像,指定条形码格式为EAN_13,内容为contents,
// 同时使用EncodingOptions设置图像的宽度为400,高度为400
var bitmap = render.Render(qrbitmatrix, ZXing.BarcodeFormat.QR_CODE, contents, new EncodingOptions { Width = 400, Height = 400 });
// 将生成的Bitmap对象保存为图片文件,文件名为"image.jpg",格式为JPEG
bitmap.Save("qr-image.jpg", ImageFormat.Jpeg);
解码
csharp代码
// create a barcode reader instance
IBarcodeReader reader = new BarcodeReader();
// 加载图片文件
Bitmap image = new Bitmap("D:\\PrideJoy\\Zxing.Demo\\Zxing.demo\\bin\\Debug\\net7.0\\qr-image.jpg");
// 获取rawRGB数据
Rectangle rect = new Rectangle(0, 0, image.Width, image.Height);
System.Drawing.Imaging.BitmapData bmpData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, image.PixelFormat);
IntPtr ptr = bmpData.Scan0;
int bytes = Math.Abs(bmpData.Stride) * image.Height;
byte[] rawRGB = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(ptr, rawRGB, 0, bytes);
image.UnlockBits(bmpData);
// 获取格式(format)
RGBLuminanceSource.BitmapFormat format;
switch (image.PixelFormat)
{
case System.Drawing.Imaging.PixelFormat.Format8bppIndexed:
format = RGBLuminanceSource.BitmapFormat.Gray8;
break;
case System.Drawing.Imaging.PixelFormat.Format16bppGrayScale:
format = RGBLuminanceSource.BitmapFormat.Gray16;
break;
case System.Drawing.Imaging.PixelFormat.Format24bppRgb:
format = RGBLuminanceSource.BitmapFormat.RGB24;
break;
case System.Drawing.Imaging.PixelFormat.Format32bppRgb:
format = RGBLuminanceSource.BitmapFormat.RGB32;
break;
case System.Drawing.Imaging.PixelFormat.Format32bppArgb:
format = RGBLuminanceSource.BitmapFormat.ARGB32;
break;
// 其他格式的处理
default:
format = RGBLuminanceSource.BitmapFormat.Unknown;
break;
}
// 获取宽度(width)和高度(height)
int width = image.Width;
int height = image.Height;
var result = reader.Decode(rawRGB,width,height, format);
// do something with the result
if (result != )
{
Console.WriteLine("内容为:"+result.Text);
}
条形码也是同样的方式
参考:
? 官方地址