asp.net(C#)使用QRCode生成图片中心加Logo或图像的二维码实例
程序员文章站
2023-12-01 14:20:40
本文实例讲述了asp.net(c#)使用qrcode生成图片中心加logo或图像的二维码。分享给大家供大家参考,具体如下:
<%@ webhandler l...
本文实例讲述了asp.net(c#)使用qrcode生成图片中心加logo或图像的二维码。分享给大家供大家参考,具体如下:
<%@ webhandler language="c#" class="getqrcode" %> using system; using system.web; using thoughtworks.qrcode.codec; using thoughtworks.qrcode.codec.data; using thoughtworks.qrcode.codec.util; using system.io; using system.text; using system.drawing; using system.drawing.drawing2d; public class getqrcode : ihttphandler { public void processrequest(httpcontext context) { string data = context.request["codetext"]; if (!string.isnullorempty(data)) { qrcodeencoder qrcodeencoder = new qrcodeencoder(); qrcodeencoder.qrcodeencodemode = qrcodeencoder.encode_mode.byte; qrcodeencoder.qrcodescale = 4; qrcodeencoder.qrcodeversion = 8; qrcodeencoder.qrcodeerrorcorrect = qrcodeencoder.error_correction.m; system.drawing.image image = qrcodeencoder.encode(data); system.io.memorystream mstream = new system.io.memorystream(); image.save(mstream, system.drawing.imaging.imageformat.png); system.io.memorystream mstream1 = new system.io.memorystream(); combinimage(image, context.server.mappath("~/images/201292891051540.jpg")).save(mstream1, system.drawing.imaging.imageformat.png); context.response.clearcontent(); context.response.contenttype = "image/png"; context.response.binarywrite(mstream1.toarray()); //image.dispose(); mstream.dispose(); mstream1.dispose(); } context.response.flush(); context.response.end(); } /// <summary> /// 调用此函数后使此两种图片合并,类似相册,有个 /// 背景图,中间贴自己的目标图片 /// </summary> /// <param name="imgback">粘贴的源图片</param> /// <param name="destimg">粘贴的目标图片</param> public static image combinimage(image imgback, string destimg) { image img = image.fromfile(destimg); //照片图片 if (img.height != 65 || img.width != 65) { img = kiresizeimage(img, 65, 65, 0); } graphics g = graphics.fromimage(imgback); g.drawimage(imgback, 0, 0, imgback.width, imgback.height); //g.drawimage(imgback, 0, 0, 相框宽, 相框高); //g.fillrectangle(system.drawing.brushes.white, imgback.width / 2 - img.width / 2 - 1, imgback.width / 2 - img.width / 2 - 1,1,1);//相片四周刷一层黑色边框 //g.drawimage(img, 照片与相框的左边距, 照片与相框的上边距, 照片宽, 照片高); g.drawimage(img, imgback.width / 2 - img.width / 2, imgback.width / 2 - img.width / 2, img.width, img.height); gc.collect(); return imgback; } /// <summary> /// resize图片 /// </summary> /// <param name="bmp">原始bitmap</param> /// <param name="neww">新的宽度</param> /// <param name="newh">新的高度</param> /// <param name="mode">保留着,暂时未用</param> /// <returns>处理以后的图片</returns> public static image kiresizeimage(image bmp, int neww, int newh, int mode) { try { image b = new bitmap(neww, newh); graphics g = graphics.fromimage(b); // 插值算法的质量 g.interpolationmode = interpolationmode.highqualitybicubic; g.drawimage(bmp, new rectangle(0, 0, neww, newh), new rectangle(0, 0, bmp.width, bmp.height), graphicsunit.pixel); g.dispose(); return b; } catch { return null; } } public bool isreusable { get { return false; } } }
运行效果如下图所示:
ps:本站还提供了一个功能十分强悍的在线二维码生成工具,可实现文本、电话号码、短信、邮件、网址等的二维码生成及logo图标添加功能:
在线生成二维码工具(加强版):
更多关于asp.net相关内容感兴趣的读者可查看本站专题:《asp.net操作json技巧总结》、《asp.net字符串操作技巧汇总》、《asp.net操作xml技巧总结》、《asp.net文件操作技巧汇总》、《asp.net ajax技巧总结专题》及《asp.net缓存操作技巧总结》。
希望本文所述对大家asp.net程序设计有所帮助。