MVC生成二维码

        [HttpPost]
        public ActionResult ErWeiMaIndex(FormCollection formCollection)
        {
            string strContent = formCollection["txtQRContext"].ToString();
            string strPicUrl = formCollection["picUrl"].ToString();
            MemoryStream ms = new MemoryStream();

            #region 生成二维码
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeScale = 4;
            qrCodeEncoder.QRCodeVersion = 7;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            Image image = qrCodeEncoder.Encode(strContent, System.Text.Encoding.UTF8); //kedee 增加utf-8编码,可支持中文汉字  
            Bitmap map = new Bitmap(image, new Size(200, 200));
            #endregion

            map.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            //  将图片内存流转成base64,图片以DataURI形式显示
            string strUrl = "data:image/gif;base64," + Convert.ToBase64String(ms.ToArray());
            image.Dispose();
            ms.Dispose();
            //  显示
            ViewBag.src = strUrl;
            return View();
        }

使用ThoughtWorks.QRCode.dll组件

生成中间包含图标的二维码

前台部分:

tip:标签encType="multipart/form-data"和标签name="AAA"必写,缺少的话,后台获取不到上传的文件。

@{
    ViewBag.Title = "ErWeiMaIndex";
}
<h2>
    ErWeiMaIndex</h2>
@using (Html.BeginForm("ErWeiMaIndex", "ErWeiMa", FormMethod.Post, new { encType = "multipart/form-data" }))
{
    @Html.TextBox("txtQRContext")Html.Raw("<br />");
    <input type="submit" value="生成二维码" οnclick="submitLogoPic();" /><br />
    <span>请选择logo图片:</span><input id="filePic" type="file" name="AAA" value="LOGO图片" />
}
<div id="divImage">
    <img src="@ViewBag.src" />
</div>
后台部分:图标位置的结算以后改进

        #region 不包含图标的二维码
        /*
        /// <summary>
        /// 不包含图标的二维码
        /// </summary>
        /// <param name="formCollection"></param>
        /// <returns></returns>
        [HttpPost]
        public ActionResult ErWeiMaIndex(FormCollection formCollection)
        {
            string strContent = formCollection["txtQRContext"].ToString();
            string strPicUrl = formCollection["picUrl"].ToString();
            MemoryStream ms = new MemoryStream();

            #region 生成二维码
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeScale = 4;
            qrCodeEncoder.QRCodeVersion = 7;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            Image image = qrCodeEncoder.Encode(strContent, System.Text.Encoding.UTF8); //kedee 增加utf-8编码,可支持中文汉字  
            Bitmap map = new Bitmap(image, new Size(200, 200));
            #endregion

            map.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
            //  将图片内存流转成base64,图片以DataURI形式显示
            string strUrl = "data:image/gif;base64," + Convert.ToBase64String(ms.ToArray());
            image.Dispose();
            ms.Dispose();
            //  显示
            ViewBag.src = strUrl;
            return View();
        }*/
        #endregion

        #region 包含图标的二维码
        [HttpPost]
        public ActionResult ErWeiMaIndex(FormCollection formCollection)
        {
            string strContextText = formCollection["txtQRContext"].ToString();
            HttpPostedFileBase uploadPic = Request.Files[0];

            #region 生成二维码图片
            Bitmap btQr = new Bitmap(200, 200);
            QRCodeEncoder qrCodeEncode = new QRCodeEncoder();
            qrCodeEncode.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncode.QRCodeScale = 4;
            qrCodeEncode.QRCodeVersion = 7;
            btQr = qrCodeEncode.Encode(strContextText,Encoding.UTF8);
            #endregion

            #region 生成新图
            Bitmap btNewImage = GetNewImage(btQr, uploadPic);
            #endregion
            //  声明一个流
            MemoryStream ms = new MemoryStream();
            //  将图片保存到流当中去
            btNewImage.Save(ms, ImageFormat.Gif);
            //  将图片设置成dataURI格式,赋值给src
            ViewBag.src = "data:image/gif;base64," + Convert.ToBase64String(ms.ToArray());

            return View();
        }
        /// <summary>
        /// 生成包含logo图标的二维码
        /// </summary>
        /// <param name="btQr">无logo的二维码</param>
        /// <param name="uploadPic">logo</param>
        /// <returns></returns>
        private Bitmap GetNewImage(Bitmap btQr, HttpPostedFileBase uploadPic)
        {
            int intBtLogoWidth = btQr.Width / 3;
            int intBtLogoHeigth = btQr.Height / 3;

            #region 获取并处理logo
            Image imgLogo = Image.FromStream(uploadPic.InputStream);
            Bitmap btLogo = new Bitmap(imgLogo, intBtLogoWidth, intBtLogoHeigth);
            #endregion

            #region 合并图片,使用Graphice(画布)
            Graphics g = Graphics.FromImage(btQr);
            g.DrawImage(Image.FromStream(uploadPic.InputStream), intBtLogoWidth, intBtLogoHeigth, intBtLogoWidth, intBtLogoHeigth);
            g.Dispose();
            #endregion

            return btQr;
        }
        #endregion




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值