C#基于QRCode实现动态生成自定义二维码图片功能示例
本文实例讲述了C#基于QRCode实现动态生成自定义二维码图片功能。分享给大家供大家参考,具体如下:
二维码早就传遍大江南北了,总以为它是个神奇的东西,其实细细研究之后发现也没想象的那么神秘,碰巧最近项目中需要动态生成二维码,解决完实际问题之后,简单总结整理一下。项目中除了动态生成二维码之外,还实现了动态生成自定义图片,二维码可以是其中的元素。
设置图片的数据源为动态图片
动态生成图片
GenerateImage.aspx.cs文件内容
protectedvoidPage_Load(objectsender,EventArgse) { stringtype=Request.QueryString["type"].ToString(); BitmapcodeImage=Create_QRCode("分享才能获得更多,我尽力而为(5201314)",6); MemoryStreamms=Create_ImgCode(codeImage,"分享才能获得更多,我尽力而为","5201314",type); Response.ClearContent(); Response.ContentType="image/Png"; Response.BinaryWrite(ms.ToArray()); Response.End(); } privateBitmapCreate_QRCode(stringcodeNumber,intsize) { //创建二维码生成类 QRCodeEncoderqrCodeEncoder=newQRCodeEncoder(); //设置编码模式 qrCodeEncoder.QRCodeEncodeMode=QRCodeEncoder.ENCODE_MODE.BYTE; //设置编码测量度 qrCodeEncoder.QRCodeScale=size; //设置编码版本 qrCodeEncoder.QRCodeVersion=10; //设置编码错误纠正 qrCodeEncoder.QRCodeErrorCorrect=QRCodeEncoder.ERROR_CORRECTION.M; //生成二维码图片 System.Drawing.BitmapcodeImage=qrCodeEncoder.Encode(codeNumber,Encoding.UTF8); returncodeImage; } //////生成自定义图片 /// ///生成的二维码 /// 物体名称 /// 自定义图片内存流 privateMemoryStreamCreate_ImgCode(BitmapcodeImage,stringobjectName,stringobjectCode,stringtype) { stringpath=string.Empty; if(type=="1") { //设置背景图片 path=Server.MapPath("Images/backimg1.png"); } elseif(type=="2") { //设置背景图片 path=Server.MapPath("Images/backimg2.png"); } System.Drawing.Imageimg=System.Drawing.Image.FromFile(path); Bitmapbg=newBitmap(img); //为画布bg(图片bg)创建一只画笔 Graphicsg=Graphics.FromImage(bg); if(type=="1") { //【1】将位图文件codeImage画到画布g上 //【2】codeImage左上角距画布左边界25px、距画布上边界56px //【3】codeImage的长为原长、宽为原宽 g.DrawImage(codeImage,25,56,codeImage.Width,codeImage.Height); } elseif(type=="2") { g.DrawImage(codeImage,132,19,162,162); System.Drawing.Brushb=newSolidBrush(Color.Black); Fontfont=newFont("宋体",8,FontStyle.Regular); StringFormatsf=newStringFormat(); sf.LineAlignment=StringAlignment.Center;//垂直居中 sf.Alignment=StringAlignment.Near;//水平左对齐 //string也是画到画布上的,当画的string长度大于112px时会自动换行 SizeFstringSize=g.MeasureString("我的宣言:",font,112,sf); intnWidth=(int)stringSize.Width+1; intnHeight=(int)stringSize.Height+1; RectangleFrf=newRectangle(newPoint(12,64),newSize(nWidth,nHeight)); g.DrawString("我的宣言:",font,b,rf,sf); stringSize=g.MeasureString(objectName,font,112,sf); intobjectWidth=(int)stringSize.Width+1; intobjectHeight=(int)stringSize.Height+1; rf=newRectangle(newPoint(12,64+nHeight+8),newSize(objectWidth,objectHeight)); g.DrawString(objectName,font,b,rf,sf); SizeFstringSize1=g.MeasureString("幸运数字:",font,112,sf); nWidth=(int)stringSize1.Width+1; nHeight=(int)stringSize1.Height+1; RectangleFrf1=newRectangle(newPoint(12,136),newSize(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=newRectangle(newPoint(12,136+nHeight+8),newSize(objectWidth,objectHeight)); g.DrawString(objectCode,font,b,rf1,sf); } g.Dispose(); GC.Collect(); System.IO.MemoryStreamms=newSystem.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(); returnms; }
ThoughtWorks.QRCode.dll点击此处本站下载。
PS:本站还提供了一个功能十分强悍的在线二维码生成工具,可实现文本、电话号码、短信、邮件、网址等的二维码生成及logo图标添加功能:
在线生成二维码工具(加强版):
http://tools.jb51.net/transcoding/jb51qrcode
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#图片操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。