QrCode.Net 生成二維碼圖片

  QrCode.Net  0.4.0

 

  最近實現.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()));
            }

        }
    }
}
View Code
相關文章
相關標籤/搜索