东莞公司网站做优化,做企业网站的合同,0基础建站网站搭建教程,如何做分销型网站本文介绍在 C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码。网上文章大多只是简单介绍内置参数的设置#xff0c;根据我的使用目的#xff0c;增加了自定义目标二维码图片尺寸和白边边框。有需要的朋友们可以试一下#xff0c;如有bug欢迎指正。 首先根据我的使用目的增加了自定义目标二维码图片尺寸和白边边框。有需要的朋友们可以试一下如有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 /// summary /// 生成二维码 /// /summary /// param nameContent内容文本/param /// param nameQRCodeEncodeMode二维码编码方式/param /// param nameQRCodeErrorCorrect纠错码等级/param /// param nameQRCodeVersion二维码版本号 0-40/param /// param nameQRCodeScale每个小方格的预设宽度像素正整数/param /// param namesize图片尺寸像素0表示不设置/param /// param nameborder图片白边像素当size大于0时有效/param /// returns/returns 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 size) { //根据参数设置二维码图片白边的最小宽度 #region 根据参数设置二维码图片白边的最小宽度 if (border 0) { while (image.Width size size - image.Width border * 2 qrCodeEncoder.QRCodeScale 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) //如果原图比目标形状宽 { p_left (size - image.Width) / 2; } if (image.Height size) { p_top (size - image.Height) / 2; } //将生成的二维码图像粘贴至绘图的中心位置 graphic0.DrawImage(image, p_left, p_top, image.Width, image.Height); image new System.Drawing.Bitmap(panel); panel.Dispose(); panel null; graphic0.Dispose(); graphic0 null; } } #endregion } #endregion return image; } private static bool IsTrue() // 在Image类别对图片进行缩放的时候,需要一个返回bool类别的委托 { return true; } 在aspx页面调用和输出为图片流 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 string content string.IsNullOrEmpty(Request.QueryString[txt]) ? http://www.lenashane.com/ : Request.QueryString[txt]; int size Convert.ToInt32(string.IsNullOrEmpty(Request.QueryString[size]) ? 200 : Request.QueryString[size]); int border Convert.ToInt32(string.IsNullOrEmpty(Request.QueryString[border]) ? 10 : Request.QueryString[border]); System.Drawing.Image image CreateQRCode(content, QRCodeEncoder.ENCODE_MODE.BYTE, QRCodeEncoder.ERROR_CORRECTION.M, 0, 5, size, border); //将图片输出到页面 System.IO.MemoryStream ms new System.IO.MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.ContentType image/Png; HttpContext.Current.Response.OutputStream.Write(ms.ToArray(), 0, ms.ToArray().Length); HttpContext.Current.Response.End(); ms.Close(); ms null; image.Dispose(); image null; 生成二维码方法增加定位点着色参数System.Drawing.Color效果如下 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 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 /// summary /// 生成二维码 /// /summary /// param nameContent内容文本/param /// param nameQRCodeEncodeMode二维码编码方式/param /// param nameQRCodeErrorCorrect纠错码等级/param /// param nameQRCodeVersion二维码版本号 0-40/param /// param nameQRCodeScale每个小方格的预设宽度像素正整数/param /// param namesize图片尺寸像素0表示不设置/param /// param nameborder图片白边像素当size大于0时有效/param /// returns/returns public System.Drawing.Image CreateQRCode(string Content, QRCodeEncoder.ENCODE_MODE QRCodeEncodeMode, QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect, int QRCodeVersion, int QRCodeScale, int size, int border, Color codeEyeColor) { 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 size border 0) { while (image.Width size size - image.Width border * 2 qrCodeEncoder.QRCodeScale 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 size) //如果原图比目标形状宽 { p_left (size - image.Width) / 2; } if (image.Height size) { p_top (size - image.Height) / 2; } //将生成的二维码图像粘贴至绘图的中心位置 graphic0.DrawImage(image, p_left, p_top, image.Width, image.Height); image new System.Drawing.Bitmap(panel); panel.Dispose(); panel null; graphic0.Dispose(); graphic0 null; } #endregion } #endregion return image; } 分类: ASP.NET 本文转自左正博客园博客原文链接http://www.cnblogs.com/soundcode/p/7458375.html如需转载请自行联系原作者