设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间01 现在时间01 缓存数据 当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

查看: 2869|回复: 4

C#基于QRCode实现动态生成自定义二维码图片功能示例

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:235
  • 打卡月天数:1
  • 打卡总奖励:3940
  • 最近打卡:2025-12-16 12:01:17
等级头衔

等級:晓枫资讯-上等兵

在线时间
4 小时

积分成就
威望
0
贡献
462
主题
410
精华
0
金钱
5289
积分
945
注册时间
2023-1-6
最后登录
2025-12-16

发表于 2023-2-26 18:30:43 来自手机 | 显示全部楼层 |阅读模式
本文实例讲述了C#基于QRCode实现动态生成自定义二维码图片功能。分享给大家供大家参考,具体如下:
二维码早就传遍大江南北了,总以为它是个神奇的东西,其实细细研究之后发现也没想象的那么神秘,碰巧最近项目中需要动态生成二维码,解决完实际问题之后,简单总结整理一下。项目中除了动态生成二维码之外,还实现了动态生成自定义图片,二维码可以是其中的元素。
设置图片的数据源为动态图片
  1. <body>
  2.   <form id="form1" runat="server" >
  3.   <div>
  4.     <img src="GenerateImage.aspx?type=2" />
  5.   </div>
  6.   </form>
  7. </body>
复制代码
动态生成图片
GenerateImage.aspx.cs文件内容
  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3.   string type = Request.QueryString["type"].ToString();
  4.   Bitmap codeImage = Create_QRCode("分享才能获得更多,我尽力而为(5201314)", 6);
  5.   MemoryStream ms = Create_ImgCode(codeImage, "分享才能获得更多,我尽力而为", "5201314", type);
  6.   Response.ClearContent();
  7.   Response.ContentType = "image/Png";
  8.   Response.BinaryWrite(ms.ToArray());
  9.   Response.End();
  10. }
  11. private Bitmap Create_QRCode(string codeNumber, int size)
  12. {
  13.   //创建二维码生成类
  14.   QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
  15.   //设置编码模式
  16.   qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
  17.   //设置编码测量度
  18.   qrCodeEncoder.QRCodeScale = size;
  19.   //设置编码版本
  20.   qrCodeEncoder.QRCodeVersion = 10;
  21.   //设置编码错误纠正
  22.   qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
  23.   //生成二维码图片
  24.   System.Drawing.Bitmap codeImage = qrCodeEncoder.Encode(codeNumber, Encoding.UTF8);
  25.   return codeImage;
  26. }
  27. /// <summary>
  28. /// 生成自定义图片
  29. /// </summary>
  30. /// <param name="codeImage">生成的二维码</param>
  31. /// <param name="objectName">物体名称</param>
  32. /// <returns>自定义图片内存流</returns>
  33. private MemoryStream Create_ImgCode(Bitmap codeImage, string objectName, string objectCode, string type)
  34. {
  35.   string path = string.Empty;
  36.   if (type == "1")
  37.   {
  38.     //设置背景图片
  39.     path = Server.MapPath("Images/backimg1.png");
  40.   }
  41.   else if (type == "2")
  42.   {
  43.     //设置背景图片
  44.     path = Server.MapPath("Images/backimg2.png");
  45.   }
  46.   System.Drawing.Image img = System.Drawing.Image.FromFile(path);
  47.   Bitmap bg = new Bitmap(img);
  48.   //为画布bg(图片bg)创建一只画笔
  49.   Graphics g = Graphics.FromImage(bg);
  50.   if (type == "1")
  51.   {
  52.     //【1】将位图文件codeImage画到画布g上
  53.     //【2】codeImage左上角距画布左边界25px、距画布上边界56px
  54.     //【3】codeImage的长为原长、宽为原宽
  55.     g.DrawImage(codeImage, 25, 56, codeImage.Width, codeImage.Height);
  56.   }
  57.   else if (type == "2")
  58.   {
  59.     g.DrawImage(codeImage, 132, 19, 162, 162);
  60.     System.Drawing.Brush b = new SolidBrush(Color.Black);
  61.     Font font = new Font("宋体", 8, FontStyle.Regular);
  62.     StringFormat sf = new StringFormat();
  63.     sf.LineAlignment = StringAlignment.Center; // 垂直居中
  64.     sf.Alignment = StringAlignment.Near;    // 水平左对齐
  65.     //string也是画到画布上的,当画的string长度大于112px时会自动换行
  66.     SizeF stringSize = g.MeasureString("我的宣言:", font, 112, sf);
  67.     int nWidth = (int)stringSize.Width + 1;
  68.     int nHeight = (int)stringSize.Height + 1;
  69.     RectangleF rf = new Rectangle(new Point(12, 64), new Size(nWidth, nHeight));
  70.     g.DrawString("我的宣言:", font, b, rf, sf);
  71.     stringSize = g.MeasureString(objectName, font, 112, sf);
  72.     int objectWidth = (int)stringSize.Width + 1;
  73.     int objectHeight = (int)stringSize.Height + 1;
  74.     rf = new Rectangle(new Point(12, 64 + nHeight + 8), new Size(objectWidth, objectHeight));
  75.     g.DrawString(objectName, font, b, rf, sf);
  76.     SizeF stringSize1 = g.MeasureString("幸运数字:", font, 112, sf);
  77.     nWidth = (int)stringSize1.Width + 1;
  78.     nHeight = (int)stringSize1.Height + 1;
  79.     RectangleF rf1 = new Rectangle(new Point(12, 136), new Size(nWidth, nHeight));
  80.     g.DrawString("幸运数字:", font, b, rf1, sf);
  81.     stringSize1 = g.MeasureString(objectCode, font, 112, sf);
  82.     objectWidth = (int)stringSize1.Width + 1;
  83.     objectHeight = (int)stringSize1.Height + 1;
  84.     rf1 = new Rectangle(new Point(12, 136 + nHeight + 8), new Size(objectWidth, objectHeight));
  85.     g.DrawString(objectCode, font, b, rf1, sf);
  86.   }
  87.   g.Dispose();
  88.   GC.Collect();
  89.   System.IO.MemoryStream ms = new System.IO.MemoryStream();
  90.   bg.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
  91.   //将画布bg(图片bg)保存到指定路径
  92.   path = Server.MapPath("Images");
  93.   bg.Save(path + "\\photoName.png", System.Drawing.Imaging.ImageFormat.Png);
  94.   codeImage.Dispose();
  95.   bg.Dispose();
  96.   return ms;
  97. }
复制代码
ThoughtWorks.QRCode.dll点击此处本站下载
PS:本站还提供了一个功能十分强悍的在线二维码生成工具,可实现文本、电话号码、短信、邮件、网址等的二维码生成及logo图标添加功能:
在线生成二维码工具(加强版):
http://bbs.yzwlo.com/transcoding/jb51qrcode
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#图片操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
11
积分
2
注册时间
2024-10-14
最后登录
2024-10-14

发表于 2025-1-16 11:59:14 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
20
积分
20
注册时间
2022-12-27
最后登录
2022-12-27

发表于 2025-1-21 14:09:28 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:常驻代表
  • 打卡总天数:30
  • 打卡月天数:1
  • 打卡总奖励:364
  • 最近打卡:2025-12-02 03:01:07
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
417
积分
62
注册时间
2023-1-18
最后登录
2025-12-2

发表于 2025-1-24 12:12:13 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
15
积分
10
注册时间
2022-12-25
最后登录
2022-12-25

发表于 2025-10-5 20:07:18 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼
4楼
5楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表