如何使用ThoughtWorks.QRCode.dll 生成自定义尺寸和边框宽度的二维码 10

注意:是要自定高和宽,最好详细点每一步有备注最好,新手,请多关照!!!... 注意:是要自定高和宽,最好详细点每一步有备注最好,新手,请多关照!!! 展开
 我来答
匿名用户
2018-02-11
展开全部
本文介绍在 C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码。网上大多数文章只是简单介绍自定义参数的设置,根据自己找的一些资料和项目需要,增加了自定义二维码图片尺寸大小和边框。有需要的话欢迎尝试,如有问题欢迎留言指正。
首先,将 ThoughtWorks.QRCode.dll 放在 bin 目录下后,并在页面中引用:
生成二维码图片:

/// <summary>/// 生成二维码/// </summary>/// <param name="Content">内容文本</param>/// <param name="QRCodeEncodeMode">二维码编码方式</param>/// <param name="QRCodeErrorCorrect">纠错码等级</param>/// <param name="QRCodeVersion">二维码版本号 0-40</param>/// <param name="QRCodeScale">每个小方格的预设宽度(像素),正整数</param>/// <param name="size">图片尺寸(像素),0表示不设置</param>/// <param name="border">图片白边(像素),当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页面调用和输出为图片流:
string content = string.IsNullOrEmpty(Request.QueryString["txt"]) ? "'网站名称'" : 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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
AiPPT
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图... 点击进入详情页
本回答由AiPPT提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式