C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码

您所在的位置:网站首页 二维码边框简单 C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码

C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码

2023-08-19 07:26| 来源: 网络整理| 查看: 265

本文介绍在 C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码。网上文章大多只是简单介绍内置参数的设置,根据我的使用目的,增加了自定义目标二维码图片尺寸和白边边框。有需要的朋友们可以试一下,如有bug欢迎指正。

 首先,将 ThoughtWorks.QRCode.dll 放在 bin 目录后,在页面中引用:

using ThoughtWorks.QRCode.Codec;   生成二维码图片: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 /// /// 生成二维码 /// /// 内容文本 /// 二维码编码方式 /// 纠错码等级 /// 二维码版本号 0-40 /// 每个小方格的预设宽度(像素),正整数 /// 图片尺寸(像素),0表示不设置 /// 图片白边(像素),当size大于0时有效 /// public System.Drawing.Image CreateQRCode(string Content, QRCodeEncoder.ENCODE_MODE QRCodeEncodeMode, QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect, int QRCodeVersion, int QRCodeScale, int size, int border) {     QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();     qrCodeEncoder.QRCodeEncodeMode = QRCodeEncodeMode;     qrCodeEncoder.QRCodeErrorCorrect = QRCodeErrorCorrect;     qrCodeEncoder.QRCodeScale = QRCodeScale;     qrCodeEncoder.QRCodeVersion = QRCodeVersion;     System.Drawing.Image image = qrCodeEncoder.Encode(Content);            #region 根据设定的目标图片尺寸调整二维码QRCodeScale设置,并添加边框     if (size > 0)     {         //当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸         #region 当设定目标图片尺寸大于生成的尺寸时,逐步增大方格尺寸         while (image.Width < size)         {             qrCodeEncoder.QRCodeScale++;             System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);             if (imageNew.Width < size)             {                 image = new System.Drawing.Bitmap(imageNew);                 imageNew.Dispose();                 imageNew = null;             }             else             {                 qrCodeEncoder.QRCodeScale--; //新尺寸未采用,恢复最终使用的尺寸                 imageNew.Dispose();                 imageNew = null;                 break;             }         }         #endregion                    //当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸         #region 当设定目标图片尺寸小于生成的尺寸时,逐步减小方格尺寸         while (image.Width > size && qrCodeEncoder.QRCodeScale > 1)         {             qrCodeEncoder.QRCodeScale--;             System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);             image = new System.Drawing.Bitmap(imageNew);             imageNew.Dispose();             imageNew = null;             if (image.Width < size)             {                 break;             }         }         #endregion                    //如果目标尺寸大于生成的图片尺寸,则为图片增加白边         #region 如果目标尺寸大于生成的图片尺寸,则为图片增加白边         if (image.Width 0)             {                 while (image.Width 1)                 {                     qrCodeEncoder.QRCodeScale--;                     System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);                     image = new System.Drawing.Bitmap(imageNew);                     imageNew.Dispose();                     imageNew = null;                 }             }             #endregion                //当目标图片尺寸大于二维码尺寸时,将二维码绘制在目标尺寸白色画布的中心位置             if (image.Width < size)             {                 //新建空白绘图                 System.Drawing.Bitmap panel = new System.Drawing.Bitmap(size, size);                 System.Drawing.Graphics graphic0 = System.Drawing.Graphics.FromImage(panel);                 int p_left = 0;                 int p_top = 0;                 if (image.Width size && qrCodeEncoder.QRCodeScale > 1)         {             qrCodeEncoder.QRCodeScale--;             System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);             image = new System.Drawing.Bitmap(imageNew);             imageNew.Dispose();             imageNew = null;             if (image.Width < size)             {                 break;             }         }         #endregion            //根据参数设置二维码图片白边的最小宽度(按需缩小)         #region 根据参数设置二维码图片白边的最小宽度         if (image.Width 0)         {             while (image.Width 1)             {                 qrCodeEncoder.QRCodeScale--;                 System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);                 image = new System.Drawing.Bitmap(imageNew);                 imageNew.Dispose();                 imageNew = null;             }         }         #endregion                    //已经确认二维码图像,为图像染色修饰         if (true)         {             //定位点方块边长             int beSize = qrCodeEncoder.QRCodeScale * 3;                            int bep1_l = qrCodeEncoder.QRCodeScale * 2;             int bep1_t = qrCodeEncoder.QRCodeScale * 2;                            int bep2_l = image.Width - qrCodeEncoder.QRCodeScale * 5 - 1;             int bep2_t = qrCodeEncoder.QRCodeScale * 2;                            int bep3_l = qrCodeEncoder.QRCodeScale * 2;             int bep3_t = image.Height - qrCodeEncoder.QRCodeScale * 5 - 1;                            int bep4_l = image.Width - qrCodeEncoder.QRCodeScale * 7 - 1;             int bep4_t = image.Height - qrCodeEncoder.QRCodeScale * 7 - 1;                            System.Drawing.Graphics graphic0 = System.Drawing.Graphics.FromImage(image);                            // Create solid brush.             SolidBrush blueBrush = new SolidBrush(codeEyeColor);                            // Fill rectangle to screen.             graphic0.FillRectangle(blueBrush, bep1_l, bep1_t, beSize, beSize);             graphic0.FillRectangle(blueBrush, bep2_l, bep2_t, beSize, beSize);             graphic0.FillRectangle(blueBrush, bep3_l, bep3_t, beSize, beSize);             graphic0.FillRectangle(blueBrush, bep4_l, bep4_t, qrCodeEncoder.QRCodeScale, qrCodeEncoder.QRCodeScale);         }                    //当目标图片尺寸大于二维码尺寸时,将二维码绘制在目标尺寸白色画布的中心位置         #region 如果目标尺寸大于生成的图片尺寸,将二维码绘制在目标尺寸白色画布的中心位置         if (image.Width < size)         {             //新建空白绘图             System.Drawing.Bitmap panel = new System.Drawing.Bitmap(size, size);             System.Drawing.Graphics graphic0 = System.Drawing.Graphics.FromImage(panel);             int p_left = 0;             int p_top = 0;             if (image.Width


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3