您的位置:首页 > 其它

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

2017-06-09 16:45 337 查看
由于最近有一个需求,就是要求即时生成一个包含代理商名称的注册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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息