Loading... ## 前言 最近在做项目的时候遇到一个需求是将文本内容生成二维码图片的,对于这个需求那就直接上手(两种方法,我比较喜欢第二种方式,往上面也是有很多的方法。这里只作为个人纪录) ### 方法一:`ThoughtWorks.QRCode` 还有解析,并且还能添加彩色的点,应该是基于Drawing的 ![效果图](https://img-blog.csdnimg.cn/e7b96e39c9514c9595f1340cd7f42bbe.png) 第一步: NeGet包引用`ThoughtWorks.QRCode` ``` using System; using System.Drawing; using System.Text; using ThoughtWorks.QRCode.Codec; using ThoughtWorks.QRCode.Codec.Data; namespace ConsoleApp1 { class Program { static void Main(string[] args) { QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeScale = 4; qrCodeEncoder.QRCodeVersion = 8; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; System.Drawing.Image image = qrCodeEncoder.Encode("http://weixin.qq.com/r/qzj377TEKulVrfCM9225", Encoding.UTF8); string filename = Guid.NewGuid() + ".jpg"; string filepath = filename; System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write); image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg); fs.Close(); image.Dispose(); //二维码解码 var codeDecoder = CodeDecoder(filepath); Console.WriteLine($"二维码内容:{codeDecoder}"); Console.WriteLine("---"); Console.Read(); } /// <summary> /// 二维码解码 /// </summary> /// <param name="filePath">图片路径</param> /// <returns></returns> public static string CodeDecoder(string filePath) { if (!System.IO.File.Exists(filePath)) return null; Bitmap myBitmap = new Bitmap(Image.FromFile(filePath)); QRCodeDecoder decoder = new QRCodeDecoder(); string decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap), Encoding.UTF8); return decodedString; } } } ``` ### 方法二:`QRCoder` 我喜欢这个方法,先上效果图,这个可以自定义图片,而且还有边框,其他的方法暂时没有研究 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e0ed11939e5a40bea9e1f75c4cd6c795.png) 第一步: NeGet包引用`QRCoder` ``` using System; using System.Drawing; namespace ConsoleApp1 { class Program { static void Main(string[] args) { System.Drawing.Image image = code("http://weixin.qq.com/r/qzj377TEKulVrfCM9225", 5,10, "C:\\Users\\Pride\\Pictures\\myimage\\1.jpg", 15,1,true); string filename = Guid.NewGuid() + ".jpg"; string filepath = filename; System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write); image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg); fs.Close(); image.Dispose(); Console.WriteLine("OK"); Console.Read(); } public class QRCodeHelper { //todo 1.保存为二维码 //2.上传七牛云 public static QRCodeGenerator qrGenerator = new QRCoder.QRCodeGenerator(); /// <summary> /// 生成二维码 /// </summary> /// <param name="link">生成的内容</param> /// <returns></returns> public static async Task<string> GetQRCode(string link) { string guid = Guid.NewGuid().ToString().Replace("-", "") + ".png"; //图片名称 QRCodeData qrCodeData = qrGenerator.CreateQrCode(link, QRCodeGenerator.ECCLevel.Q); QRCode qrcode = new QRCode(qrCodeData); Bitmap qrCodeImage = qrcode.GetGraphic(5, System.Drawing.Color.Black, System.Drawing.Color.White, null, 15, 3); string filePath = Path.Combine("qrcodetest", guid); //图片保存地址 //获取文件对象 FileInfo file = new FileInfo(filePath); //判断文件夹是否创建 if (!file.Directory.Exists) { file.Directory.Create(); } qrCodeImage.Save(filePath, System.Drawing.Imaging.ImageFormat.Png); return filePath; /* GetGraphic方法参数说明 public Bitmap GetGraphic(int pixelsPerModule, Color darkColor, Color lightColor, Bitmap icon = null, int iconSizePercent = 15, int iconBorderWidth = 6, bool drawQuietZones = true) int pixelsPerModule:生成二维码图片的像素大小 ,我这里设置的是5 Color darkColor:暗色 一般设置为Color.Black 黑色 Color lightColor:亮色 一般设置为Color.White 白色 Bitmap icon :二维码 水印图标 例如:Bitmap icon = new Bitmap(context.Server.MapPath("~/images/zs.png")); 默认为NULL ,加上这个二维码中间会显示一个图标 int iconSizePercent: 水印图标的大小比例 ,可根据自己的喜好设置 int iconBorderWidth: 水印图标的边框 bool drawQuietZones:静止区,位于二维码某一边的空白边界,用来阻止读者获取与正在浏览的二维码无关的信息 即是否绘画二维码的空白边框区域 默认为true */ } } ``` ![](https://img-blog.csdnimg.cn/7524e66d0c4f40bdb467fcb5a68dbff6.png) 你喜欢哪种方式呢? 最后修改:2023 年 10 月 10 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏