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 }
欲戴王冠 必承其重