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

由于最近有一个需求,就是要求即时生成一个包含代理商名称的注册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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值