unityZXing二维码的生成与扫描

本文实例为大家分享了unityZXing二维码生成与扫描的具体代码,供大家参考,具体内容如下

借鉴自某位大佬不记得了

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using ZXing;

using UnityEngine.UI;

/// <summary>

/// 二维码扫描" title="二维码扫描">二维码扫描识别功能

/// </summary>

public class TestQRCodeScanning : MonoBehaviour {

[Header("摄像机检测界面")]

public RawImage cameraTexture;//摄像机映射显示区域

private WebCamTexture webCamTexture;//摄像机映射纹理

public Text text;//用来显示扫描信息

//二维码识别类

BarcodeReader barcodeReader;//库文件的对象(二维码信息保存的地方)

/// <summary>

/// 开启摄像机和准备工作

/// </summary>

void DeviceInit()

{

//1、获取所有摄像机硬件

WebCamDevice[] devices = WebCamTexture.devices;

//2、获取第一个摄像机硬件的名称

string deviceName = devices[0].name;//手机后置摄像机

//3、创建实例化一个摄像机显示区域

webCamTexture = new WebCamTexture(deviceName, 400, 300);

//4、显示的图片信息

cameraTexture.texture = webCamTexture;

//5、打开摄像机运行识别

webCamTexture.Play();

//6、实例化识别二维码信息存储对象

barcodeReader = new BarcodeReader();

}

Color32[] data;//二维码图片信息以像素点颜色信息数组存放

/// <summary>

/// 识别摄像机图片中的二维码信息

/// 打印二维码识别到的信息

/// </summary>

void ScanQRCode()

{

//7、获取摄像机画面的像素颜色数组信息

data = webCamTexture.GetPixels32();

//8、获取图片中的二维码信息

Result result = barcodeReader.Decode(data,webCamTexture.width,webCamTexture.height);

//如果获取到二维码信息了,打印出来

if (result!=null)

{

Debug.Log(result.Text);//===》==》===》 这是从二维码识别出来的信息

text.text = result.Text;//显示扫描信息

//扫描成功之后的处理

IsScanning = false;

webCamTexture.Stop();

}

}

/// <summary>

/// Start 初始化函数

/// </summary>

private void Start()

{

scanningButton.onClick.AddListener(ScanningButtonClick);

}

bool IsScanning = false;

float interval = 3;//扫描识别时间间隔

[SerializeField] Button scanningButton;

void ScanningButtonClick()

{

DeviceInit();

IsScanning = true;

}

private void Update()

{

if (IsScanning)

{

//每隔一段时间进行一次识别二维码信息

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>

/// 将制定字符串信息转换成二维码图片信息

/// </summary>

/// <param name="formatStr">要生产二维码的字符串信息</param>

/// <param name="width">二维码的宽度</param>

/// <param name="height">二维码的高度</param>

/// <returns>返回二维码图片的颜色数组信息</returns>

Color32[] GeneQRCode(string formatStr,int width,int height)

{

//绘制二维码前进行一些设置

ZXing.QrCode.QrCodeEncodingOptions options =

new ZXing.QrCode.QrCodeEncodingOptions();

//设置字符串转换格式,确保字符串信息保持正确

options.CharacterSet = "UTF-8";

//设置绘制区域的宽度和高度的像素值

options.Width = width;

options.Height = height;

//设置二维码边缘留白宽度(值越大留白宽度大,二维码就减小)

options.Margin = 1;

//实例化字符串绘制二维码工具

barcodeWriter = new BarcodeWriter {Format=BarcodeFormat.QR_CODE,Options=options };

//进行二维码绘制并进行返回图片的颜色数组信息

return barcodeWriter.Write(formatStr);

}

/// <summary>

/// 根据二维码图片信息绘制指定字符串信息的二维码到指定区域

/// </summary>

/// <param name="str">要生产二维码的字符串信息</param>

/// <param name="width">二维码的宽度</param>

/// <param name="height">二维码的高度</param>

/// <returns>返回绘制好的图片</returns>

Texture2D ShowQRCode(string str,int width,int height)

{

//实例化一个图片类

Texture2D t = new Texture2D(width, height);

//获取二维码图片颜色数组信息

Color32[] col32 = GeneQRCode(str, width, height);

//为图片设置绘制像素颜色信息

t.SetPixels32(col32);

//设置信息更新应用下

t.Apply();

//将整理好的图片信息显示到指定区域中

return t;

}

/// <summary>

/// 开始绘制指定信息的二维码

/// </summary>

/// <param name="formatStr"></param>

void DrawQRCode(string formatStr)

{

//注意:这个宽高度大小256不要变。不然生成的信息不正确

//256有可能是这个ZXingNet插件指定大小的绘制像素点数值

Texture2D t = ShowQRCode(formatStr, 256, 256);

//显示到UI界面的图片上

QRCode.texture = t;

}

public string QRCodeText = "二维码";

void DrawButtonClick()

{

DrawQRCode(QRCodeText);

}

private void Start()

{

drawbutton.onClick.AddListener(DrawButtonClick);

}

}

以上是 unityZXing二维码的生成与扫描 的全部内容, 来源链接: utcz.com/z/339374.html

回到顶部