GDI+生成证书带二维码
最近做一个在线培训系统,要求学生考试成绩合格后自动生成证书,并提供下载。证书上的二维码使用ThoughtWorks.QRCode生成,支持中文(使用快拍
二维码测试正常)。

#region 绘制基本数据 var certificateBackgroundImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath("~/Images/3.jpg")); Graphics gaphics = Graphics.FromImage(certificateBackgroundImage); //使用已有的照片作为背景 TextureBrush br = new TextureBrush(certificateBackgroundImage); Rectangle rc = new Rectangle(0, 0, 1000, 750); gaphics.FillRectangle(br, rc); Font ft = new Font("微软雅黑", 17); //在指定的位置绘制文本 gaphics.DrawString("" + Model.TrueName + "", ft, Brushes.Black, 115, 250); gaphics.DrawString("" + Model.IdentityCardNumber + "", ft, Brushes.Black, 460, 250); gaphics.DrawString("" + professionName + "", ft, Brushes.Black, 115, 295); gaphics.DrawString("" + Model.WorkUnit + "", ft, Brushes.Black, 460, 295); gaphics.DrawString("语文,数学", ft, Brushes.Black, 200, 345); gaphics.DrawString("50", ft, Brushes.Black, 673, 345); gaphics.DrawString("物理,化学", ft, Brushes.Black, 200, 442); gaphics.DrawString("50", ft, Brushes.Black, 673, 442); gaphics.DrawString("" + DateTime.Now.Year + "", ft, Brushes.Black, 750, 675); gaphics.DrawString("" + DateTime.Now.Month + "", ft, Brushes.Black, 825, 675); gaphics.DrawString("" + DateTime.Now.Day + "", ft, Brushes.Black, 875, 675); //绘制照片 using (System.Drawing.Image image = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath("~/Images/boy.jpg"))) { gaphics.DrawImage(image, new Rectangle(820, 245, 130, 182)); } //生成证书编码 gaphics.DrawString("" + CertificateNumber + "", ft, Brushes.Black, 820, 435); #endregion

#region 生成二维码 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); string encoding = "Byte"; switch (encoding) { case "Byte": qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; break; case "AlphaNumeric": qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC; break; case "Numeric": qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC; break; } int scale = 4; qrCodeEncoder.QRCodeScale = scale; string errorCorrect = "L"; switch (errorCorrect) { case "L": qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L; break; case "M": qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; break; case "Q": qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q; break; case "H": qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; break; } Bitmap bm = null; bm = qrCodeEncoder.Encode("姓名:" + Model.TrueName + ",证书编号:12324,成绩合格,授予证书", Encoding.GetEncoding("GB2312")); //在指定的位置绘制生成的二维码 gaphics.DrawImage(bm, new Rectangle(50, 530, 130, 125)); #endregion

#region 将生成的证书保存到指定目录 string fileName = DateTime.Now.ToFileTime() + ".jpg"; string filePath = System.Web.HttpContext.Current.Server.MapPath("UploadFile/"); string SaveFile = filePath + fileName; if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); MemoryStream ms = new MemoryStream(); certificateBackgroundImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] buffer = ms.ToArray(); FileStream fs = new FileStream(SaveFile, FileMode.OpenOrCreate, FileAccess.ReadWrite); fs.Write(buffer, 0, buffer.Length); fs.Flush(); fs.Close(); fs.Dispose(); } else { MemoryStream ms = new MemoryStream(); certificateBackgroundImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] buffer = ms.ToArray(); FileStream fs = new FileStream(SaveFile, FileMode.OpenOrCreate, FileAccess.ReadWrite); fs.Write(buffer, 0, buffer.Length); fs.Flush(); fs.Close(); fs.Dispose(); } #endregion
QRCode下载地址:http://down.51cto.com/data/758027
2013-5-14修改:不直接保存二维码到本地,使用GDI+将二维码画到证书模板后保存证书到指定位置。如果指定的目录不存在则创建目录。
从别后, 忆相逢, 几会魂梦与汝同。
分类:
ASP.Net
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端