C#实现二维码的简单生成
引用:ThoughtWorks.QRCode.dll
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Drawing; using System.Text; using ThoughtWorks.QRCode.Codec;//二维码引用 namespace CCOA.BLL.Common { public class qrcode { /// <summary> /// 生成简易二维码存储 /// </summary> /// <param name="url">二维码内容</param> /// <returns>返回虚拟地址</returns> public static string SetQRcode(string url) { if (string.IsNullOrEmpty(url)) { return ""; } System.Drawing.Bitmap bt; QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字) qrCodeEncoder.QRCodeScale = 4;//大小(值越大生成的二维码图片像素越高) qrCodeEncoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误) qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级) qrCodeEncoder.QRCodeBackgroundColor = Color.White;//背景色 qrCodeEncoder.QRCodeForegroundColor = Color.Black;//前景色 bt = qrCodeEncoder.Encode(url, Encoding.UTF8); string filename = DateTimeToTimestamp(DateTime.Now).ToString() + ".jpg"; string file_path = AppDomain.CurrentDomain.BaseDirectory + "QRCodeImage\\"; string codeUrl = file_path + filename; //根据文件名称,自动建立对应目录 if (!System.IO.Directory.Exists(file_path)) System.IO.Directory.CreateDirectory(file_path); bt.Save(codeUrl);//保存图片 return "/QRCodeImage/" + filename; } /// <summary> /// 生成带logo的二维码存储 /// </summary> /// <param name="url">二维码内容</param> /// <param name="logo">中心logo</param> /// <param name="IsSquare">logo是否为正方形 </param> /// <returns>返回虚拟地址</returns> public static string SetQRcode(string url, string logo, bool IsSquare=true) { try { if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(logo)) { return ""; } QRCodeEncoder encoder = new QRCodeEncoder(); encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字) encoder.QRCodeScale = 5;//大小(值越大生成的二维码图片像素越高) encoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误) encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;//错误效验、错误更正(有4个等级) encoder.QRCodeBackgroundColor = Color.White; encoder.QRCodeForegroundColor = Color.Black; System.Drawing.Image image = encoder.Encode(url, Encoding.UTF8); //查看图片地址是否为空 if (!string.IsNullOrEmpty(logo)) { Graphics g = Graphics.FromImage(image); int width1 = image.Width / 3; int height1 = image.Height / 5; if (IsSquare) { //正方形Logo width1 = image.Width / 4; height1 = image.Height / 4; } else { //长方形logo width1 = image.Width / 3; height1 = image.Height / 5; } int x = image.Width / 2 - width1 / 2; int y = image.Height / 2 - height1 / 2; g.FillRectangle(new SolidBrush(Color.White), x, y, width1, height1); Image LogImage = GetImage(logo); Bitmap copyImage = new Bitmap(LogImage, width1 - image.Width / 40, height1 - image.Height / 40); g.DrawImage(copyImage, x + image.Width / 40 / 2, y + image.Height / 40 / 2); copyImage.Dispose(); g.Dispose(); } string filename = DateTimeToTimestamp(DateTime.Now).ToString() + ".jpg"; string file_path = AppDomain.CurrentDomain.BaseDirectory + "QRCodeImage\\"; string codeUrl = file_path + filename; //根据文件名称,自动建立对应目录 if (!System.IO.Directory.Exists(file_path)) System.IO.Directory.CreateDirectory(file_path); image.Save(codeUrl);//保存图片 return "/QRCodeImage/" + filename; } catch (Exception e) { throw e; } } /// <summary> /// 通过图片虚拟路径 获取Image /// </summary> /// <param name="url">要访问的图片所在网址</param> /// <returns>Image</returns> public static Image GetImage(string url) { Image image; System.Net.WebRequest webreq = System.Net.WebRequest.Create(url); System.Net.WebResponse webres = webreq.GetResponse(); using (System.IO.Stream stream = webres.GetResponseStream()) { image = Image.FromStream(stream); } return image; } /// <returns>生成时间戳</returns> public static long DateTimeToTimestamp(DateTime datetime) { DateTime dd = new DateTime(1970, 1, 1, 0, 0, 0, 0); DateTime timeUTC = DateTime.SpecifyKind(datetime, DateTimeKind.Utc);//本地时间转成UTC时间 TimeSpan ts = (timeUTC - dd); return (Int64)ts.TotalMilliseconds;//精确到毫秒 } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix