QR Code
點擊查看工程文件https://github.com/DarkingForUnity/EditorTools/tree/master/Assets/Tools_DK/QR
- 二維碼生成器
- Local:本地生成孙咪;
- Network :請求草料二維碼API 招拙,返回二維碼圖片缸剪,需要網(wǎng)絡(luò)
Loca:
使用本地生成二維碼需要引入“zxing.dll”文件汁果,對字符串進(jìn)行解析拥知。
- 1荡陷、將字符串?dāng)?shù)據(jù)轉(zhuǎn)換成二維碼數(shù)據(jù):
private static Color32[] Encode(string textForEncoding, int width, int height)
{
var writer = new BarcodeWriter
{
Format = BarcodeFormat.QR_CODE,
Options = new QrCodeEncodingOptions
{
Height = height,
Width = width
}
};
return writer.Write(textForEncoding);
}
- 2蟋座、將二維碼數(shù)據(jù)交給對應(yīng)的圖片褐澎,目前圖片的顯示主要為UGUI中的Texture格式和Sprite精靈圖片籽孙,以下就分別賦值給兩種格式
Texture:
public static Texture CreatQR_texture(string message)
{
Texture2D encoded;
encoded = new Texture2D(256, 256);
if (message.Length > 1)
{
//二維碼寫入圖片
var color32 = Encode(message, encoded.width, encoded.height);
encoded.SetPixels32(color32);
encoded.Apply();
}
else
{
Debug.Log("生成二維碼失敗");
}
return encoded;
}
Sprite:
public static Sprite CreatQR_sprite(string message)
{
Texture2D encoded;
encoded = new Texture2D(256, 256);
if (message.Length > 1)
{
//二維碼寫入圖片
var color32 = Encode(message, encoded.width, encoded.height);
encoded.SetPixels32(color32);
encoded.Apply();
}
else
{
Debug.Log("生成二維碼失敗");
}
Sprite sprite = Sprite.Create(encoded, new Rect(0, 0, encoded.width, encoded.height), Vector2.zero);
return sprite;
}
Net:
網(wǎng)絡(luò)請求二維碼烈评,是直接調(diào)用草料二維碼在線生成二維碼API,通過解析返回頁面犯建,獲取對應(yīng)二維碼圖片讲冠,再交給對應(yīng)圖片對象;
- 網(wǎng)絡(luò)請求:
-
查詢草料官網(wǎng)的API适瓦,找到請求格式竿开,這就是之后我們需要請求的地址;
在瀏覽器根據(jù)API的格式輸入請求地址
https://cli.im/api/qrcode/code?text=https://DarkingForUnity.github.io
-
在瀏覽器界面按下F12玻熙,調(diào)出界面代碼否彩,依次點擊 1、2嗦随,在3區(qū)域能看到二維碼的圖片鏈接列荔,我們需要的就是提取
src="http://
后面的圖片鏈接敬尺。
-
將提取到的圖片鏈接直接輸入瀏覽器,就可以看到成功出現(xiàn)了二維碼贴浙,就表示這個地址可用砂吞,我們可以在unity中使用該地址獲取圖片
-
WWW w = new WWW("https://cli.im/api/qrcode/code?text=" + message);
yield return w;
//獲取'src=" //' 后所有的數(shù)據(jù)
string s = w.text.Substring(w.text.IndexOf("<img src=") + 12, w.text.Length - (w.text.IndexOf("<img src=") + 12));
//截取src="" 內(nèi)部的鏈接地址,不包括'//'
string result = s.Substring(0, s.IndexOf("\""));
WWW www = new WWW(result);
yield return www;
encoded.texture= www.texture;
- 獲取圖片信息后的賦值操作和上面的一樣崎溃,就不重復(fù)贅述蜻直。