C# 生成二维码(【ThoughtWorks.QRCode】【QRCoder】【ZXing.Net】)
1、通过ThoughtWorks.QRCode实现生成二维码,可直接通过添加Nuget包引用
/// <summary> /// ThoughtWorks.QRCode生成二维码 /// </summary> /// <param name="filePath">二维码生成后保存地址</param> /// <param name="qrCodeContent">二维码内容</param> public static void CreateQRCode(string filePath, string qrCodeContent) { ThoughtWorks.QRCode.Codec.QRCodeEncoder qrCodeEncoder = new ThoughtWorks.QRCode.Codec.QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = ThoughtWorks.QRCode.Codec.QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeScale = 4;//二维码大小比例 qrCodeEncoder.QRCodeVersion = 8; qrCodeEncoder.QRCodeErrorCorrect = ThoughtWorks.QRCode.Codec.QRCodeEncoder.ERROR_CORRECTION.M; System.Drawing.Image image = qrCodeEncoder.Encode(qrCodeContent, Encoding.UTF8);//生成二维码图片 System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None); image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg); fs.Close(); image.Dispose(); } /// <summary> /// 二维码解码 /// </summary> /// <param name="filePath">二维码图片路径</param> /// <returns></returns> public static string QRCodeDecoder(string filePath) { if (!System.IO.File.Exists(filePath)) { return null; } System.Drawing.Bitmap myBitmap = new System.Drawing.Bitmap(System.Drawing.Image.FromFile(filePath)); ThoughtWorks.QRCode.Codec.QRCodeDecoder decoder = new ThoughtWorks.QRCode.Codec.QRCodeDecoder(); string decodedString = decoder.decode(new ThoughtWorks.QRCode.Codec.Data.QRCodeBitmapImage(myBitmap), Encoding.UTF8); return decodedString; }
2、通过QRCoder实现生成二维码,可直接通过添加Nuget包引用
/// <summary> /// 生成二维码可附带中央水印 /// </summary> /// <param name="filePath">二维码生成后保存地址</param> /// <param name="qrCodeContent">二维码内容</param> /// <param name="iconPath">二维码中央水印保存地址</param> public static void CreateQRCode(string filePath, string qrCodeContent, string iconPath = "") { // 生成二维码的内容 QRCoder.QRCodeGenerator qrGenerator = new QRCoder.QRCodeGenerator(); QRCoder.QRCodeData qrCodeData = qrGenerator.CreateQrCode(qrCodeContent, QRCoder.QRCodeGenerator.ECCLevel.Q); QRCoder.QRCode qrcode = new QRCoder.QRCode(qrCodeData); System.Drawing.Bitmap icon = null;//中央水印图标 int iconSizePercent = 0;//水印图标大小 int iconBorderWidth = 0;//水印图标边框 int pixelsPerModule = 55;//像素大小 bool drawQuietZones = false;//是否需要二维码外围空白区域(白边) System.Drawing.Color darkColor = System.Drawing.Color.Black;//二维码暗色部分,Color.颜色 System.Drawing.Color lightColor = System.Drawing.Color.White;//亮色部分,Color.颜色 //判断有无中心水印图标 if (!string.IsNullOrWhiteSpace(iconPath)) { icon = new System.Drawing.Bitmap(iconPath); iconSizePercent = 10; iconBorderWidth = 10; } //设置生成二维码 System.Drawing.Bitmap qrCodeImage = qrcode.GetGraphic(pixelsPerModule, darkColor, lightColor, icon, iconSizePercent, iconBorderWidth, drawQuietZones); //保存二维码图片 System.IO.Stream outputStream = new System.IO.FileStream(filePath, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None); qrCodeImage.Save(outputStream, System.Drawing.Imaging.ImageFormat.Jpeg); outputStream.Close(); outputStream.Dispose(); }
3、通过ZXing.Net实现生成二维码,可直接通过添加Nuget包引用
/// <summary> /// 生成二维码 /// </summary> /// <param name="filePath">地址</param> /// <param name="qrCodeContent">内容</param> public static void CreateZXingQrCode(string filePath, string qrCodeContent) { //设置规格 ZXing.QrCode.QrCodeEncodingOptions options = new ZXing.QrCode.QrCodeEncodingOptions() { Width = 500,//设置二维码的宽度 Height = 500,//设置二维码的高度 Margin = 1,//设置二维码的边距 CharacterSet = "UTF-8",//设置内容编码 DisableECI = true, }; //生成二维码 ZXing.BarcodeWriter writer = new ZXing.BarcodeWriter() { Format = ZXing.BarcodeFormat.QR_CODE,//生成类型 Options = options,//设置格式 }; // System.Drawing.Bitmap bitmap = writer.Write(qrCodeContent);//存放二维码; //进行保存 bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg); bitmap.Dispose(); } /// <summary> /// 生成带logo的二维码 /// </summary> /// <param name="filePath"></param> /// <param name="qrCodeContent"></param> /// <param name="imagePath"></param> public static void CreateZXingQrCode(string filePath, string qrCodeContent, string imagePath) { //设置规格 ZXing.QrCode.QrCodeEncodingOptions option = new ZXing.QrCode.QrCodeEncodingOptions() { CharacterSet = "UTF-8",// 设置编码格式,否则读中文会乱码 Height = 200, Width = 200, Margin = 1,// 设置二维码周围空白边距(可选) }; //生成图片 ZXing.BarcodeWriter writer = new ZXing.BarcodeWriter() { Options = option, Format = ZXing.BarcodeFormat.QR_CODE,//生成类型 }; System.Drawing.Bitmap img = writer.Write(qrCodeContent); // 添加logo图片 System.Drawing.Bitmap logoImg = System.Drawing.Bitmap.FromFile(imagePath) as System.Drawing.Bitmap; System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(img); System.Drawing.Rectangle logoRec = new System.Drawing.Rectangle() ; //设置logo图片的大小和绘制位置 logoRec.Width = img.Width / 6; logoRec.Height = img.Height / 6; logoRec.X = img.Width / 2 - logoRec.Width / 2; // 中心点 logoRec.Y = img.Height / 2 - logoRec.Height / 2; graphics.DrawImage(logoImg, logoRec); //保存绘制后的图片 img.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg); img.Dispose(); } /// <summary> /// 读取二维码 /// </summary> /// <param name="filePath">地址</param> /// <returns></returns> public static string ReadZXingQrCode(string filePath) { //读取规格 ZXing.Common.DecodingOptions options = new ZXing.Common.DecodingOptions(); options.PossibleFormats = new List<ZXing.BarcodeFormat>() { ZXing.BarcodeFormat.QR_CODE }; ZXing.BarcodeReader br = new ZXing.BarcodeReader() { Options = options }; //指定规格 //读取图片 System.Drawing.Image image = System.Drawing.Image.FromFile(filePath); //读取图片内容 ZXing.Result rs = br.Decode(image as System.Drawing.Bitmap); return rs.Text; }
作者:lwk9527
出处:https://www.cnblogs.com/lwk9527/p/17374173.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
本文来自博客园,作者:流纹,转载请注明原文链接:https://www.cnblogs.com/lwk9527/p/17374173.html
分类:
.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?