zoukankan      html  css  js  c++  java
  • 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.新建类,添加引用。

    using Gma.QrCodeNet.Encoding;
    using Gma.QrCodeNet.Encoding.Windows.Render;

    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
  • 相关阅读:
    利用WinCE的精准计时函数来输出pwm信号以便控制舵机
    leafletjs旋转marker
    centos7 NodeJs安装问题:Error: Cannot find module '../lib/utils/unsupported.js'
    Django 自定义存储上传文件的文件名
    后端开发不会前端之表格插件的使用
    Django项目部署之sqlite版本升级
    SQL 循环30日
    SSRS 报表 报表迁移
    SQL SERVER中求上月、本月和下月的第一天和最后一天
    SSRS 报表 日期类表达式
  • 原文地址:https://www.cnblogs.com/qqxiongmao/p/4402734.html
Copyright © 2011-2022 走看看