需求介绍
最近项目中遇到一个需求,用户扫码打开网页,在网页上手绘任意图片,提交后由Unity获取并显示。
与web前端沟通后决定通过长链接监听,先由web前端将图片转码为Base64格式,Unity接收包含图片Base64码的Json包,通过C#解码为Texture2d格式并生成Sprite,最终显示在Canvas上。
转码过程
1.首先通过Convert.FromBase64String(string s)
方法,将获取的Base64码解析为字节数组byte[]
格式,该方法需要使用System命名空间。
2.再使用Texture2D.LoadImage(byte[] data)
方法,将获取的字节数组转化为Texture2D格式。
代码示例
using System;
using UnityEngine;
public static class Base64ToImage{
/// <summary>
/// base64编码的文本 转为Texture2D材质
/// </summary>
/// <param name="basestr">base64字符串</param>
/// <returns>转换后的Bitmap对象</returns>
public static Texture2D Base64StringToImage(string basestr)
{
Texture2D t2d = new Texture2D(1, 1);
try
{
byte[] arr = Convert.FromBase64String(basestr);
t2d.LoadImage(arr);
Debug.Log("转换成功");
}
catch (Exception ex)
{
Debug.Log("转换失败");
}
return t2d;
}
}
静态类静态方法。
其中new临时Texture2D对象时,参数长宽可以任意设置,我设的就是(1,1),因为LoadImage方法会重新覆盖对象的长宽。
这是一个很简单的实现,如果有其他需求,比如将图片保存等,可以参考Bitmap的使用,一般会用到System.Drawing这个dll,有时间再补充。