您的位置:首页 > 移动开发 > Unity3D

Unity结合ZXing生成二维码并保存

2014-02-19 17:54 183 查看
本文参考地址:
http://blog.csdn.net/liulala16/article/details/14521979 http://blog.csdn.net/hellogv/article/details/6101663 http://www.unitymanual.com/3164.html http://unity3d.9ria.com/?p=4748
首先要绘制图片,那么system.drawing.dll必不可少,大家可以在自己安装的Unity路径下找到mono的该文件并复制一份到当前的工程中(***\Unity\Editor\Data\Mono\lib\mono\2.0)。除了调用这个之外还有一个必备的文件调用ZXing net(下载地址:http://zxingnet.codeplex.com/),解压之后将unity文件夹导入到当前的工程中,这样制作二维码的工作就可以开始了!

新建一个脚本:

using UnityEngine;
using System;
using System.IO;
using System.Collections;
using System.Drawing;
using ZXing;
using ZXing.QrCode;

public class TwoDimesionCode : MonoBehaviour
{
public Texture2D encoded;   //二维码贴图
public string Lastresult = "";  //生成二维码的信息

void Start()
{
encoded = new Texture2D(256, 256);  //二维码图片大小
}

/// <summary>
///根据二维码包含的信息以及宽高,对文本信息进行转码
/// </summary>
/// <param name="textForEncoding"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns></returns>
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);
}

void OnGUI()
{
Lastresult = GUI.TextField(new Rect(10, 10, 150, 30), Lastresult);  //输入二维码包含信息
if (GUI.Button(new Rect(10, 45, 100, 30), "Draw"))
{
//绘制二维码
string textForEncoding = Lastresult;
if (textForEncoding != null)
{
Color32[] color32 = Encode(textForEncoding, encoded.width, encoded.height);
encoded.SetPixels32(color32);   //根据转换来的32位颜色值来计算二维码的像素
encoded.Apply();    //生成二维码
}
}
if (GUI.Button(new Rect(10, 80, 100, 30), "SaveEncode") && encoded != null)
{
try
{
byte[] pngData = encoded.EncodeToPNG();     //将Texture2D转码成png格式的字节数据
if (Application.platform == RuntimePlatform.Android)
{
File.WriteAllBytes(Application.persistentDataPath + "/" + Lastresult + "png", pngData);     //Android平台上保存的图片地址(一般保存在Android/data/com.***.***文件夹下)
GUI.Label(new Rect(Screen.width, Screen.height, Screen.width, Screen.height / 2), Application.persistentDataPath);
}
else
{
File.WriteAllBytes(Application.dataPath + "/TwoDimensionCode/" + Lastresult + ".png", pngData);     //非Android平台图片保存地址
}
print("save ok");
}
catch (Exception ioe)
{
Debug.LogException(ioe);    //输出图片保存异常信息
}
}
GUI.DrawTexture(new Rect(Screen.width/2-128, Screen.height/2-128, 256, 256), encoded);      //在屏幕上绘制出生成的二维码
if (GUI.Button(new Rect(10, 115, 100, 30), "Exit"))
{
Application.Quit();
}
}
}
然后将此脚本挂在摄像机或者场景中的任何物体上,点击运行,输入字符串如“123456879”,点击“Draw”后可以在界面上看到生成的二维码,然后点击“SaveEncode”可以将二维码保存到本地文件夹中。




(图片保存至本地,android平台测试可用,不支持中文识别)。
http://pan.baidu.com/s/1kTLp64n
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: