Unity解析Base64的图片

29 篇文章 10 订阅

Unity解析Base64的图片

项目中有需求,要将从网络中接收到的Base64(string)在项目中转换为图片(Texture2D)使用。稍微看了一下,其实很简单,这里记录一下:

Texture2D _texture = new Texture2D(4096, 4096);
_texture.LoadImage(Convert.FromBase64String(m_textureBase64));

这样就可以,获取到图片了。
代码中Texture2D的长宽高是和后台、引擎的同学沟通之后获得的,或可在网络传输时获得;然后通过Convert.FromBase64String函数将字符串string的Base64转化为byte[]类型;然后通过LoadImage函数读取该byte[]结果;便可以获得图片Texture2D
LoadImage函数是UnityEngine库中静态类ImageConversion中的方法,他可以被Texture2D类直接调用。该类中还有一些常用的方法函数,包括:

[NativeMethod(Name = "ImageConversionBindings::EncodeToEXR", IsFreeFunction = true, ThrowsException = true)]
public static byte[] EncodeToEXR(this Texture2D tex, Texture2D.EXRFlags flags);
public static byte[] EncodeToEXR(this Texture2D tex);
[NativeMethod(Name = "ImageConversionBindings::EncodeToJPG", IsFreeFunction = true, ThrowsException = true)]
public static byte[] EncodeToJPG(this Texture2D tex, int quality);
public static byte[] EncodeToJPG(this Texture2D tex);
[NativeMethod(Name = "ImageConversionBindings::EncodeToPNG", IsFreeFunction = true, ThrowsException = true)]
public static byte[] EncodeToPNG(this Texture2D tex);
[NativeMethod(Name = "ImageConversionBindings::EncodeToTGA", IsFreeFunction = true, ThrowsException = true)]
public static byte[] EncodeToTGA(this Texture2D tex);
[NativeMethod(Name = "ImageConversionBindings::LoadImage", IsFreeFunction = true)]
public static bool LoadImage([NotNull] this Texture2D tex, byte[] data, bool markNonReadable);
public static bool LoadImage(this Texture2D tex, byte[] data);

当然这也只是一部分,还有一些我并没有使用遇到,之后其用法再做补充。

Unity 中将 base64 编码的字符串转换为图片可以使用以下代码: ```csharp using System; using System.IO; using UnityEngine; public static class Base64Utils { public static Texture2D Base64ToTexture2D(string base64) { string[] base64Parts = base64.Split(','); if (base64Parts.Length != 2) { Debug.LogError("Invalid base64 input string!"); return null; } string imageType = base64Parts[0].Replace("data:", "").Replace(";base64", ""); if (imageType != "image/png" && imageType != "image/jpeg") { Debug.LogError("Unsupported image type: " + imageType); return null; } Texture2D texture = new Texture2D(1, 1); byte[] imageData = Convert.FromBase64String(base64Parts[1]); if (texture.LoadImage(imageData)) { return texture; } Debug.LogError("Failed to load image data!"); return null; } } ``` 这段代码定义了一个 `Base64Utils` 静态类,其中有一个 `Base64ToTexture2D` 方法可以将 base64 编码的字符串转换为 `Texture2D` 对象。这个方法首先分离出 base64 字符串中的图片类型和编码数据,然后根据图片类型创建一个新的 `Texture2D` 对象,并使用 `Convert.FromBase64String` 方法将 base64 编码的字符串解码为字节数组,最后使用 `texture.LoadImage` 方法将字节数组加载到 `Texture2D` 对象中。 你可以在你的代码中使用该静态方法,例如: ```csharp string base64Str = "data:image/png;base64,iVBORw0KG...QmCC"; Texture2D texture = Base64Utils.Base64ToTexture2D(base64Str); if (texture != null) { // 将 texture 作为图片显示在 UI 或 3D 对象上 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天富儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值