互聯網的時代,一時一刻都沒有停止過,一直都在進步,隨着社會的需要,科技的發展。各個方面的各個崗位的需要,沒有什麼技術實現不了的。爲了更便捷、服務的時代。一切達到簡便、快捷、易上手。例如 :“中國建設銀行校園繳費平臺”。PC端繳費、微信公衆號繳費都是太拘束了。客戶說 :我就想要跟他差不多的,各個商戶生成自己的一個二維碼,如果客戶用微信掃一掃默認就是微信支付、用支付寶掃默認就是支付寶支付、用瀏覽器掃 到支付那一頁了下面列表可以選擇支付寶、微信、銀聯、等等各個通道支付。 嗯 聽着是可以滿足客戶需求的 但 但 可能花點時間
整理整理思路 ,想倒是想的挺簡單挺美好來着,但是到某一步也許就卡的一下,無論怎麼樣 一切都是能解決滴 ,沒有什麼能夠阻擋 。。。
創建生成連接二維碼
(1).可以放到公共的類裏啦
public class QRCodeHandler { /// <summary> /// 創建生成二維碼 /// </summary> /// <param name="Dz">跳轉連接地址</param> /// <param name="Tp">中間顯示的Logo</param> /// <returns></returns> /// 也可以是Image 類型 public static byte[] CreateQRcode(string Dz, string Tp) { QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//二維碼編碼(Byte、AlphaNumeric、Numeric) qrCodeEncoder.QRCodeScale = 4;//二維碼尺寸(Version爲0時,1:26x26,每加1寬和高各加25 qrCodeEncoder.QRCodeVersion = 8;//二維碼密集度0-40 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//二維碼糾錯能力(L:7% M:15% Q:25% H:30%) Image card = qrCodeEncoder.Encode(Dz, Encoding.UTF8); System.IO.MemoryStream MStream = new System.IO.MemoryStream(); card.Save(MStream, System.Drawing.Imaging.ImageFormat.Png); System.IO.MemoryStream MStream1 = new System.IO.MemoryStream(); CombinImage(card, Tp).Save(MStream1, System.Drawing.Imaging.ImageFormat.Png); MStream.Dispose(); MStream1.Dispose(); MemoryStream ms = new MemoryStream(); card.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); //return card; Image類型的時候返回 return ms.ToArray(); //返回 byte[]類型 } /// <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);
(2).前端調用後臺生成商戶需要的連接地址二維碼,EWMWxItem中的w、h 是設置二維碼裏面logo的寬高
//頁面 <ul class="ui-list ui-list-one ui-list-link ui-border-tb"> @foreach (var m in Model.sources) { var url = Url.Action("WxItem", new { id = m.ID }); <li class="ui-border-t"> <a class="ui-list-info" href="@url"> <h4 class="ui-nowrap">@m.MC</h4> <img src="@Url.Action("EWMWxItem", "Home", new { id = m.ID, logo = m.Logo, dz= url })" /> <div class="ui-txt-info"></div> </a> </li> } </ul> //後臺 [Description("獲取二維碼")] public ActionResult EWMWxItem(int id, string logo, string dz, int? w, int? h) { try { w = 50; h = 50; if (string.IsNullOrWhiteSpace(logo)) return HttpNotFound(); logo = logo.Replace("../", ""); var t = "~/" + logo; var logourl = Server.MapPath(t); var startIndex = logourl.LastIndexOf('.'); List<string> exs = new List<string> { ".JPG", ".JPEG", ".PNG", ".GIF", ".ICO", ".BMP" }; if (w.HasValue || h.HasValue) { var tp = string.Format("{0}.{1}_{2}.jpg", logourl, w, h); if (!System.IO.File.Exists(tp)) { Db.Charge.FileHelper.PicFile.MakeThumbnail(logourl, tp, w, h); } logourl = tp; } //二維碼跳轉的連接地址 var Url = Request.Url.Scheme + "://" + Request.Url.Authority + dz; var EWMLogo = QRCodeHandler.CreateQRcode(Url, logourl); return File(EWMLogo, @"image/jpeg"); } catch (Exception ex) { Db.Charge.LogHelper.WriteLogs.LogN("EWMWxItem", ex.ToString()); return HttpNotFound(); } }
如果二維碼返回 Image類型,後臺可以這樣處理
// Image類型 public class ImageResult : ActionResult { public ImageResult() { } public Image Image { get; set; } public ImageFormat ImageFormat { get; set; } public override void ExecuteResult(ControllerContext context) { // 驗證屬性 if (Image == null) { throw new ArgumentNullException("Image"); } if (ImageFormat == null) { throw new ArgumentNullException("ImageFormat"); } //輸出 context.HttpContext.Response.Clear(); if (ImageFormat.Equals(ImageFormat.Bmp)) context.HttpContext.Response.ContentType = "image/bmp"; if (ImageFormat.Equals(ImageFormat.Gif)) context.HttpContext.Response.ContentType = "image/gif"; if (ImageFormat.Equals(ImageFormat.Icon)) context.HttpContext.Response.ContentType = "image/vnd.microsoft.icon"; if (ImageFormat.Equals(ImageFormat.Jpeg)) context.HttpContext.Response.ContentType = "image/jpeg"; if (ImageFormat.Equals(ImageFormat.Png)) context.HttpContext.Response.ContentType = "image/png"; if (ImageFormat.Equals(ImageFormat.Tiff)) context.HttpContext.Response.ContentType = "image/tiff"; if (ImageFormat.Equals(ImageFormat.Wmf)) context.HttpContext.Response.ContentType = "image/wmf"; Image.Save(context.HttpContext.Response.OutputStream, ImageFormat); } } public ActionResult EWMWxItem(int id, string logo, string dz, int? w, int? h) { //二維碼跳轉的連接地址 var Url = Request.Url.Scheme + "://" + Request.Url.Authority + dz; var EWMLogo = QRCodeHandler.CreateQRcode(Url, logo); return new ImageResult() { Image = EWMLogo, ImageFormat = System.Drawing.Imaging.ImageFormat.Jpeg }; }
看前臺頁面需要什麼類型的數據顯示,無論是哪個類型的 都可以顯示在頁面。
哇 ~ 顯示出來了耶 ,但 但是 這個圖片 有點大啊,咦 不管了 先掃一下吧 哈哈哈 跳到了