Unity插件系列之二维码

1.二维码常见的生成与识别途径

1.草料二维码 https://cli.im/text

2.在软件中实现生成和扫描二维码 使用zxing实现

zxing是一个用java写的开源项目,zxing.net是移植到.net工程上的。

https://github.com/micjahn/ZXing.Net

2.实现二维码的识别

1.Unity工程

2.让RawImage显示摄像头内容

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZXing;
using UnityEngine.UI;

public class QRCodeTest : MonoBehaviour {
    public RawImage cameraTexture;

    private WebCamTexture webCamTexture;
	// Use this for initialization
	void Start () {
        WebCamDevice[] devices = WebCamTexture.devices;
        string deviceName = devices[0].name;
        webCamTexture = new WebCamTexture(deviceName, 400, 300);
        cameraTexture.texture = webCamTexture;
        webCamTexture.Play();
	}

	// Update is called once per frame
	void Update () {

	}
}

3.扫描功能实现代码(代码有点长,慢慢看)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZXing;
using UnityEngine.UI;

public class QRCodeTest : MonoBehaviour {
    public RawImage cameraTexture;//存储摄像头拍到的内容

    private WebCamTexture webCamTexture;//摄像头的内容

    Color32[] data;

    BarcodeReader barcodeReader;//Zxing提供的读取摄像头内容的方法

    float interval = 0f;//做定时器用
	// Use this for initialization
	void Start () {
        //打开了摄像头
        WebCamDevice[] devices = WebCamTexture.devices;
        string deviceName = devices[0].name;
        webCamTexture = new WebCamTexture(deviceName, 400, 300);
        cameraTexture.texture = webCamTexture;
        webCamTexture.Play();

        barcodeReader = new BarcodeReader();
	}

	// Update is called once per frame
	void Update () {
        interval += Time.deltaTime;
        if (interval >= 3f) {
            ScanQRCode();
            interval = 0f;
        }
	}

    void ScanQRCode()
    {
        //GetPixels32是把格式转换为Color32的方法
        data = webCamTexture.GetPixels32();
        //result存储读取的内容
        var result = barcodeReader.Decode(data, webCamTexture.width, webCamTexture.height);

        if (result != null) {
            Debug.Log(result.Text);
        }
    }
}

3.实现二维码的生成 (注:我关掉网络也能成功识别生成的二维码,说明这东西是离线的)

1.新建一个RawImage存储生成的识别图

2.添加了生成二维码的方法:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZXing;
using UnityEngine.UI;

public class QRCodeTest : MonoBehaviour {
    public RawImage cameraTexture;//存储摄像头拍到的内容
    public RawImage QRCode;//存储生成的二维码

    private WebCamTexture webCamTexture;//摄像头的内容

    Color32[] data;

    BarcodeReader barcodeReader;//Zxing提供的读取摄像头内容的方法
    BarcodeWriter barcodeWriter;//Zxing提供的写内容的方法

    float interval = 0f;//做定时器用
	// Use this for initialization
	void Start () {
        //打开了摄像头
        WebCamDevice[] devices = WebCamTexture.devices;
        string deviceName = devices[0].name;
        webCamTexture = new WebCamTexture(deviceName, 400, 300);
        cameraTexture.texture = webCamTexture;
        webCamTexture.Play();

        barcodeReader = new BarcodeReader();
	}

	// Update is called once per frame
	void Update () {
        interval += Time.deltaTime;
        if (interval >= 3f) {
            ScanQRCode();
            interval = 0f;
        }

        //按下空格键生成二维码
        if (Input.GetKeyDown(KeyCode.Space))
        {
            //在这种写法里 只能填入256
            ShowQRCode("我爱学习", 256, 256);
            //如果想要其他大小的二维码呢?见文章底部链接
        }
	}

    //扫描二维码方法
    void ScanQRCode()
    {
        //GetPixels32是从一张图片上获取颜色的方法
        data = webCamTexture.GetPixels32();
        //result存储读取的内容
        var result = barcodeReader.Decode(data, webCamTexture.width, webCamTexture.height);

        if (result != null) {
            Debug.Log(result.Text);
        }
    }

    //显示生成的二维码
    void ShowQRCode(string str,int width,int height) {
        //定义texture2d并且填充
        Texture2D t = new Texture2D(width, height);
        t.SetPixels32(GeneQRCode(str, width, height));
        t.Apply();

        QRCode.texture = t;
    }

    //返回Color32图片颜色的方法
    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 = width;
        options.Margin = 1;//二维码距离边缘的空白

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

        return barcodeWriter.Write(formatStr);
    }
}

更多:

ZXing 二维码生成的坑 http://blog.sina.com.cn/s/blog_6ad33d350102xj8l.html

zxing.net读取和保存二维码,设置中文字符集,读取中文二维码  https://bbs.csdn.net/topics/391950715?page=1

原文地址:https://www.cnblogs.com/kerven/p/8586924.html

时间: 2024-10-17 07:44:32

Unity插件系列之二维码的相关文章

jquery.qrcode二维码插件生成彩色二维码

jquery.qrcode.js 是居于jquery类库的绘制二维码的插件,用它来实现二维码图形渲染支持canvas和table两种绘图方式. (jquery.qrcode.js 设置显示方式为table时在webkit核心浏览器如chrome下会变形) 以下是测试代码(增加了颜色控制,可以设置4个区块的颜色值,需要指定render为table.),效果: jquery.qrcode生成彩色二维码" src="http://www.jbxue.com/d/file/2014/08/20

在vue中利用vue-qr插件动态生成二维码并嵌入LOGO

收到需求要生成二维码的时候刚进项目组不久,接触vue也才一两个星期,还处于懵逼状态. 本小白的第一反应就是百度二维码的生成方法,网上有很多大神给出解决方案,最开始本小白以为是在后台生成图片然后传到前台页面,后来发现可以直接在前端用js生成,网上查到的大部分都是用jquery.qrcode.js配合utf.js(为了支持中文)和jquery-1.8.0.js来实现,亲测可行(但本白只在原生HTML中实现,vue中死活报错:"找不到qrcode方法",是不是本小白没找准姿势,哪位大神求告知

Unity中Zxing生成二维码只能生成256大小图片的解决方案

/// <summary> /// 生成2维码 方法 /// 经测试:能生成任意尺寸的正方形 /// </summary> /// <param name="content"></param> /// <param name="width"></param> /// <param name="height"></param> public static

个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第12波-快速生成、读取、导出条形码二维码

根据指定的内容生成对应的条形码或二维码,在如今移动互联网时代,并不是一件什么新鲜事,随便百度一下,都能找到好多的软件或在线网站可以帮我们做到,但细想一下,如果很偶然地只是生成一个两这样的图形,百度一下找个在线网站生成一下下载到本地,再复制粘贴一下,并不是什么多大问题的事情,但如果要批量处理,又如何呢?如果生成的二维码条形码,先进行排版一下打印出来,类似一个个标签或用作相应的产品说明的一部分,那又是怎样一种现成的解决方案呢?本次Excel催化剂再次刷新大家对Excel的认识,所有大家想做的事情,全

C#运用GmaQrCode生成二维码

项目中需要生成二维码,方法比较多,可以采用JS插件,也可以采用第三方插件后台生成二维码,在后台方法中可以采用QRCode或者GmaQrCode,现在介绍一种C#在后台生成二维码的方法: /// <summary> /// 获取二维码 /// </summary> /// <param name="codeString">编码字符</param> /// <returns>二维码地址</returns> public

为jquery qrcode生成的二维码嵌入图片

在一次微信项目中,需要实现通过扫描二维码来进行会议签到,二维码的生成选择了qrcode.js的版本,然后使用jquery.qrcode.js插件来绘制二维码. <script type="text/javascript" src="jquery-1.8.2.min.js" ></script> <script type="text/javascript" src="jquery.qrcode.js"

jquery.qrcode.min.js(支持中文转化二维码)

详情请看: http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/jqueryqrcodeminjs/ 今天还是要讲一下关于二维码的知识,前几篇讲解中有讲到我使用的可以生成二维码的js是qrcode.js,然后结合Cordovad的插件$cordovaBarcodeScanner插件可以扫描二维码,这样就基本完成了简单的扫一扫功能.后来在项目进行,开始要调用后台数据和传参数到接口的时候发现qrcode.js它只能解析英文或者数字,并且

PHP生成二维码二种方法和实例

PHP生成二维码的两个方法和实例,分别使用Google API和PHP二维码生成类库PHP QR Code实现. 之前介绍过通过使用jQuery插件来生成二维码,今天分享下如何使用PHP生成二维码,以及如何生成中间带LOGO图像的二维码.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: $urlToEncode="http://www.jbxue.com"; generateQRfromGoogle($urlToEnc

使用javascript生成当前博文地址的二维码图片

前面的话 在电脑端发现一篇好的博文,想在手机上访问.这时,就必须打开手机浏览器输入长长的URL地址才行,非常不方便.如果在博客标题的后面跟一张小的图片,点击该图片后,出现一张二维码的大图,然后再通过手机扫一扫,来进行博文的访问,就相对方便很多. 通过搜索引擎搜索了一些生成二维码的文章,发现其并不是一件容易的事.同时,也发现了qrcode插件,该插件专门用于生成二维码.于是,在qrcode的基础上,实现了一个二维码插件qr 效果演示 如果细心的话,会发现该博文标题的后面紧跟着一个表示二维码的手机小