最近實現.net生成二維碼。若是二維碼png圖片不存在,則使用第三方庫QrCode.Net生成二維碼png圖片保存到服務器上,而後返回該二維碼的生成路徑(由於生成png圖片的路徑,是根據參數歸類到**年文件夾 下的**月文件夾 下的 **日文件夾下,因此要根據參數找對應的二維碼圖片路徑)服務器
1.打開 程序包管理器 控制檯,在窗口中 輸入 Install-Package QrCode.Net,就能夠經過 nuget獲取到 QrCode.Net 0.4.0 dll包。微信
2.新建類,添加引用。ide
using Gma.QrCodeNet.Encoding;
using Gma.QrCodeNet.Encoding.Windows.Render;ui
3.該類實現代碼以下。編碼
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using Gma.QrCodeNet.Encoding; using Gma.QrCodeNet.Encoding.Windows.Render; namespace CYP2014.Shd.Common { public class GenerateImage { private static readonly CYPLog.TextLogger _generateImage = CYPLog.TextLogManager.Create(typeof (GenerateImage)); /// <summary> /// 獲取分享到微信二維碼圖片路徑,若是圖片不存在,則生成二維碼png圖片 /// </summary> /// <param name="tradeCode">車輛編碼</param> /// <param name="wayTag">檢測報告導入平臺 1 PC端 2 WCF 默認爲1</param> /// <returns>二維碼圖片路徑</returns> public static string GetImage(string tradeCode, int wayTag = 1) { try { if (string.IsNullOrEmpty(tradeCode)) { return ""; } //圖片路徑 string fileName = tradeCode.Trim() + ".png"; string secondFolder = "/WeChatImg"; string subYearMonth = tradeCode.Substring(3, 5); int yearNum = 0; int dayNum = 0; int.TryParse(subYearMonth.Substring(0, 2), out yearNum); int.TryParse(subYearMonth.Substring(2, 3), out dayNum); int.TryParse("20" + yearNum, out yearNum); //聲明日期 var date = new DateTime(); date = date.AddYears(yearNum).AddYears(-1); date = date.AddDays(dayNum).AddDays(-1); secondFolder = string.Format("{0}\\{1}\\{2}\\{3}\\", secondFolder, yearNum, date.Month, date.Day); string tagFolder = System.Web.Hosting.HostingEnvironment.MapPath("~" + secondFolder); if (!Directory.Exists(tagFolder)) { Directory.CreateDirectory(tagFolder); } string newfilename = tagFolder + fileName; if (!File.Exists(newfilename)) { //請求 下載圖片 //var httpWebRequest = WebRequest.Create(url); //var httpWebResponse = httpWebRequest.GetResponse(); //var stream = httpWebResponse.GetResponseStream(); //var bitmap = (Bitmap) Image.FromStream(stream); ////保存圖片文件 //bitmap.Save(newfilename, System.Drawing.Imaging.ImageFormat.Png); string url = string.Format(@"{0}Share/Report.aspx?tradecode={1}&waytag={2}", Config.MobileServiceUrl, tradeCode, wayTag); GenQrCode(newfilename, url); } return string.Concat(Config.VirtualDirectory, secondFolder, fileName); } catch (Exception ex) { _generateImage.Info(string.Format( "GenerateImage.GetImage異常。參數:tradeCode=【{0}】,wayTag=【{1}】。異常信息:【{2}】", tradeCode, wayTag, ex.ToString())); return string.Empty; } } /// <summary> /// 生成二維碼,並保存圖片到指定路徑下 /// </summary> /// <param name="fileName">圖片保存路徑全名(包括路徑和文件名)</param> /// <param name="content">要生成二維碼的內容</param> public static void GenQrCode(string fileName, string content) { try { var qrEncoder = new QrEncoder(ErrorCorrectionLevel.H); var qrCode = qrEncoder.Encode(content); var gRender = new GraphicsRenderer(new FixedModuleSize(5, QuietZoneModules.Two)); using (var stream = new FileStream(fileName, FileMode.Create)) { gRender.WriteToStream(qrCode.Matrix, ImageFormat.Png, stream, new Point(600, 600)); } } catch (Exception ex) { _generateImage.Info( string.Format( "GenerateImage.GenQrCode異常。參數:content=【{0}】,fileName=【{1}】。異常信息:【{2}】", content, fileName, ex.ToString())); } } } }