【澳门葡京备用网址】二维码生成工厂,java代码生成二维码

java代码生成二维码,java代码

java代码生成二维码一般步骤

常用的是谷歌(Google)的Zxing来生成二维码,生成的貌似步骤如下:

一、下载zxing-core的jar包:

澳门葡京备用网址 1

 

二、要求创制一个MatrixToImageWriter类,此类google的源码中提供了,为了使用方便,上边是类中的代码,可以一向复制来采纳:

 private static final int BLACK = 0xFF000000;
    private static final int WHITE = 0xFFFFFFFF;

    private MatrixToImageWriter() {}


    public static BufferedImage toBufferedImage(BitMatrix matrix) {
      int width = matrix.getWidth();
      int height = matrix.getHeight();
      BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
      for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
          image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
        }
      }
      return image;
    }


    public static void writeToFile(BitMatrix matrix, String format, File file)
        throws IOException {
      BufferedImage image = toBufferedImage(matrix);
      if (!ImageIO.write(image, format, file)) {
        throw new IOException("Could not write an image of format " + format + " to " + file);
      }
    }


    public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)
        throws IOException {
      BufferedImage image = toBufferedImage(matrix);
      if (!ImageIO.write(image, format, stream)) {
        throw new IOException("Could not write an image of format " + format);
      }
    }

  三、创立七个运维类,用来生成二维码:(注意:二维码访谈的url地址供给留神,假使书写成www格式的,须求浏览器扫一扫,一样的地点写成http格式的能够用任何扫码器扫都得以)

 public static void main(String[] args) {
  try {
             //二维码访问的网址地址1:www.baidu.com或者http://baidu.com
       String content = "http://baidu.com";
       //二维码图片保存的路径
       String path = "D:/test";
       MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
       Map hints = new HashMap();
       hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
       BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 100, 100,hints);
       File file1 = new File(path,"百度首页.jpg");
       MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1);

   } catch (Exception e) {
       e.printStackTrace();
   }
 }

  四、经过亲身测验能够生成二维码,必要特别注意的是:

  二维码访谈的url地址书写,一般景观下都以写成http格式的;

java代码生成二维码一般步骤
常用的是Google的Zxing来生成二维码,生成的一般步骤如下:
一、下载zxing-core的…

java代码生成二维码一般步骤

java代码生成二维码一般步骤

此番重大分享的是3个免费的二维码接口的连片代码和测量试验得出的瞩目点及界别,有越来越好管理情势多多交换,互相促进升高;近期在念书JavsScript的强大TypeScript,以为语法糖相当的甜,半数以上与C#更为类似,恐怕都是微软项目标缘由吗,有意思味的心上人能够多多相互交换下;

常用的是谷歌的Zxing来生成二维码,生成的形似步骤如下:

常用的是Google的Zxing来生成二维码,生成的形似步骤如下:

 

一、下载zxing-core的jar包:

一、下载zxing-core的jar包:

如上是个人的视角,下边来标准分享前日的稿子吧:

澳门葡京备用网址 2

澳门葡京备用网址 3

. Google的Api二维码生成接口

 

【澳门葡京备用网址】二维码生成工厂,java代码生成二维码。 

. 2d-code的Api二维码生成接口

二、必要创设多个MatrixToImageWriter类,此类google的源码中提供了,为了使用方便,上面是类中的代码,能够直接复制来行使:

二、要求成立一个MatrixToImageWriter类,此类google的源码中提供了,为了使用方便,上边是类中的代码,能够直接复制来使用:

. topscan的Api二维码生成接口

   private static final int BLACK = 0xFF000000;
       private static final int WHITE = 0xFFFFFFFF;

       private MatrixToImageWriter() {}


       public static BufferedImage toBufferedImage(BitMatrix matrix) {
         int width = matrix.getWidth();
         int height = matrix.getHeight();
         BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
         for (int x = 0; x < width; x++) {
           for (int y = 0; y < height; y++) {
             image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
           }
         }
         return image;
       }


       public static void writeToFile(BitMatrix matrix, String format, File file)
           throws IOException {
         BufferedImage image = toBufferedImage(matrix);
         if (!ImageIO.write(image, format, file)) {
           throw new IOException("Could not write an image of format " + format + " to " + file);
         }
       }


       public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)
           throws IOException {
         BufferedImage image = toBufferedImage(matrix);
         if (!ImageIO.write(image, format, stream)) {
           throw new IOException("Could not write an image of format " + format);
         }
       }
   private static final int BLACK = 0xFF000000;
       private static final int WHITE = 0xFFFFFFFF;

       private MatrixToImageWriter() {}


       public static BufferedImage toBufferedImage(BitMatrix matrix) {
         int width = matrix.getWidth();
         int height = matrix.getHeight();
         BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
         for (int x = 0; x < width; x++) {
           for (int y = 0; y < height; y++) {
             image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
           }
         }
         return image;
       }


       public static void writeToFile(BitMatrix matrix, String format, File file)
           throws IOException {
         BufferedImage image = toBufferedImage(matrix);
         if (!ImageIO.write(image, format, file)) {
           throw new IOException("Could not write an image of format " + format + " to " + file);
         }
       }


       public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)
           throws IOException {
         BufferedImage image = toBufferedImage(matrix);
         if (!ImageIO.write(image, format, stream)) {
           throw new IOException("Could not write an image of format " + format);
         }
       }

. 使用面向对象+加载程序集创立对象合并以上接口封装成二维码生成工厂

  三、创设三个运维类,用来生成二维码:(注意:二维码访谈的url地址须要专注,借使书写成www格式的,须求浏览器扫一扫,一样的地方写成http格式的可以用别样扫码器扫都得以)

澳门葡京备用网址,  三、创造贰个起动类,用来生成二维码:(注意:二维码访谈的url地址必要专注,若是书写成www格式的,须求浏览器扫一扫,同样的地址写成http格式的能够用任何扫码器扫都足以)

 

    public static void main(String[] args) {
        try {
             //二维码访问的网址地址1:www.baidu.com或者http://baidu.com
             String content = "http://baidu.com";
             //二维码图片保存的路径
             String path = "D:/test";
             MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
             Map hints = new HashMap();
             hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
             BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 100, 100,hints);
             File file1 = new File(path,"百度首页.jpg");
             MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1);

         } catch (Exception e) {
             e.printStackTrace();
         }
    }
    public static void main(String[] args) {
        try {
             //二维码访问的网址地址1:www.baidu.com或者http://baidu.com
             String content = "http://baidu.com";
             //二维码图片保存的路径
             String path = "D:/test";
             MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
             Map hints = new HashMap();
             hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
             BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 100, 100,hints);
             File file1 = new File(path,"百度首页.jpg");
             MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1);

         } catch (Exception e) {
             e.printStackTrace();
         }
    }

下边安分守己的来享受:

  四、经过亲身测量检验能够生成二维码,必要极度注意的是:

  四、经过亲自测验能够生成二维码,要求特别注意的是:

. 谷歌的Api二维码生成接口

  二维码访谈的url地址书写,一般情形下都以写成http格式的;

  二维码访谈的url地址书写,一般景况下都以写成http格式的;

第一,这里给出谷歌接口文书档案的链接qr_codes文档,热情的相爱的人及时就能打开此链接吧,详细看下里面的参数那就不做截图了,大约平日接纳的参数是:api地址,内容参数,生成图片的高宽这3个参数,其余的多少个参数都施用默许的啊,差异须要大家能够更详细的看下;其实首先次拜见文书档案里面包车型地铁参数,感到少了部分东西,比方怎么无法传递二维码中间那多少个Logo的图片地址和扫描二维码过后怎么跳转到笔者想重定向的url链接呢,带着这几个问号作者实行了往往的品味;上面给出本身尝试的结果印证:

1. 接口关键参数是:cht(固定值qr),chl(内容参数),chs(生成出来二维码图片尺寸,格式如:200×200,这里是xyz的x不是*)

2.
api接口只会变动一个二维码的图纸流,若是须要把图片保存到地头必要通过浏览器直接get采访接口只怕经进度序下载这几个二维码

3. 内容参数假诺传递文本新闻,在更换出来的二维码图片当中不会议及展览示文本内容,独有用手提式有线电话机扫描二维码技术在小弟大上显得传递的文书音讯

4.
内容参数假如传递单纯的

5. google接口暂未切磋出此图标Logo地址参数(希望有恋人研商出来后与自家分享,多谢)

  1. 由于api地址是国外的,调用接口响应不是那么高效

其次,下面是个体的片段总括,上边我们来看下封装的伸手接口方法和下载二维码图片方法:

 1  #region 生成二维码
 2 
 3         /// <summary>
 4         /// 生成二维码
 5         /// </summary>
 6         /// <param name="content">展示内容(文本内容 或者 扫描后的跳转http://格式的地址)</param>
 7         /// <param name="savePath">保存二维码的磁盘路径(默认程序跟目录+QRCode)</param>
 8         /// <param name="logoUrl"> Logo图标地址(格式:http://),(注:google接口暂未研究出此参数)</param>
 9         /// <param name="apiUrl">接口地址(内置默认api地址)</param>
10         /// <param name="wAndh">宽度和高度(二维码正方形的,高宽一至,默认200)</param>
11         /// <returns></returns>
12         public virtual string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
13         {
14             var qrName = string.Empty;
15 
16             #region 参数初始化
17 
18             ApiUrl = apiUrl ?? ApiUrl;
19             Content = content ?? Content;
20             SaveQRPath = savePath ?? SaveQRPath;
21             LogoUrl = logoUrl ?? LogoUrl;
22             WAndH = wAndh ?? WAndH;
23             #endregion
24 
25             if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
26 
27             ApiUrl = string.Format("{0}?cht=qr&chl={1}&chs={2}x{2}",
28                         ApiUrl,
29                         HttpUtility.UrlEncode(Content),
30                         WAndH);
31 
32             qrName = DownImg(ApiUrl, SaveQRPath, ImageFormat.Jpeg);
33             return qrName;
34         }
35         #endregion

下载二维码图片保存到程序根目录:

 1  #region 下载图片
 2 
 3         /// <summary>
 4         /// 下载图片
 5         /// </summary>
 6         /// <param name="url">图片下载地址</param>
 7         /// <param name="savePath">保存路径默认:Img文件夹</param>
 8         /// <param name="format">默认:Jpeg</param>
 9         /// <returns>新图片名称</returns>
10         public virtual string DownImg(string url, string savePath = "QRCode", ImageFormat format = null)
11         {
12             var qrName = string.Empty;
13             try
14             {
15                 format = format ?? ImageFormat.Jpeg;
16 
17                 HttpClient http = new HttpClient();
18                 http.Timeout = new TimeSpan(0, 1, 0);
19                 using (var stream = http.GetStreamAsync(url).Result)
20                 {
21 
22                     if (!Directory.Exists(SaveQRPath)) { Directory.CreateDirectory(SaveQRPath); }
23                     qrName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "." + format;
24                     var path = Path.Combine(savePath, qrName);
25                     using (Image img = Image.FromStream(stream))
26                     {
27                         img.Save(path, format);
28                     }
29                 }
30             }
31             catch (Exception ex)
32             {
33                 qrName = string.Empty;
34             }
35             return qrName;
36         }
37         #endregion

地点多少个主意运用的是虚方法,因为作者这里是啊google接口当做默许的二维码生成器来利用,前面要讲的别的多个接口都以重写与此;下载图片的艺术都以公用的,暂没有须要重写;这里须要提到的是调用api接口时有一个固定的参数cht=qr,那几个参数表示接纳Q福睿斯方法生成二维码,因为那些api接口还会有变化Logo的效用,所以只想要生成二维码这里就定位,越多的变迁Logo功用不在本章分享中,感谢。

 

. 2d-code的Api二维码生成接口

第一,该接口须要经过她们官方网站注册贰个key,然后从后台获取到那些key后工夫调用接口地址,当然注册后有个功能是,凡是您通过api接口生成的二维码,除了自个儿通过流下载,还是能够由此她们后台一同下载全部变化的图形,本身临时没有去关怀是还是不是生成量大了会收取费用哈哈,上面列举下接口参数表明和测验得出的注意点:

1.
接口关键参数是:key(注册获取),text(文本参数),url(扫描后重定向地址),logo(LogoLogo地址),size(二维码星型,高宽)

2.
接口的文本参数只好传递文本,不可能同日而语扫描后重定向的地点参数使用和Google等接口有一些不一致样

3. 扫描后重定向地址和Logo图标地址都以可访谈的

4. Logo图标地址,官方说不建议使用png格式,测量检验只有jpg成功(恐怕是测量检验非常不足多这里只单纯介绍自身的结果)

  1. 改换速度极快,况且还也许有三个办法字的变动接口,挺不错

6.
api接口只会生成八个二维码的图片流,借使需求把图片保存到地头供给经过浏览器直接get访谈接口恐怕通进度序下载这一个二维码

说不上,下边给出封装的代码,由于下载和方面介绍的代码同样是公用的此处就不做陈说:

澳门葡京备用网址 4澳门葡京备用网址 5

 1 public QR_2dCode()
 2         {
 3 
 4             ApiUrl = "http://www.2d-code.cn/2dcode/api.php";
 5         }
 6 
 7         #region 生成二维码
 8 
 9         /// <summary>
10         /// 生成二维码
11         /// </summary>
12         /// <param name="content">展示内容(文本内容 或者 扫描后的跳转http://格式的地址)</param>
13         /// <param name="savePath">保存二维码的磁盘路径(默认程序跟目录+QRCode)</param>
14         /// <param name="logoUrl"> Logo图标地址(格式:http://),官方不建议使用png格式,测试只有jpg成功</param>
15         /// <param name="directUrl">扫描后重定向地址(http://)</param>
16         /// <param name="apiUrl">接口地址(内置默认api地址)</param>
17         /// <param name="wAndh">宽度和高度(二维码正方形的,高宽一至,默认200)</param>
18         /// <returns></returns>
19         public override string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
20         {
21             var qrName = string.Empty;
22 
23             #region 参数初始化
24 
25             ApiUrl = apiUrl ?? ApiUrl;
26             Content = content ?? Content;
27             SaveQRPath = savePath ?? SaveQRPath;
28             LogoUrl = logoUrl ?? LogoUrl;
29             WAndH = wAndh ?? WAndH;
30             #endregion
31 
32             if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
33 
34             ApiUrl = string.Format("{0}?key=c_d800OBbu6hDzJtXPE2Yd02IMtmpuK9VdCqHe6vrtar4&text={1}&url={2}&logo={3}&size={4}",
35                         ApiUrl,
36                         HttpUtility.UrlEncode(Content.Contains("http") ? "" : Content),
37                         HttpUtility.UrlEncode(Content),
38                         HttpUtility.UrlEncode(LogoUrl),
39                         WAndH);
40 
41             qrName = DownImg(ApiUrl, SaveQRPath);
42             return qrName;
43         }
44         #endregion

View Code

 

. topscan的Api二维码生成接口

先是,该接口肯定是无需付费的,参数描述和google的基本上,差别处在于能够传递LogoLogo地址(当然或然本人还没察觉google的能够传递logo的参数,故此朋友们方可忽略);上面列举下接口参数表明和测验得出的注意点:

1. 接口关键参数是:text(内容参数),logo(Logo图标地址),w(生成出来二维码图片尺寸,格式如:200×200,这里是xyz的x不是*)

2.
api接口只会转移八个二维码的图纸流,假如急需把图纸保存到地面必要通过浏览器间接get访谈接口大概经进程序下载那几个二维码

3. 剧情参数假如传递文本音信,在风云突变出来的二维码图片个中不会来得文本内容,只有用手提式有线电话计算机扫描描二维码才具在四哥伦比亚大学上呈现传递的文件音讯

4.
剧情参数假若传递单纯的

5. LogoLogo地址(格式:

6. 测量检验得出有时候伏乞生成二维码不回去数据,有相当大希望是自家网路难点吧,平常生成二维码的速度照旧挺快

帮助,上边给出封装的代码,由于下载和上边介绍的代码一样是公用的此处就不做汇报:

澳门葡京备用网址 6澳门葡京备用网址 7

 1 public QR_TopScan()
 2         {
 3 
 4             ApiUrl = "http://qr.topscan.com/api.php";
 5         }
 6 
 7         #region 生成二维码
 8 
 9         /// <summary>
10         /// 生成二维码
11         /// </summary>
12         /// <param name="content">展示内容(文本内容 或者 扫描后的跳转http://格式的地址)</param>
13         /// <param name="savePath">保存二维码的磁盘路径(默认程序跟目录+QRCode)</param>
14         /// <param name="logoUrl"> Logo图标地址(格式:http://),jpg,png测试通过,测试得出有不能成功的,原因不知是否和地址有关</param>
15         /// <param name="apiUrl">接口地址(内置默认api地址)</param>
16         /// <param name="wAndh">宽度和高度(二维码正方形的,高宽一至,默认200)</param>
17         /// <returns></returns>
18         public override string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
19         {
20             var qrName = string.Empty;
21 
22             #region 参数初始化
23 
24             ApiUrl = apiUrl ?? ApiUrl;
25             Content = content ?? Content;
26             SaveQRPath = savePath ?? SaveQRPath;
27             LogoUrl = logoUrl ?? LogoUrl;
28             WAndH = wAndh ?? WAndH;
29             #endregion
30 
31             if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
32 
33             ApiUrl = string.Format("{0}?text={1}&logo={2}&w={3}",
34                         ApiUrl,
35                         HttpUtility.UrlEncode(Content),
36                         HttpUtility.UrlEncode(LogoUrl),
37                         WAndH);
38 
39             qrName = DownImg(ApiUrl, SaveQRPath);
40             return qrName;
41         }
42         #endregion

View Code

 

. 使用面向对象+加载程序集成立对象合併以上接口封装成二维码生成工厂

第一,剖析上边3个接口的参数能够观望,都亟待牢固的参数:接口api,内容(文本或跳转http地址),Logo图片地址(google临时除此而外),宽度和惊人等那多少个参数,那样一来咋们能够定义个统一参数类,来传递该参数音讯,这里还要提下由于那多少个接口都以从别人接口获取图片流,若是想要吧图片在试行顺序时候一直保存在大家的主次本地,都亟需下载,所以又多贰个参数: 保存二维码的磁盘路线,所以才有了一下集体的习性:

 1 #region 基础配置信息
 2 
 3         /// <summary>
 4         /// 接口地址(必填)
 5         /// </summary>
 6         protected string ApiUrl = "https://chart.googleapis.com/chart";
 7 
 8         /// <summary>
 9         /// 展示内容(文本内容),google文本参数直接传递http地址直接重定向
10         /// </summary>
11         protected string Content = "http://www.cnblogs.com/wangrudong003/";
12 
13         /// <summary>
14         /// 保存二维码的磁盘路径(默认程序跟目录+QRCode)
15         /// </summary>
16         protected string SaveQRPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "QRCode");
17 
18         /// <summary>
19         /// Logo图片地址(http://)
20         /// </summary>
21         protected string LogoUrl = "http://a.hiphotos.baidu.com/baike/w%3D268%3Bg%3D0/sign=9a34e44d8bd4b31cf03c93bdbfed4042/2cf5e0fe9925bc318cb9fe965edf8db1ca1370dc.jpg";
22 
23         /// <summary>
24         /// 宽度和高度(二维码正方形的,高宽一至,默认200)
25         /// </summary>
26         protected int WAndH = 200;
27 
28         #endregion

接下来,这里自身不想每种接口都手动new一遍来创造对象,所以用了加载程序集的模块的法子来制造所供给的目标,因而有了工厂类的进口:

 1  /// <summary>
 2     /// 二维码生成工厂
 3     /// </summary>
 4     public class QRCodeReposity
 5     {
 6 
 7         public static BaseQRCode Current(QREmType qrEmType = QREmType.BaseQRCode)
 8         {
 9 
10             var nspace = typeof(BaseQRCode);
11             var fullName = nspace.FullName;
12             var nowspace = fullName.Substring(0, fullName.LastIndexOf('.') + 1);
13 
14             return Assembly.GetExecutingAssembly().CreateInstance(nowspace + qrEmType.ToString(), true) as BaseQRCode;
15         }
16     }

此处和从前的缓存工厂文章设计基本上,能够查阅下在此以前的分享篇,也多多点赞,多谢;上面在给出说有的代码如下:

澳门葡京备用网址 8澳门葡京备用网址 9

  1     /// <summary>
  2     /// 工厂模块定义
  3     /// </summary>
  4     public enum QREmType
  5     {
  6         /// <summary>
  7         /// google接口
  8         /// </summary>
  9         BaseQRCode,
 10 
 11         /// <summary>
 12         /// 2d-code接口
 13         /// </summary>
 14         QR_2dCode,
 15 
 16         /// <summary>
 17         /// topscan接口
 18         /// </summary>
 19         QR_TopScan
 20     }
 21 
 22     /// <summary>
 23     /// 二维码生成工厂
 24     /// </summary>
 25     public class QRCodeReposity
 26     {
 27 
 28         public static BaseQRCode Current(QREmType qrEmType = QREmType.BaseQRCode)
 29         {
 30 
 31             var nspace = typeof(BaseQRCode);
 32             var fullName = nspace.FullName;
 33             var nowspace = fullName.Substring(0, fullName.LastIndexOf('.') + 1);
 34 
 35             return Assembly.GetExecutingAssembly().CreateInstance(nowspace + qrEmType.ToString(), true) as BaseQRCode;
 36         }
 37     }
 38 
 39     /// <summary>
 40     /// 基类使用Google提供Api:https://developers.google.com/chart/infographics/docs/qr_codes ,由于是国外地址,相对来说有点慢
 41     /// </summary>
 42     public class BaseQRCode
 43     {
 44 
 45         #region 基础配置信息
 46 
 47         /// <summary>
 48         /// 接口地址(必填)
 49         /// </summary>
 50         protected string ApiUrl = "https://chart.googleapis.com/chart";
 51 
 52         /// <summary>
 53         /// 展示内容(文本内容),google文本参数直接传递http地址直接重定向
 54         /// </summary>
 55         protected string Content = "http://www.cnblogs.com/wangrudong003/";
 56 
 57         /// <summary>
 58         /// 保存二维码的磁盘路径(默认程序跟目录+QRCode)
 59         /// </summary>
 60         protected string SaveQRPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "QRCode");
 61 
 62         /// <summary>
 63         /// Logo图片地址(http://)
 64         /// </summary>
 65         protected string LogoUrl = "http://a.hiphotos.baidu.com/baike/w%3D268%3Bg%3D0/sign=9a34e44d8bd4b31cf03c93bdbfed4042/2cf5e0fe9925bc318cb9fe965edf8db1ca1370dc.jpg";
 66 
 67         /// <summary>
 68         /// 宽度和高度(二维码正方形的,高宽一至,默认200)
 69         /// </summary>
 70         protected int WAndH = 200;
 71 
 72         #endregion
 73 
 74         #region 方法
 75 
 76         #region 生成二维码
 77 
 78         /// <summary>
 79         /// 生成二维码
 80         /// </summary>
 81         /// <param name="content">展示内容(文本内容 或者 扫描后的跳转http://格式的地址)</param>
 82         /// <param name="savePath">保存二维码的磁盘路径(默认程序跟目录+QRCode)</param>
 83         /// <param name="logoUrl"> Logo图标地址(格式:http://),(注:google接口暂未研究出此参数)</param>
 84         /// <param name="apiUrl">接口地址(内置默认api地址)</param>
 85         /// <param name="wAndh">宽度和高度(二维码正方形的,高宽一至,默认200)</param>
 86         /// <returns></returns>
 87         public virtual string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
 88         {
 89             var qrName = string.Empty;
 90 
 91             #region 参数初始化
 92 
 93             ApiUrl = apiUrl ?? ApiUrl;
 94             Content = content ?? Content;
 95             SaveQRPath = savePath ?? SaveQRPath;
 96             LogoUrl = logoUrl ?? LogoUrl;
 97             WAndH = wAndh ?? WAndH;
 98             #endregion
 99 
100             if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
101 
102             ApiUrl = string.Format("{0}?cht=qr&chl={1}&chs={2}x{2}",
103                         ApiUrl,
104                         HttpUtility.UrlEncode(Content),
105                         WAndH);
106 
107             qrName = DownImg(ApiUrl, SaveQRPath, ImageFormat.Jpeg);
108             return qrName;
109         }
110         #endregion
111 
112         #region 下载图片
113 
114         /// <summary>
115         /// 下载图片
116         /// </summary>
117         /// <param name="url">图片下载地址</param>
118         /// <param name="savePath">保存路径默认:Img文件夹</param>
119         /// <param name="format">默认:Jpeg</param>
120         /// <returns>新图片名称</returns>
121         public virtual string DownImg(string url, string savePath = "QRCode", ImageFormat format = null)
122         {
123             var qrName = string.Empty;
124             try
125             {
126                 format = format ?? ImageFormat.Jpeg;
127 
128                 HttpClient http = new HttpClient();
129                 http.Timeout = new TimeSpan(0, 1, 0);
130                 using (var stream = http.GetStreamAsync(url).Result)
131                 {
132 
133                     if (!Directory.Exists(SaveQRPath)) { Directory.CreateDirectory(SaveQRPath); }
134                     qrName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "." + format;
135                     var path = Path.Combine(savePath, qrName);
136                     using (Image img = Image.FromStream(stream))
137                     {
138                         img.Save(path, format);
139                     }
140                 }
141             }
142             catch (Exception ex)
143             {
144                 qrName = string.Empty;
145             }
146             return qrName;
147         }
148         #endregion
149 
150         #endregion
151     }
152 
153     /// <summary>
154     /// 使用2d-code提供Api,需要去官网注册获取Key
155     /// </summary>
156     public class QR_2dCode : BaseQRCode
157     {
158 
159         public QR_2dCode()
160         {
161 
162             ApiUrl = "http://www.2d-code.cn/2dcode/api.php";
163         }
164 
165         #region 生成二维码
166 
167         /// <summary>
168         /// 生成二维码
169         /// </summary>
170         /// <param name="content">展示内容(文本内容 或者 扫描后的跳转http://格式的地址)</param>
171         /// <param name="savePath">保存二维码的磁盘路径(默认程序跟目录+QRCode)</param>
172         /// <param name="logoUrl"> Logo图标地址(格式:http://),官方不建议使用png格式,测试只有jpg成功</param>
173         /// <param name="directUrl">扫描后重定向地址(http://)</param>
174         /// <param name="apiUrl">接口地址(内置默认api地址)</param>
175         /// <param name="wAndh">宽度和高度(二维码正方形的,高宽一至,默认200)</param>
176         /// <returns></returns>
177         public override string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
178         {
179             var qrName = string.Empty;
180 
181             #region 参数初始化
182 
183             ApiUrl = apiUrl ?? ApiUrl;
184             Content = content ?? Content;
185             SaveQRPath = savePath ?? SaveQRPath;
186             LogoUrl = logoUrl ?? LogoUrl;
187             WAndH = wAndh ?? WAndH;
188             #endregion
189 
190             if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
191 
192             ApiUrl = string.Format("{0}?key=c_d800OBbu6hDzJtXPE2Yd02IMtmpuK9VdCqHe6vrtar4&text={1}&url={2}&logo={3}&size={4}",
193                         ApiUrl,
194                         HttpUtility.UrlEncode(Content.Contains("http") ? "" : Content),
195                         HttpUtility.UrlEncode(Content),
196                         HttpUtility.UrlEncode(LogoUrl),
197                         WAndH);
198 
199             qrName = DownImg(ApiUrl, SaveQRPath);
200             return qrName;
201         }
202         #endregion
203     }
204 
205     /// <summary>
206     /// 使用topscan提供Api
207     /// </summary>
208     public class QR_TopScan : BaseQRCode
209     {
210 
211         public QR_TopScan()
212         {
213 
214             ApiUrl = "http://qr.topscan.com/api.php";
215         }
216 
217         #region 生成二维码
218 
219         /// <summary>
220         /// 生成二维码
221         /// </summary>
222         /// <param name="content">展示内容(文本内容 或者 扫描后的跳转http://格式的地址)</param>
223         /// <param name="savePath">保存二维码的磁盘路径(默认程序跟目录+QRCode)</param>
224         /// <param name="logoUrl"> Logo图标地址(格式:http://),jpg,png测试通过,测试得出有不能成功的,原因不知是否和地址有关</param>
225         /// <param name="apiUrl">接口地址(内置默认api地址)</param>
226         /// <param name="wAndh">宽度和高度(二维码正方形的,高宽一至,默认200)</param>
227         /// <returns></returns>
228         public override string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
229         {
230             var qrName = string.Empty;
231 
232             #region 参数初始化
233 
234             ApiUrl = apiUrl ?? ApiUrl;
235             Content = content ?? Content;
236             SaveQRPath = savePath ?? SaveQRPath;
237             LogoUrl = logoUrl ?? LogoUrl;
238             WAndH = wAndh ?? WAndH;
239             #endregion
240 
241             if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
242 
243             ApiUrl = string.Format("{0}?text={1}&logo={2}&w={3}",
244                         ApiUrl,
245                         HttpUtility.UrlEncode(Content),
246                         HttpUtility.UrlEncode(LogoUrl),
247                         WAndH);
248 
249             qrName = DownImg(ApiUrl, SaveQRPath);
250             return qrName;
251         }
252         #endregion
253     }

View Code

本篇的分享内容在先后设计方面一向不太多,入眼是分装下那多少个接口和享用下接口的距离,方面朋友们得以拿来主义和正在对接二维码生成的意中人做下沟通,仅此而已;关键代码的备注都在享用代码里,有越来越好恐怕不领会的地点招待留言,感谢,放一张效果图,大家能够扫一扫:

 澳门葡京备用网址 10

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website