当前位置:   article > 正文

unityZXing二维码的生成与扫描

zxing.qrcode.qrcodeencodingoptions
此文转载自:https://blog.csdn.net/weixin_41995872/article/details/85989478

借鉴自某位大佬不记得了

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using ZXing;
  5. using UnityEngine.UI;
  6. /// <summary>
  7. /// 二维码扫描识别功能
  8. /// </summary>
  9. public class TestQRCodeScanning : MonoBehaviour {
  10. [Header("摄像机检测界面")]
  11. public RawImage cameraTexture;//摄像机映射显示区域
  12. private WebCamTexture webCamTexture;//摄像机映射纹理
  13. public Text text;//用来显示扫描信息
  14. //二维码识别类
  15. BarcodeReader barcodeReader;//库文件的对象(二维码信息保存的地方)
  16. /// <summary>
  17. /// 开启摄像机和准备工作
  18. /// </summary>
  19. void DeviceInit()
  20. {
  21. //1、获取所有摄像机硬件
  22. WebCamDevice[] devices = WebCamTexture.devices;
  23. //2、获取第一个摄像机硬件的名称
  24. string deviceName = devices[0].name;//手机后置摄像机
  25. //3、创建实例化一个摄像机显示区域
  26. webCamTexture = new WebCamTexture(deviceName, 400, 300);
  27. //4、显示的图片信息
  28. cameraTexture.texture = webCamTexture;
  29. //5、打开摄像机运行识别
  30. webCamTexture.Play();
  31. //6、实例化识别二维码信息存储对象
  32. barcodeReader = new BarcodeReader();
  33. }
  34. Color32[] data;//二维码图片信息以像素点颜色信息数组存放
  35. /// <summary>
  36. /// 识别摄像机图片中的二维码信息
  37. /// 打印二维码识别到的信息
  38. /// </summary>
  39. void ScanQRCode()
  40. {
  41. //7、获取摄像机画面的像素颜色数组信息
  42. data = webCamTexture.GetPixels32();
  43. //8、获取图片中的二维码信息
  44. Result result = barcodeReader.Decode(data,webCamTexture.width,webCamTexture.height);
  45. //如果获取到二维码信息了,打印出来
  46. if (result!=null)
  47. {
  48. Debug.Log(result.Text);//========》 这是从二维码识别出来的信息
  49. text.text = result.Text;//显示扫描信息
  50. //扫描成功之后的处理
  51. IsScanning = false;
  52. webCamTexture.Stop();
  53. }
  54. }
  55. /// <summary>
  56. /// Start 初始化函数
  57. /// </summary>
  58. private void Start()
  59. {
  60. scanningButton.onClick.AddListener(ScanningButtonClick);
  61. }
  62. bool IsScanning = false;
  63. float interval = 3;//扫描识别时间间隔
  64. [SerializeField] Button scanningButton;
  65. void ScanningButtonClick()
  66. {
  67. DeviceInit();
  68. IsScanning = true;
  69. }
  70. private void Update()
  71. {
  72. if (IsScanning)
  73. {
  74. //每隔一段时间进行一次识别二维码信息
  75. interval += Time.deltaTime;
  76. if (interval>=3)
  77. {
  78. interval = 0;
  79. ScanQRCode();//开始扫描
  80. }
  81. }
  82. }
  83. }

ZXing:https://archive.codeplex.com/?p=zxingnet

下载之后把zxing.unity.dll拷贝到Unity的Plugins文件夹下,

zxing.unity.dll下载之后的位置找到UnityDemo/Assets下

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using ZXing;
  6. //二维码的生成
  7. public class TestQRCodeDraw : MonoBehaviour {
  8. [Header("绘制好的二维码显示界面")]
  9. public RawImage QRCode;
  10. //二维码绘制类
  11. BarcodeWriter barcodeWriter;
  12. [SerializeField] Button drawbutton;
  13. /// <summary>
  14. /// 将制定字符串信息转换成二维码图片信息
  15. /// </summary>
  16. /// <param name="formatStr">要生产二维码的字符串信息</param>
  17. /// <param name="width">二维码的宽度</param>
  18. /// <param name="height">二维码的高度</param>
  19. /// <returns>返回二维码图片的颜色数组信息</returns>
  20. Color32[] GeneQRCode(string formatStr,int width,int height)
  21. {
  22. //绘制二维码前进行一些设置
  23. ZXing.QrCode.QrCodeEncodingOptions options =
  24. new ZXing.QrCode.QrCodeEncodingOptions();
  25. //设置字符串转换格式,确保字符串信息保持正确
  26. options.CharacterSet = "UTF-8";
  27. //设置绘制区域的宽度和高度的像素值
  28. options.Width = width;
  29. options.Height = height;
  30. //设置二维码边缘留白宽度(值越大留白宽度大,二维码就减小)
  31. options.Margin = 1;
  32. //实例化字符串绘制二维码工具
  33. barcodeWriter = new BarcodeWriter {Format=BarcodeFormat.QR_CODE,Options=options };
  34. //进行二维码绘制并进行返回图片的颜色数组信息
  35. return barcodeWriter.Write(formatStr);
  36. }
  37. /// <summary>
  38. /// 根据二维码图片信息绘制指定字符串信息的二维码到指定区域
  39. /// </summary>
  40. /// <param name="str">要生产二维码的字符串信息</param>
  41. /// <param name="width">二维码的宽度</param>
  42. /// <param name="height">二维码的高度</param>
  43. /// <returns>返回绘制好的图片</returns>
  44. Texture2D ShowQRCode(string str,int width,int height)
  45. {
  46. //实例化一个图片类
  47. Texture2D t = new Texture2D(width, height);
  48. //获取二维码图片颜色数组信息
  49. Color32[] col32 = GeneQRCode(str, width, height);
  50. //为图片设置绘制像素颜色信息
  51. t.SetPixels32(col32);
  52. //设置信息更新应用下
  53. t.Apply();
  54. //将整理好的图片信息显示到指定区域中
  55. return t;
  56. }
  57. /// <summary>
  58. /// 开始绘制指定信息的二维码
  59. /// </summary>
  60. /// <param name="formatStr"></param>
  61. void DrawQRCode(string formatStr)
  62. {
  63. //注意:这个宽高度大小256不要变。不然生成的信息不正确
  64. //256有可能是这个ZXingNet插件指定大小的绘制像素点数值
  65. Texture2D t = ShowQRCode(formatStr, 256, 256);
  66. //显示到UI界面的图片上
  67. QRCode.texture = t;
  68. }
  69. public string QRCodeText = "二维码";
  70. void DrawButtonClick()
  71. {
  72. DrawQRCode(QRCodeText);
  73. }
  74. private void Start()
  75. {
  76. drawbutton.onClick.AddListener(DrawButtonClick);
  77. }
  78. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/715857
推荐阅读
相关标签
  

闽ICP备14008679号