C#基于QRCode实现动态生成自定义二维码图片功能示例
程序员文章站
2023-11-21 12:40:40
本文实例讲述了c#基于qrcode实现动态生成自定义二维码图片功能。分享给大家供大家参考,具体如下:
二维码早就传遍大江南北了,总以为它是个神奇的东西,其实细细研究之后发...
本文实例讲述了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图标添加功能:
在线生成二维码工具(加强版):
更多关于c#相关内容感兴趣的读者可查看本站专题:《c#图片操作技巧汇总》、《c#常见控件用法教程》、《winform控件用法总结》、《c#数据结构与算法教程》、《c#面向对象程序设计入门教程》及《c#程序设计之线程使用技巧总结》
希望本文所述对大家c#程序设计有所帮助。