• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 详解二维码生成工厂

详解二维码生成工厂

作者:神牛步行3 字体:[增加 减小] 来源:互联网 时间:2017-05-28

神牛步行3 通过本文主要向大家介绍了二维码详解,第九工厂二维码生成器,二维码工厂,第九工厂 二维码,第九工厂创意二维码等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本次主要分享的是3个免费的二维码接口的对接代码和测试得出的注意点及区别,有更好处理方式多多交流,相互促进进步;最近在学习JavsScript的扩展TypeScript,感觉语法糖很甜,大部分与C#更为类似,可能都是微软项目的原因吧,有兴趣的朋友可以多多相互交流下;

以上是个人的看法,下面来正式分享今天的文章吧:

  • Google的Api二维码生成接口
  • 2d-code的Api二维码生成接口
  • topscan的Api二维码生成接口
  • 使用面向对象+加载程序集创建对象合并以上接口封装成二维码生成工厂

下面一步一个脚印的来分享:

Google的Api二维码生成接口

首先,这里给出Google接口文档的链接qr_codes文档,热情的朋友马上就会打开此链接吧,详细看下里面的参数这就不做截图了,大致通常用到的参数是:api地址,内容参数,生成图片的高宽这3个参数,其他的几个参数都采用默认的吧,不同需要大家可以更详细的看下;其实第一次看到文档里面的参数,感觉少了一些东西,比如怎么不能传递二维码中间那个图标的图片地址和扫描二维码过后怎么跳转到我想重定向的url链接呢,带着这个疑问我进行了多次的尝试;下面给出自己尝试的结果说明:

  •  接口关键参数是:cht(固定值qr),chl(内容参数),chs(生成出来二维码图片尺寸,格式如:200x200,这里是xyz的x不是*)
  • api接口只会生成一个二维码的图片流,如果需要把图片保存到本地需要通过浏览器直接get访问接口或者通过程序下载这个二维码
  • 内容参数如果传递文本信息,在生成出来的二维码图片中间不会显示文本内容,只有用手机扫描二维码才能在手机上显示传递的文本信息
  • 内容参数如果传递单纯的http://格式的链接地址,那么手机扫描后会自动重定向到改http://链接地址上(这个扫描重定向可以用来做一些商品或者文章的查看)
  • google接口暂未研究出此Logo图标地址参数(希望有朋友研究出来后与我分享,谢谢)
  • 由于api地址是国外的,调用接口响应不是那么快速

其次,上面是个人的一些总结,下面我们来看下封装的请求接口方法和下载二维码图片方法:

#region 生成二维码

 /// <summary>
 /// 生成二维码
 /// </summary>
 /// <param name="content">展示内容(文本内容 或者 扫描后的跳转http://格式的地址)</param>
 /// <param name="savePath">保存二维码的磁盘路径(默认程序跟目录+QRCode)</param>
 /// <param name="logoUrl"> Logo图标地址(格式:http://),(注:google接口暂未研究出此参数)</param>
 /// <param name="apiUrl">接口地址(内置默认api地址)</param>
 /// <param name="wAndh">宽度和高度(二维码正方形的,高宽一至,默认200)</param>
 /// <returns></returns>
 public virtual string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
 {
 var qrName = string.Empty;
 #region 参数初始化
 ApiUrl = apiUrl ?? ApiUrl;
 Content = content ?? Content;
 SaveQRPath = savePath ?? SaveQRPath;
 LogoUrl = logoUrl ?? LogoUrl;
 WAndH = wAndh ?? WAndH;
 #endregion
 if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
 ApiUrl = string.Format("{0}?cht=qr&chl={1}&chs={2}x{2}",
 ApiUrl,
 HttpUtility.UrlEncode(Content),
 WAndH);
 qrName = DownImg(ApiUrl, SaveQRPath, ImageFormat.Jpeg);
 return qrName;
 }
 #endregion
</div>

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

#region 下载图片
 /// <summary>
 /// 下载图片
 /// </summary>
 /// <param name="url">图片下载地址</param>
 /// <param name="savePath">保存路径默认:Img文件夹</param>
 /// <param name="format">默认:Jpeg</param>
 /// <returns>新图片名称</returns>
 public virtual string DownImg(string url, string savePath = "QRCode", ImageFormat format = null)
 {
 var qrName = string.Empty;
 try
 {
 format = format ?? ImageFormat.Jpeg;
 HttpClient http = new HttpClient();
 http.Timeout = new TimeSpan(0, 1, 0);
 using (var stream = http.GetStreamAsync(url).Result)
 {
 if (!Directory.Exists(SaveQRPath)) { Directory.CreateDirectory(SaveQRPath); }
 qrName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "." + format;
 var path = Path.Combine(savePath, qrName);
 using (Image img = Image.FromStream(stream))
 {
 img.Save(path, format);
 }
 }
 }
 catch (Exception ex)
 {
 qrName = string.Empty;
 }
 return qrName;
 }
#endregion
</div>

上面两个方法使用的是虚方法,因为我这里是吧google接口当做默认的二维码生成器来使用,后面要讲的另外两个接口都是重写与此;下载图片的方法都是公用的,暂不需要重写;这里需要提到的是调用api接口时有一个固定的参数cht=qr,这个参数表示采用QR方法生成二维码,因为这个api接口还有生成图标的功能,所以只想要生成二维码这里就固定,更多的生成图标功能不在本章分享中,谢谢。

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

首先,该接口需要通过他们官网注册一个key,然后从后台获取到这个key后才能调用接口地址,当然注册后有个功能是,凡是您通过api接口生成的二维码,除了自己通过流下载,还能通过他们后台一起下载所有生成的图片,本人暂时没有去关注是否生成量大了会收费哈哈,下面列举下接口参数说明和测试得出的注意点:

  • 接口关键参数是:key(注册获取),text(文本参数),url(扫描后重定向地址),logo(Logo图标地址),size(二维码正方形,高宽)
  • 接口的文本参数只能传递文本,不能当做扫描后重定向的地址参数使用和Google等接口有点不一样
  • 扫描后重定向地址和Logo图标地址都是可访问的http://格式的地址链接
  • Logo图标地址,官方说不建议使用png格式,测试只有jpg成功(可能是测试不够多这里只单纯介绍我的结果)
  • 生成速度比较快,而且还有一个艺术字的生成接口,挺不错
  • api接口只会生成一个二维码的图片流,如果需要把图片保存到本地需要通过浏览器直接get访问接口或者通过程序下载这个二维码

其次,下面给出封装的代码,由于下载和上面介绍的代码一样是公用的这里就不做陈述:

public QR_2dCode()
 {
 ApiUrl = "http://www.2d-code.cn/2dcode/api.php";
 }
 #region 生成二维码
 /// <summary>
 /// 生成二维码
 /// </summary>
 /// <param name="content">展示内容(文本内容 或者 扫描后的跳转http://格式的地址)</param>
 /// <param name="savePath">保存二维码的磁盘路径(默认程序跟目录+QRCode)</param>
 /// <param name="logoUrl"> Logo图标地址(格式:http://),官方不建议使用png格式,测试只有jpg成功</param>
 /// <param name="directUrl">扫描后重定向地址(http://)</param>
 /// <param name="apiUrl">接口地址(内置默认api地址)</param>
 /// <param name="wAndh">宽度和高度(二维码正方形的,高宽一至,默认200)</param>
 /// <returns></returns>
 public override string CreateQRCode(string content = null, string savePath = null, string logoUrl = null, string apiUrl = null, int? wAndh = null)
 {
 var qrName = string.Empty;
 #region 参数初始化
 ApiUrl = apiUrl ?? ApiUrl;
 Content = content ?? Content;
 SaveQRPath = savePath ?? SaveQRPath;
 LogoUrl = logoUrl ?? LogoUrl;
 WAndH = wAndh ?? WAndH;
 #endregion
 if (string.IsNullOrEmpty(ApiUrl)) { return qrName; }
 ApiUrl = string.Format("{0}?key=c_d800OBbu6hDzJtXPE2Yd02IMtmpuK9VdCqHe6vrtar4&text={1}&url={2}&logo={3}&size={4}",
 ApiUrl,
 HttpUtility.UrlEncode(Content.Contains("http") ? "" : Content),
 HttpUtility.UrlEncode(Content),
 HttpUtility.UrlEncode(LogoUrl),
 WAndH);
 qrName = DownImg(ApiUrl, SaveQRPath);
 return qrName;
 }
#endregion
</div>

topscan的Api二维码生成接口

首先,该接口肯定是免费的,参数描述和google的差不多,不同处在于可以传递Logo图标地址(当然可能我还没发现google的可以传递logo的参数,故此朋友们可以忽略);下面列举下接口参数说明和测试得出的注意点:

  • 接口关键参数是:text(内容参数),logo(Logo图标地址),w(生成出来二维码图片尺寸,格式如:200x200,这里是xyz的x不是*)
  • api接口只会生成一个二维码的
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解二维码生成工厂

相关文章

  • 2017-05-28C#基础 延迟加载介绍与实例
  • 2017-05-28C#模拟MSN窗体抖动的实现代码
  • 2017-05-28c#保存窗口位置大小操作类(序列化和文件读写功能)
  • 2017-05-28.NET中保证线程安全的高级方法Interlocked类使用介绍
  • 2017-05-28C#中类与接口的区别个人总结
  • 2017-05-28c# 文件(夹)创建与删除
  • 2017-05-28C#微信公众号开发之接收事件推送与消息排重的方法
  • 2017-05-28C#采用mouse_event函数实现模拟鼠标功能
  • 2017-05-28C#接口(Interface)用法分析
  • 2017-05-28关于C#中排序函数的总结

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#获取鼠标在listview右键点击单元格的内容方法
    • c#使用netmail方式发送邮件示例
    • C# IEnumerable和IEnumerator接口浅析
    • C#的FileSystemWatcher用法实例详解
    • C#异常处理详解
    • c# xml API操作的小例子
    • C#简单判断字符编码的方法
    • c#实现sunday算法实例
    • C#的SQL操作类实例
    • C#调用SQL语句时乘号的用法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有