将图像数组转换为 JSON 文件并在 C# 之后对其进行解码
Posted
技术标签:
【中文标题】将图像数组转换为 JSON 文件并在 C# 之后对其进行解码【英文标题】:Convert array of images to JSON file and decode it after C# 【发布时间】:2021-08-02 15:46:11 【问题描述】:我想创建一个包含图像的数组,然后将其提取为 JSON 文件。然后将此文件上传到服务器。然后将此文件下载到一个项目中,然后我想将 JSON 文件转换回它之前的图像数组,以便我可以从其中检索图像。那么这个编解码过程是如何实现的呢?这在 C# 中可能吗? (我使用 Unity3D 更准确) 谢谢
【问题讨论】:
您可以将所有图像转换为 base64 字符串,并创建这些字符串的数组并将其转换为 JSON。当您检索 JSON 时,您可以将 base64 字符串转换回图像。 您确定需要为此使用 json 吗?你看过资产包吗? 【参考方案1】:一般而言,以基于文本的格式存储二进制数据是个坏主意……可以这样做,但需要 Base64 编码字符串(ToBase64String
和 FromBase64String
)……这需要比原始格式更多的内存字节本身。
但是是的,您可能可以使用类似的东西,例如
// The root JSON object
[Serializable]
public class Root
public List<ImageData> encodedImages = new List<ImageData>();
// Empty constructor required by serializer
public Root()
public Root(Texture2D[] textures)
foreach(var tex in textures)
encodedImages.Add(new ImageData(tex));
// Data for each encoded image/Texture2D
[Serializable]
public class ImageData
public int width;
public int height;
public int type;
public string encodedData;
// empty constructor required by serializer
public ImageData()
pubilc ImageData(Texture2D tex)
width = tex.width;
height = tex.height;
type = (int)tex.format;
// Note that this is SLOW!
var bytes = tex.EncodeToPNG();
encodedData = Convert.ToBase64String(bytes);
public Texture2D GetTexture()
var bytes = Convert.FromBase64String(encodedData);
var tex = new Texture(width, height, (TextureFormat)type, false);
tex.LoadRawTextureData(bytes);
tex.Apply();
return tex;
public string Encode(Texture2D[] textures)
var output = new Root(textures);
return JsonUtility.ToJson(output);
public Texture2D[] Decode(string json)
var root = JsonUtility.FromJson<Root>(json);
var count = root.encodedImages.Length;
var output = new Texture2D[count];
for(var i = 0; i < count; i++)
output[i] = root.encodedImages[i].GetTexture();
return output.ToArray();
正如所说的那样可能不是很有效。
这将生成一个 JSON,其结构有点像例如
"encodedImages":
[
"width": 1080,
"height": 1920,
"type": 4,
"encodedData": "U29tZSBCYXNlNjQgRW5jb2RlZCBJbWFnZSBEYXRhIEhlcmUh"
,
"width": 800,
"height": 600,
"type": 4,
"encodedData": "RXZlbiBtb3JlIEJhc2U2NCBlbmNvZGVkIGltYWdlIGRhdGEgaGVyZSE="
,
....
]
注意:在智能手机上输入,但我希望思路清晰
【讨论】:
以上是关于将图像数组转换为 JSON 文件并在 C# 之后对其进行解码的主要内容,如果未能解决你的问题,请参考以下文章
我想将图像数据(Texture2D)转换为 Base64 字符串并存储在 Unity3D(C#)中的 JSON 文件中