本文實(shí)例為大家分享了unityZXing二維碼生成與掃描的具體代碼,供大家參考,具體內(nèi)容如下

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供江漢網(wǎng)站建設(shè)、江漢做網(wǎng)站、江漢網(wǎng)站設(shè)計(jì)、江漢網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、江漢企業(yè)網(wǎng)站模板建站服務(wù),10年江漢做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
借鑒自某位大佬不記得了
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZXing;
using UnityEngine.UI;
/// <summary>
/// 二維碼掃描識(shí)別功能
/// </summary>
public class TestQRCodeScanning : MonoBehaviour {
[Header("攝像機(jī)檢測(cè)界面")]
public RawImage cameraTexture;//攝像機(jī)映射顯示區(qū)域
private WebCamTexture webCamTexture;//攝像機(jī)映射紋理
public Text text;//用來(lái)顯示掃描信息
//二維碼識(shí)別類
BarcodeReader barcodeReader;//庫(kù)文件的對(duì)象(二維碼信息保存的地方)
/// <summary>
/// 開啟攝像機(jī)和準(zhǔn)備工作
/// </summary>
void DeviceInit()
{
//1、獲取所有攝像機(jī)硬件
WebCamDevice[] devices = WebCamTexture.devices;
//2、獲取第一個(gè)攝像機(jī)硬件的名稱
string deviceName = devices[0].name;//手機(jī)后置攝像機(jī)
//3、創(chuàng)建實(shí)例化一個(gè)攝像機(jī)顯示區(qū)域
webCamTexture = new WebCamTexture(deviceName, 400, 300);
//4、顯示的圖片信息
cameraTexture.texture = webCamTexture;
//5、打開攝像機(jī)運(yùn)行識(shí)別
webCamTexture.Play();
//6、實(shí)例化識(shí)別二維碼信息存儲(chǔ)對(duì)象
barcodeReader = new BarcodeReader();
}
Color32[] data;//二維碼圖片信息以像素點(diǎn)顏色信息數(shù)組存放
/// <summary>
/// 識(shí)別攝像機(jī)圖片中的二維碼信息
/// 打印二維碼識(shí)別到的信息
/// </summary>
void ScanQRCode()
{
//7、獲取攝像機(jī)畫面的像素顏色數(shù)組信息
data = webCamTexture.GetPixels32();
//8、獲取圖片中的二維碼信息
Result result = barcodeReader.Decode(data,webCamTexture.width,webCamTexture.height);
//如果獲取到二維碼信息了,打印出來(lái)
if (result!=null)
{
Debug.Log(result.Text);//===》==》===》 這是從二維碼識(shí)別出來(lái)的信息
text.text = result.Text;//顯示掃描信息
//掃描成功之后的處理
IsScanning = false;
webCamTexture.Stop();
}
}
/// <summary>
/// Start 初始化函數(shù)
/// </summary>
private void Start()
{
scanningButton.onClick.AddListener(ScanningButtonClick);
}
bool IsScanning = false;
float interval = 3;//掃描識(shí)別時(shí)間間隔
[SerializeField] Button scanningButton;
void ScanningButtonClick()
{
DeviceInit();
IsScanning = true;
}
private void Update()
{
if (IsScanning)
{
//每隔一段時(shí)間進(jìn)行一次識(shí)別二維碼信息
interval += Time.deltaTime;
if (interval>=3)
{
interval = 0;
ScanQRCode();//開始掃描
}
}
}
}
ZXing:ZingNet
下載之后把zxing.unity.dll拷貝到Unity的Plugins文件夾下,
zxing.unity.dll下載之后的位置找到UnityDemo/Assets下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using ZXing;
//二維碼的生成
public class TestQRCodeDraw : MonoBehaviour {
[Header("繪制好的二維碼顯示界面")]
public RawImage QRCode;
//二維碼繪制類
BarcodeWriter barcodeWriter;
[SerializeField] Button drawbutton;
/// <summary>
/// 將制定字符串信息轉(zhuǎn)換成二維碼圖片信息
/// </summary>
/// <param name="formatStr">要生產(chǎn)二維碼的字符串信息</param>
/// <param name="width">二維碼的寬度</param>
/// <param name="height">二維碼的高度</param>
/// <returns>返回二維碼圖片的顏色數(shù)組信息</returns>
Color32[] GeneQRCode(string formatStr,int width,int height)
{
//繪制二維碼前進(jìn)行一些設(shè)置
ZXing.QrCode.QrCodeEncodingOptions options =
new ZXing.QrCode.QrCodeEncodingOptions();
//設(shè)置字符串轉(zhuǎn)換格式,確保字符串信息保持正確
options.CharacterSet = "UTF-8";
//設(shè)置繪制區(qū)域的寬度和高度的像素值
options.Width = width;
options.Height = height;
//設(shè)置二維碼邊緣留白寬度(值越大留白寬度大,二維碼就減小)
options.Margin = 1;
//實(shí)例化字符串繪制二維碼工具
barcodeWriter = new BarcodeWriter {Format=BarcodeFormat.QR_CODE,Options=options };
//進(jìn)行二維碼繪制并進(jìn)行返回圖片的顏色數(shù)組信息
return barcodeWriter.Write(formatStr);
}
/// <summary>
/// 根據(jù)二維碼圖片信息繪制指定字符串信息的二維碼到指定區(qū)域
/// </summary>
/// <param name="str">要生產(chǎn)二維碼的字符串信息</param>
/// <param name="width">二維碼的寬度</param>
/// <param name="height">二維碼的高度</param>
/// <returns>返回繪制好的圖片</returns>
Texture2D ShowQRCode(string str,int width,int height)
{
//實(shí)例化一個(gè)圖片類
Texture2D t = new Texture2D(width, height);
//獲取二維碼圖片顏色數(shù)組信息
Color32[] col32 = GeneQRCode(str, width, height);
//為圖片設(shè)置繪制像素顏色信息
t.SetPixels32(col32);
//設(shè)置信息更新應(yīng)用下
t.Apply();
//將整理好的圖片信息顯示到指定區(qū)域中
return t;
}
/// <summary>
/// 開始繪制指定信息的二維碼
/// </summary>
/// <param name="formatStr"></param>
void DrawQRCode(string formatStr)
{
//注意:這個(gè)寬高度大小256不要變。不然生成的信息不正確
//256有可能是這個(gè)ZXingNet插件指定大小的繪制像素點(diǎn)數(shù)值
Texture2D t = ShowQRCode(formatStr, 256, 256);
//顯示到UI界面的圖片上
QRCode.texture = t;
}
public string QRCodeText = "二維碼";
void DrawButtonClick()
{
DrawQRCode(QRCodeText);
}
private void Start()
{
drawbutton.onClick.AddListener(DrawButtonClick);
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
網(wǎng)站欄目:unityZXing二維碼的生成與掃描
文章位置:http://chinadenli.net/article46/jgjeeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、軟件開發(fā)、云服務(wù)器、營(yíng)銷型網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)