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#程序设计有所帮助。