文章目录

  • 方案一·:
    • 1.识别
    • 2.生成
  • 实例

需要用到ZXing.dll
ZXing:
官方地址: https://archive.codeplex.com/?p=zxingnet
地址2: https://download.csdn.net/download/weixin_45023328/19360975

方案一·:

1.识别

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZXing;
using UnityEngine.UI;
/// <summary>
/// 二维码扫描识别功能
/// </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();//开始扫描}}}
}

2.生成

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);}
}

实例

识别二维码
脚本

using System;
using System.Collections;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;
using ZXing;public class QRCode : MonoBehaviour
{public string LastResult;public string CameraName;public RawImage MyCameraTexture;public int CameraIndex = 0;public int CameraRequestedWidth = 1920;public int CameraRequestedHeight = 1080;public float ReadTime = 0.5f;private Color32[] Data;private WebCamTexture WebCameraTexture;private bool IsStart = false;//public RenderTexture QRRenderTexture;private void Start(){//开启摄像头StartCoroutine(CallCamera());}//调用摄像头IEnumerator CallCamera(){//请求摄像头权限yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);//是否取得使用摄像头权限if (Application.HasUserAuthorization(UserAuthorization.WebCam)){//得到可用设备列表WebCamDevice[] devices = WebCamTexture.devices;//判断输入的CameraIndex是否合法if (CameraIndex < 0){Debug.LogError("CameraIndex 不可为负数");yield break;}if (devices.Length <= CameraIndex){Debug.LogError("Do not find Camera!");}else{CameraName = devices[CameraIndex].name;WebCameraTexture = new WebCamTexture(devices[0].name, CameraRequestedWidth, CameraRequestedHeight, 25);MyCameraTexture.texture = WebCameraTexture;WebCameraTexture.Play(); //开始摄像 IsStart = true;print(IsStart = true);CameraRequestedWidth = WebCameraTexture.width;CameraRequestedHeight = WebCameraTexture.height;}}else{Debug.LogError("未获得系统授权!");}}//开始调用摄像头public void ShowCamera(){MyCameraTexture.enabled = true;WebCameraTexture.Play();}//停止摄像头调用public void HideCamera(){MyCameraTexture.enabled = false;WebCameraTexture.Stop();}private void OnGUI(){GUI.Label(new Rect(260, 30, Screen.width, 20), "LastResult:" + LastResult);if (GUI.Button(new Rect(0, 0, 200, 80), "Camera ON/OFF")){if (WebCameraTexture.isPlaying)HideCamera();elseShowCamera();}}private void Update(){if (IsStart && MyCameraTexture.enabled){Data = WebCameraTexture.GetPixels32();//StartCoroutine(DecodeQR(WebCameraTexture.width, WebCameraTexture.height));Thread t = new Thread(DecodeQR);t.Start();t.IsBackground = true;}}private void DecodeQR(){//Debug.Log("DecodeQR()");IsStart = false;// 创建二维码读写器var barcodeReader = new BarcodeReader { AutoRotate = true, TryHarder = true };try{//Debug.Log("解");// 对当前帧解码Result result = barcodeReader.Decode(Data, CameraRequestedWidth, CameraRequestedHeight);if (result != null){LastResult = result.Text;print("Read out:" + result.Text);}else{print("没有数据");}Data = null;}catch(Exception e){Debug.LogError(e);}// 设置睡眠时间Thread.Sleep((int)(ReadTime * 1000));IsStart = true;}
}

unity 生成和识别二维码相关推荐

  1. java生成和识别二维码

    全栈工程师开发手册 (作者:栾鹏) java教程全解 本文使用两种方式生成和识别二维码. 方法1:使用日本公司的qrcode 需要引入的包 qrcode_swetake.jar qrcode.jar ...

  2. 香橙派 ubuntu c# .net 使用ThoughtWorks.QRCodCore库生成 或识别 二维码,及报错处理方法

    在linux下生成和识别二维码,试了大半天,找到个库测试通过可以使用 ThoughtWorks.QRCodCore 其它的库有些仅在window下可用,有些使用困难 这里如果你在linux下跑的话,一 ...

  3. C# 生成和识别二维码

    生成和识别二维码 本来认为这功能在网上一搜一大堆,结果确实如此.但没有一个能用的,要么就是要收费,要么不能使用. 于是乎一顿搜索,经测试代码稳定,无论是纯二维码还是复杂图像嵌入二维码,均可识别 文章目 ...

  4. Android 扫描、生成、识别二维码、条码 一库搞定

    他来了,他来了,他带着YXing走来了. YXing 集成了CameraX + zxing, 简洁调用,功能完善,自定义扫码界面,再也不用像以前一样cv一堆冗余的Camera代码进项目了. 怎么集成: ...

  5. 用 Java 生成和识别二维码就这么简单

    大家好,我是青空. 青空最近一直在思考一个问题,Java 能不能做一些比较有意思的事情,但是在网络上搜索的时候,有意思好玩的东西,都被 Python 给做了.Java 似乎就只剩下八股文,面试,框架, ...

  6. python二维码生成识别代码_Python3+qrcode+zxing生成和识别二维码教程

    一.安装依赖库 pip install qrcode pillow image zxing pillow是python3中PIL的代替库,image是生成图版需要用到的库 安装image时报错&quo ...

  7. c# 生成、识别二维码

    @Tomato c# 这里以winform为例,窗体内拉入,textBox1.button1.button2.pictureBox1 4个控件 文章目录 1.引用包 2.生成二维码 3.识别二维码 1 ...

  8. Python3 生成和识别二维码

    文章目录 问题描述 代码 一点解释 [写在前面] 在当今社会中,二维码的使用非常的广泛.当然作为一名充满好奇心又爱装逼的 coder 怎么能不会使用二维码编码自己想表达的内容呢,尤其是用在装逼和找对象 ...

  9. AI生成二维码Stable diffusion生成可识别二维码【附完整教程】【附完整案例】

    前言 最近的炫酷QR比较火,所以今天给大家分享一下如何实现.首先我们知道QR二维码已经改变了信息的共享和获取方式.但是,QR码的视觉外观可能并不总是符合设计或艺术品的美学要求.为了解决这个问题,Con ...

  10. python实现二维码识别软件_用 Python 生成 识别二维码

    说到二维码大家一定不陌生,可以说现在二维码几乎渗透到了我们生活的各个角落,举例来说吧,我们到超市商场购物时扫描二维码付款,我们出行时乘坐公交地铁扫描二维码进站,我们到菜鸟驿站取件时扫描二维码取件,如果 ...

最新文章

  1. 神经网络压缩方法:模型量化的概念简介
  2. 软件测试-HTTP Analyzer过期了怎么办?
  3. 电商的本质是“商”还是“用户”?
  4. ARM存储器的大小端存储方式
  5. 机器人 铑元素_智能机器人 三十三
  6. php 静态成员(static)抽象类(abstract)和接口(interface)
  7. 51Nod 1445 变色DNA
  8. 父亲去年喂猪挣了21万
  9. 关于 WCF Binding 中 OpenTimeout, CloseTimeout, SendTimeout, ReceiveTimeout 的解释
  10. Excel VBA | 一键批量生成对账单
  11. 青春是一列不再回头的火车…
  12. 女生做数据分析师累吗?零基础可以转行吗?
  13. 【注意力机制集锦2】BAMSGEDAN原文、结构、源码详解
  14. 如何把android studio中的项目发布到手机上(超详细版)
  15. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
  16. 跪求c语言购买图书编程,C语言书费已知单价输入数量求总价 给定每种图书购买的数量,编程计算应付的总费用...
  17. 同一个浏览器开不同窗口使得session不同的方法
  18. Bootstrap -Card卡片
  19. 【实验四 循环结构】7-4 sdut-C语言实验-求阶乘(循环结构)
  20. 月薪过万应届生的10个忠告,抽点时间看看,真心受用!!

热门文章

  1. iphone邮件服务器 263,如何在iPhone和iPad中设置使用263企业邮箱?
  2. win10 java不兼容_win10系统提示edge浏览器不兼容的解决方法
  3. Mysql 事务锁等待时间超时
  4. mysql基础学习--day7
  5. Android APK瘦身优化
  6. Modbus功能码及错误码说明
  7. 从周易六十四卦看软件架构真好懂!女朋友这下不用担心我的学习了【程序员编程】
  8. 深信服:Weblogic集群负载均衡技术解决方案
  9. SSHD服务的搭建与管理
  10. Centos7.5安装redis