
离线 TA的专栏
- 打卡等级:热心大叔
- 打卡总天数:235
- 打卡月天数:1
- 打卡总奖励:3940
- 最近打卡:2025-12-16 12:01:17
|
本文实例讲述了C#基于QRCode实现动态生成自定义二维码图片功能。分享给大家供大家参考,具体如下:
二维码早就传遍大江南北了,总以为它是个神奇的东西,其实细细研究之后发现也没想象的那么神秘,碰巧最近项目中需要动态生成二维码,解决完实际问题之后,简单总结整理一下。项目中除了动态生成二维码之外,还实现了动态生成自定义图片,二维码可以是其中的元素。
设置图片的数据源为动态图片 - <body>
- <form id="form1" runat="server" >
- <div>
- <img src="GenerateImage.aspx?type=2" />
- </div>
- </form>
- </body>
复制代码动态生成图片
GenerateImage.aspx.cs文件内容
- protected void Page_Load(object sender, EventArgs e)
- {
- string type = Request.QueryString["type"].ToString();
- Bitmap codeImage = Create_QRCode("分享才能获得更多,我尽力而为(5201314)", 6);
- MemoryStream ms = Create_ImgCode(codeImage, "分享才能获得更多,我尽力而为", "5201314", type);
- Response.ClearContent();
- Response.ContentType = "image/Png";
- Response.BinaryWrite(ms.ToArray());
- Response.End();
- }
- private Bitmap Create_QRCode(string codeNumber, int size)
- {
- //创建二维码生成类
- QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
- //设置编码模式
- qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
- //设置编码测量度
- qrCodeEncoder.QRCodeScale = size;
- //设置编码版本
- qrCodeEncoder.QRCodeVersion = 10;
- //设置编码错误纠正
- qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
- //生成二维码图片
- System.Drawing.Bitmap codeImage = qrCodeEncoder.Encode(codeNumber, Encoding.UTF8);
- return codeImage;
- }
- /// <summary>
- /// 生成自定义图片
- /// </summary>
- /// <param name="codeImage">生成的二维码</param>
- /// <param name="objectName">物体名称</param>
- /// <returns>自定义图片内存流</returns>
- private MemoryStream Create_ImgCode(Bitmap codeImage, string objectName, string objectCode, string type)
- {
- string path = string.Empty;
- if (type == "1")
- {
- //设置背景图片
- path = Server.MapPath("Images/backimg1.png");
- }
- else if (type == "2")
- {
- //设置背景图片
- path = Server.MapPath("Images/backimg2.png");
- }
- System.Drawing.Image img = System.Drawing.Image.FromFile(path);
- Bitmap bg = new Bitmap(img);
- //为画布bg(图片bg)创建一只画笔
- Graphics g = Graphics.FromImage(bg);
- if (type == "1")
- {
- //【1】将位图文件codeImage画到画布g上
- //【2】codeImage左上角距画布左边界25px、距画布上边界56px
- //【3】codeImage的长为原长、宽为原宽
- g.DrawImage(codeImage, 25, 56, codeImage.Width, codeImage.Height);
- }
- else if (type == "2")
- {
- g.DrawImage(codeImage, 132, 19, 162, 162);
- System.Drawing.Brush b = new SolidBrush(Color.Black);
- Font font = new Font("宋体", 8, FontStyle.Regular);
- StringFormat sf = new StringFormat();
- sf.LineAlignment = StringAlignment.Center; // 垂直居中
- sf.Alignment = StringAlignment.Near; // 水平左对齐
- //string也是画到画布上的,当画的string长度大于112px时会自动换行
- SizeF stringSize = g.MeasureString("我的宣言:", font, 112, sf);
- int nWidth = (int)stringSize.Width + 1;
- int nHeight = (int)stringSize.Height + 1;
- RectangleF rf = new Rectangle(new Point(12, 64), new Size(nWidth, nHeight));
- g.DrawString("我的宣言:", font, b, rf, sf);
- stringSize = g.MeasureString(objectName, font, 112, sf);
- int objectWidth = (int)stringSize.Width + 1;
- int objectHeight = (int)stringSize.Height + 1;
- rf = new Rectangle(new Point(12, 64 + nHeight + 8), new Size(objectWidth, objectHeight));
- g.DrawString(objectName, font, b, rf, sf);
- SizeF stringSize1 = g.MeasureString("幸运数字:", font, 112, sf);
- nWidth = (int)stringSize1.Width + 1;
- nHeight = (int)stringSize1.Height + 1;
- RectangleF rf1 = new Rectangle(new Point(12, 136), new Size(nWidth, nHeight));
- g.DrawString("幸运数字:", font, b, rf1, sf);
- stringSize1 = g.MeasureString(objectCode, font, 112, sf);
- objectWidth = (int)stringSize1.Width + 1;
- objectHeight = (int)stringSize1.Height + 1;
- rf1 = new Rectangle(new Point(12, 136 + nHeight + 8), new Size(objectWidth, objectHeight));
- g.DrawString(objectCode, font, b, rf1, sf);
- }
- g.Dispose();
- GC.Collect();
- System.IO.MemoryStream ms = new System.IO.MemoryStream();
- bg.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
- //将画布bg(图片bg)保存到指定路径
- path = Server.MapPath("Images");
- bg.Save(path + "\\photoName.png", System.Drawing.Imaging.ImageFormat.Png);
- codeImage.Dispose();
- bg.Dispose();
- return ms;
- }
复制代码ThoughtWorks.QRCode.dll点击此处 本站下载。
PS:本站还提供了一个功能十分强悍的在线二维码生成工具,可实现文本、电话号码、短信、邮件、网址等的二维码生成及logo图标添加功能:
在线生成二维码工具(加强版):
http://bbs.yzwlo.com/transcoding/jb51qrcode
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#图片操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:  进行删除处理。
4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
|