您好,登錄后才能下訂單哦!
本次主要分享的是3個免費的二維碼接口的對接代碼和測試得出的注意點及區別,有更好處理方式多多交流,相互促進進步;最近在學習JavsScript的擴展TypeScript,感覺語法糖很甜,大部分與C#更為類似,可能都是微軟項目的原因吧,有興趣的朋友可以多多相互交流下;
以上是個人的看法,下面來正式分享今天的文章吧:
. Google的Api二維碼生成接口
. 2d-code的Api二維碼生成接口
. topscan的Api二維碼生成接口
. 使用面向對象+加載程序集創建對象合并以上接口封裝成二維碼生成工廠
下面一步一個腳印的來分享:
. Google的Api二維碼生成接口
首先,這里給出Google接口文檔的鏈接下載,熱情的朋友馬上就會打開此鏈接吧,詳細看下里面的參數這就不做截圖了,大致通常用到的參數是:api地址,內容參數,生成圖片的高寬這3個參數,其他的幾個參數都采用默認的吧,不同需要大家可以更詳細的看下;其實第一次看到文檔里面的參數,感覺少了一些東西,比如怎么不能傳遞二維碼中間那個圖標的圖片地址和掃描二維碼過后怎么跳轉到我想重定向的url鏈接呢,帶著這個疑問我進行了多次的嘗試;下面給出自己嘗試的結果說明:
1. 接口關鍵參數是:cht(固定值qr),chl(內容參數),chs(生成出來二維碼圖片尺寸,格式如:200x200,這里是xyz的x不是*)
2. api接口只會生成一個二維碼的圖片流,如果需要把圖片保存到本地需要通過瀏覽器直接get訪問接口或者通過程序下載這個二維碼
3. 內容參數如果傳遞文本信息,在生成出來的二維碼圖片中間不會顯示文本內容,只有用手機掃描二維碼才能在手機上顯示傳遞的文本信息
4. 內容參數如果傳遞單純的http://格式的鏈接地址,那么手機掃描后會自動重定向到改http://鏈接地址上下載(這個掃描重定向可以用來做一些商品或者文章的查看)
5. google接口暫未研究出此Logo圖標地址參數(希望有朋友研究出來后與我分享,謝謝)
6. 由于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 #endregion24 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 try14 {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,這個參數表示采用QR方法生成二維碼,因為這個api接口還有生成圖標的功能,所以只想要生成二維碼這里就固定,更多的生成圖標功能不在本章分享中,謝謝。下載
. 2d-code的Api二維碼生成接口下載
首先,該接口需要通過他們官網注冊一個key,然后從后臺獲取到這個key后才能調用接口地址,當然注冊后有個功能是,凡是您通過api接口生成的二維碼,除了自己通過流下載,還能通過他們后臺一起下載所有生成的圖片,本人暫時沒有去關注是否生成量大了會收費哈哈,下面列舉下接口參數說明和測試得出的注意點:
1. 接口關鍵參數是:key(注冊獲取),text(文本參數),url(掃描后重定向地址),logo(Logo圖標地址),size(二維碼正方形,高寬)
2. 接口的文本參數只能傳遞文本,不能當做掃描后重定向的地址參數使用和Google等接口有點不一樣
3. 掃描后重定向地址和Logo圖標地址都是可訪問的http://格式的地址鏈接
4. Logo圖標地址,官方說不建議使用png格式,測試只有jpg成功(可能是測試不夠多這里只單純介紹我的結果)
5. 生成速度比較快,而且還有一個藝術字的生成接口,挺不錯
6. api接口只會生成一個二維碼的圖片流,如果需要把圖片保存到本地需要通過瀏覽器直接get訪問接口或者通過程序下載這個二維碼
其次,下面給出封裝的代碼下載,由于下載和上面介紹的代碼一樣是公用的這里就不做陳述:
View Code
. topscan的Api二維碼生成接口下載
首先,該接口肯定是免費的,參數描述和google的差不多,不同處在于可以傳遞Logo圖標地址(當然可能我還沒發現google的可以傳遞logo的參數,故此朋友們可以忽略);下面列舉下接口參數說明和測試得出的注意點:
1. 接口關鍵參數是:text(內容參數),logo(Logo圖標地址),w(生成出來二維碼圖片尺寸,格式如:200x200,這里是xyz的x不是*)
2. api接口只會生成一個二維碼的圖片流,如果需要把圖片保存到本地需要通過瀏覽器直接get訪問接口或者通過程序下載這個二維碼
3. 內容參數如果傳遞文本信息,在生成出來的二維碼圖片中間不會顯示文本內容,只有用手機掃描二維碼才能在手機上顯示傳遞的文本信息
4. 內容參數如果傳遞單純的http://格式的鏈接地址,那么手機掃描后會自動重定向到改http://鏈接地址上(這個掃描重定向可以用來做一些商品或者文章的查看)
5. Logo圖標地址(格式:http://),jpg,png測試通過
6. 測試得出有時候請求生成二維碼不返回數據,有可能是我網路問題吧,正常生成二維碼的速度還是挺快
其次,下面給出封裝的代碼下載,由于下載和上面介紹的代碼一樣是公用的這里就不做陳述:
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 }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。