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

/// <summary>
    /// 生成2维码 方法
    /// 经测试:能生成任意尺寸的正方形
    /// </summary>
    /// <param name="content"></param>
    /// <param name="width"></param>
    /// <param name="height"></param>
    public static void GenerateQRCode2(string _qrcodeText, int _width, int _height, Action<Texture2D> _OnGenerateQRCode)
    {
        string qrcodeText = _qrcodeText;
        int width = _width;
        int height = _height;
        Action<Texture2D> OnGenerateQRCode = _OnGenerateQRCode;

        if (qrcodeText != null)
        {
            Loom.RunAsync(() =>
            {
                try
                {
                    // 编码成color32
                    MultiFormatWriter writer = new MultiFormatWriter();
                    Dictionary<EncodeHintType, object> hints = new Dictionary<EncodeHintType, object>();
                    hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
                    hints.Add(EncodeHintType.MARGIN, 1);
                    hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.M);
                    BitMatrix bitMatrix = writer.encode(qrcodeText, BarcodeFormat.QR_CODE, width, height, hints);

                    // 转成texture2d
                    int w = bitMatrix.Width;
                    int h = bitMatrix.Height;

                    Color32[] color32 = Encode(qrcodeText, width, height);
                    Loom.QueueOnMainThread(() =>
                    {
                        Texture2D texture = new Texture2D(w, h);
                        for (int x = 0; x < h; x++)
                        {
                            for (int y = 0; y < w; y++)
                            {
                                if (bitMatrix[x, y])
                                {
                                    //标志色
                                    texture.SetPixel(y, x, Color.black);
                                }
                                else
                                {
                                    //底色
                                    texture.SetPixel(y, x, Color.white);
                                }
                            }
                        }
                        texture.Apply();
                        if (OnGenerateQRCode != null)
                        {
                            OnGenerateQRCode(texture);
                        }
                    });
                }
                catch (Exception ex)
                {
                    Loom.QueueOnMainThread(() =>
                    {
                        Debug.Log("QRCodeHelper::GenerateQRCode - Exception : " + ex.ToString());
                    });
                }
            });
        }
        else
        {
            if (OnGenerateQRCode != null)
            {
                OnGenerateQRCode(null);
            }
        }
    }

解码:

public static void DecodeQRCode(Color32[] _data, int _width, int _height, Action<string> _OnDecodeQRCode)
    {
        Color32[] data = _data;
        int width = _width;
        int height = _height;
        Action<string> OnDecodeQRCode = _OnDecodeQRCode;

        Loom.RunAsync(() =>
        {
            BarcodeReader barcodeReader = new BarcodeReader { AutoRotate = true };
            barcodeReader.Options.TryHarder = true;
            try
            {
                // decode the current frame
                Result result = barcodeReader.Decode(data, width, height);
                Loom.QueueOnMainThread(() =>
                {
                    if (result != null)
                    {
                        if (OnDecodeQRCode != null)
                        {
                            OnDecodeQRCode(result.Text);
                        }
                    }
                    else
                    {
                        if (OnDecodeQRCode != null)
                        {
                            OnDecodeQRCode(null);
                        }
                    }
                });
            }
            catch
            {
                Loom.QueueOnMainThread(() =>
                {
                    if (OnDecodeQRCode != null)
                    {
                        OnDecodeQRCode(null);
                    }
                });
            }
        });
        // create a reader with a custom luminance source
    }
private static Color32[] Encode(string textForEncoding, int width, int height)
    {
        BarcodeWriter writer = new BarcodeWriter
        {
            Format = BarcodeFormat.QR_CODE,
            Options = new QrCodeEncodingOptions
            {
                Height = height,
                Width = width
            }
        };
        return writer.Write(textForEncoding);
    }

原文地址:https://www.cnblogs.com/leesymbol/p/12050424.html

时间: 2024-08-04 09:58:51

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

Android 基于google Zxing实现二维码的生成,识别和长按识别的效果

最近项目用到了二维码的生成与识别,之前没有接触这块,然后就上网搜了搜,发现有好多这方面的资源,特别是google Zxing对二维码的封装,实现的已经不错了,可以直接拿过来引用,下载了他们的源码后,只做了少少的改动,就是在Demo中增加了长按识别的功能,网上虽然也有长按识别的Demo,但好多下载下来却无法运行,然后总结了一下,加在了下面的Demo中. 如图所示,引用时直接把用红色圈起来的包放在你项目所对应的文件夹下,当然一些资源文件,比如string.xml里项目的引用你自己添加上就是 当然别忘

使用ZXing扫描二维码和生成二维码

二维码在APP中的使用越来越多,于是就是找了相关的资料写了一个二维码扫描和生成二维码的Demo. 本Demo使用了第三方的ZXing库.github的地址: Zxing AndroidStudio中的引用: File---New---import  module导入ZXing的第三方库然后选中项目按F4, 点击加号选择File dependency将ZXing库导入. 接下来就开始写布局文件 activity_main.xml <?xml version="1.0" encodi

Android zxing 解析二维码,生成二维码极简demo

zxing 官方的代码很多,看起来很费劲,此demo只抽取了有用的部分,实现了相机预览解码,解析本地二维码,生成二维码三个功能. 简化后的结构如下: 废话少说直接上代码: BaseDecodeHandler: package com.song.zxing.decode; import android.graphics.Bitmap; import android.os.Bundle; import com.google.zxing.BarcodeFormat; import com.google

后端生成二维码 - C#生成二维码(QR)

最近在github上找到一个相对比较好的C#二维码生成类库.在这里和大家分享一下. github地址:https://github.com/codebude/QRCoder 把解决方案下载下来,编译生成QRCoder.dll,就可以使用了.这个类库定制化的参数比较少,只支持两个参数(二维码文本,纠错级别).其中图片尺寸不好控制,可以生成较大一点的图片.当在前台展示的时候限定图片的尺寸就可以了.(二维码图片放大于缩小,一般不会影响识别度.) 1 using QRCoder; 2 3 namespa

小程序动态生成二维码,生成image图片

前端: <image src="{{img_usrl}}" style="width:100%;height:104px;" bindlongtap="saveImg"></image> js部分:在onLoad中请求 //我的userid 值为:239a3c37-3c2e-4a9d-be74-557638b23b63this.setData({ img_usrl: getApp().getBaseUrl() + &quo

c# 使用ZXing.Net生成二维码

生活中使用二维码还是很多的,前段时间公司领导让研究一下二维码,所以,在这写下研究的心得. 生成二维码的途径一般有两种,一是,通过前端方式生成二维码使用 QRCode.js生成二维码,二就是通过服务端代码生成,这里主要说服务器端的生成二维码的方式. 一,首先服务端生成二维码,通过调用dll就可以了,比较常用的dll有两种一种是QrCode.Net另一种是ZXing.Net,我选择了ZXing.Net来生成二维码. 二,下载ZXing.dll 下载地址 http://zxingnet.codeple

java学习-zxing生成二维码矩阵的简单例子

这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件 也可使用maven添加依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.0</version> </dependency> 最简单的生成二维码的方法,

在Vue项目中动态生成二维码 阿星小栈

一.使用jquery.qrcode生成二维码 1.首先在页面中加入jquery库文件和qrcode插件 <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.qrcode.min.js"></script> 2.在页面中需要显示二维码的

java 生成 二维码 和jquery 生成二维码

生成二维码 Java 生成二维码: 思路为拿到jar 包知道里面的方法使用 Step one : 在https://github.com/zxing中下载(点击网页中名为 zxing 的a标签,跳转到源码页面,点击release 查看所有发布的源码,下载zip压缩文件 Step two:  解压文件后打开文件夹,将core包和javase包 中的com包拷贝到一java项目src目录下.右键导出 jar file  得到一个二维码开发的jar包 Step three: 进行二维码制作 impor