Unity中指定相机截屏,并将图片转为Base64

问题背景:

需求就是只截场景,不包含UI,并将截图保存为Base64格式给到Web展示。

方案:

指定相机截图:

 1 /// <summary>
 2         /// 指定相机截屏
 3         /// </summary>
 4         /// <param name="camera"></param>
 5         /// <param name="rect"></param>
 6         /// <returns></returns>
 7         public byte[] CaptureScreen(Camera camera, Rect rect)
 8         {
 9             RenderTexture rt = new RenderTexture(camera.pixelWidth, camera.pixelHeight, 0);
10 
11             camera.targetTexture = rt;
12             camera.Render();
13 
14             RenderTexture.active = rt;
15             Texture2D screenShot = new Texture2D(camera.pixelWidth, camera.pixelHeight, TextureFormat.RGBA32, false);
16 
17             screenShot.ReadPixels(rect, 0, 0);
18             screenShot.Apply();
19 
20             camera.targetTexture = null;
21             RenderTexture.active = null;
22             GameObject.Destroy(rt);
23 
24             byte[] bytes = screenShot.EncodeToPNG();
25 
26             return bytes;
27         }

这里我没写到内存,因为我不需要,我这是直接传上去。

转Base64很简单:

 1  /// <summary>
 2         /// 图片流转Base64
 3         /// </summary>
 4         /// <param name="bytesArr"></param>
 5         /// <returns></returns>
 6         public String Texture2DToBase64(byte[] bytesArr)
 7         {
 8             string strbaser64 = Convert.ToBase64String(bytesArr);
 9 
10             return strbaser64;
11         }

Base64:

网络上最常见的用于传输8Bit字节码的编码方式之一,Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。Base64由于以上优点被广泛应用于计算机的各个领域,(百科)

 

截图实例:

 

 

最新问题:前端解码Base64图片乱码问题

首先乱码有两点问题造成的:

1.图片过大

2.编码格式

我先对图片进行压缩,并且格式转为jpg,发现不好使。所以锁定原因在编码格式,转utf-8后可以了

 1         /// <summary>
 2         /// 图片流转Base64并设置编码格式
 3         /// </summary>
 4         /// <param name="bytesArr"></param>
 5         /// <returns></returns>
 6         private string Texture2DToBase64(byte[] bytesArr)
 7         {
 8 
 9             string strbaser64 = Convert.ToBase64String(bytesArr);
10 
11             byte[] bytes = Encoding.UTF8.GetBytes(strbaser64);
12             string utf8String = Encoding.UTF8.GetString(bytes);
13 
14             return utf8String;
15         }

 

posted @ 2020-04-10 18:32  望景思心  阅读(963)  评论(0编辑  收藏  举报