内存中生成的二维码图片如何在页面中img的src中输出

来源:互联网 发布:不停打电话的软件 编辑:程序博客网 时间:2024/05/30 05:41

由于最近有一个需求,就是要求即时生成一个包含代理商名称的注册url的二维码。以供代理商推广的时候使用。当点击此二维码,则跳转到注册页面,在此页面注册成功的会员属于此代理商。生成二维码相关代码,利用ThoughtWorks.QRCode实现了。可是生成图片显示到页面却把我难住了。按我的想法,因为这个二维码是在内存中生成的,是bitmap对象。我是打算让其直接在页面的<img src="" /> 生成src链接,此页面还会有其他的页面内容。但网上搜索,第一种方法是在服务端的某个目录下面生成一个图片文件。然后可以读取这个图片文件显示,这有点绕,不想采用。

第二种方法,生成ashx文件。代码如下:

 /// <summary>    /// GetImgUrl 的摘要说明    /// </summary>    public class GetImgUrl : IHttpHandler    {        public void ProcessRequest(HttpContext context)        {            context.Response.ContentType = "Image/jpeg";            string agent = context.Request.QueryString["agent"].ToString();            string url = string.Format("http://jiaogui.jinrimianshi.com/account/register?agent={0}", agent);            using (var img = QRCode.CreateQRCode(url))            {                img.Save(context.Response.OutputStream, ImageFormat.Jpeg);            }            //context.Response.Flush();            //context.Response.End();        }        public bool IsReusable        {            get            {                return false;            }        }    }

这种前端页面中的调用代码为:

<div>    <img src="~/Handler/GetImgUrl.ashx?agent=agent3" /></div>

第三种方法,使用bas64方式生成图片编码。代码如下:

public ActionResult Test()        {            string strBase64 = "";            string url = "http://jiaogui.jinrimianshi.com/account/register?agent=agent1";            using (var img = QRCode.CreateQRCode(url))            {                using (MemoryStream ms = new MemoryStream())                {                    img.Save(ms, ImageFormat.Jpeg);                    byte[] arr = new byte[ms.Length];                    ms.Position = 0;                    ms.Read(arr, 0, (int)ms.Length);                    strBase64 = Convert.ToBase64String(arr);                }            }            ViewBag.img = strBase64;            return View();        }

前端调用代码:

<div>    <img src="data:image/jpg;base64,@ViewBag.img" /></div>


阅读全文
0 0
原创粉丝点击